feat: DB-Schema (candles, backtest_runs), Migration, CandleStore
This commit is contained in:
7
src/server/db/client.ts
Normal file
7
src/server/db/client.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { drizzle } from 'drizzle-orm/postgres-js';
|
||||
import postgres from 'postgres';
|
||||
import { env } from '../config';
|
||||
import * as schema from './schema';
|
||||
|
||||
export const sql = postgres(env.DATABASE_URL, { max: 5 });
|
||||
export const db = drizzle(sql, { schema });
|
||||
6
src/server/db/migrate.ts
Normal file
6
src/server/db/migrate.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { migrate } from 'drizzle-orm/postgres-js/migrator';
|
||||
import { db, sql } from './client';
|
||||
|
||||
await migrate(db, { migrationsFolder: './drizzle' });
|
||||
console.log('Migrations angewendet.');
|
||||
await sql.end();
|
||||
23
src/server/db/schema.ts
Normal file
23
src/server/db/schema.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { doublePrecision, jsonb, pgTable, primaryKey, serial, text, timestamp, varchar } from 'drizzle-orm/pg-core';
|
||||
|
||||
export const candles = pgTable(
|
||||
'candles',
|
||||
{
|
||||
pair: varchar('pair', { length: 16 }).notNull(),
|
||||
ts: timestamp('ts', { withTimezone: true }).notNull(),
|
||||
open: doublePrecision('open').notNull(),
|
||||
high: doublePrecision('high').notNull(),
|
||||
low: doublePrecision('low').notNull(),
|
||||
close: doublePrecision('close').notNull(),
|
||||
volume: doublePrecision('volume').notNull(),
|
||||
},
|
||||
(t) => [primaryKey({ columns: [t.pair, t.ts] })],
|
||||
);
|
||||
|
||||
export const backtestRuns = pgTable('backtest_runs', {
|
||||
id: serial('id').primaryKey(),
|
||||
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
||||
kind: text('kind').notNull(), // 'single' | 'walkforward'
|
||||
config: jsonb('config').notNull(),
|
||||
result: jsonb('result').notNull(),
|
||||
});
|
||||
Reference in New Issue
Block a user