import { DatabiteServer, ConnectionStore, Connection } from "@databite/server";
import { ConnectionStore as EngineConnectionStore } from "@databite/engine";
// Example PostgreSQL connection store
class PostgresConnectionStore implements EngineConnectionStore {
constructor(private db: any) {} // Your database client
async create(connection: Connection<any>): Promise<Connection<any>> {
// Insert into your database
const result = await this.db.query(
'INSERT INTO connections (id, integration_id, connector_id, config, sync_interval, active_syncs, metadata, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *',
[connection.id, connection.integrationId, connection.connectorId, JSON.stringify(connection.config), connection.syncInterval, JSON.stringify(connection.activeSyncs || []), JSON.stringify(connection.metadata || {}), new Date(), new Date()]
);
return result.rows[0];
}
async read(connectionId: string): Promise<Connection<any> | undefined> {
// Select from your database
const result = await this.db.query('SELECT * FROM connections WHERE id = $1', [connectionId]);
return result.rows[0];
}
async readAll(params?: { page?: number; limit?: number }): Promise<{ data: Connection<any>[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean } }> {
// Select all from your database with pagination
const page = params?.page || 1;
const limit = params?.limit || 10;
const offset = (page - 1) * limit;
const countResult = await this.db.query('SELECT COUNT(*) FROM connections');
const total = parseInt(countResult.rows[0].count);
const totalPages = Math.ceil(total / limit);
const result = await this.db.query('SELECT * FROM connections ORDER BY created_at DESC LIMIT $1 OFFSET $2', [limit, offset]);
return {
data: result.rows,
pagination: {
page,
limit,
total,
totalPages,
hasNext: page < totalPages,
hasPrev: page > 1,
},
};
}
async update(connection: Connection<any>): Promise<Connection<any>> {
// Update in your database
const result = await this.db.query(
'UPDATE connections SET config = $1, sync_interval = $2, active_syncs = $3, metadata = $4, updated_at = $5 WHERE id = $6 RETURNING *',
[JSON.stringify(connection.config), connection.syncInterval, JSON.stringify(connection.activeSyncs || []), JSON.stringify(connection.metadata || {}), new Date(), connection.id]
);
return result.rows[0];
}
async delete(connectionId: string): Promise<void> {
// Delete from your database
await this.db.query('DELETE FROM connections WHERE id = $1', [connectionId]);
}
}
// Use your database store
const server = new DatabiteServer({
port: 3001,
engineConfig: {
connectors: [slack],
connectionStore: new PostgresConnectionStore(dbClient),
},
});