feat: Добавлена базовая структура приложения Home Service с бэкендом на NestJS и фронтендом на Next.js для управления событиями.
This commit is contained in:
61
backend/src/database/database.module.ts
Normal file
61
backend/src/database/database.module.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { Module, Global } from '@nestjs/common';
|
||||
import { PGlite } from '@electric-sql/pglite';
|
||||
import { drizzle, PgliteDatabase } from 'drizzle-orm/pglite';
|
||||
import * as schema from './schema';
|
||||
import { join } from 'path';
|
||||
import { existsSync, mkdirSync } from 'fs';
|
||||
import { sql } from 'drizzle-orm';
|
||||
|
||||
export const DATABASE_CONNECTION = 'DATABASE_CONNECTION';
|
||||
|
||||
const databaseProvider = {
|
||||
provide: DATABASE_CONNECTION,
|
||||
useFactory: async (): Promise<PgliteDatabase<typeof schema>> => {
|
||||
const dbPath = process.env.DATABASE_PATH || './data/events.db';
|
||||
|
||||
// Убедимся, что директория существует
|
||||
const dbDir = dbPath.substring(0, dbPath.lastIndexOf('/'));
|
||||
if (dbDir && !existsSync(dbDir)) {
|
||||
mkdirSync(dbDir, { recursive: true });
|
||||
}
|
||||
|
||||
const client = new PGlite(dbPath);
|
||||
const db = drizzle(client, { schema });
|
||||
|
||||
// Создаем таблицу напрямую вместо использования миграций
|
||||
try {
|
||||
await client.exec(`
|
||||
CREATE TABLE IF NOT EXISTS events (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
title TEXT NOT NULL,
|
||||
emoji TEXT NOT NULL,
|
||||
month INTEGER NOT NULL,
|
||||
day INTEGER NOT NULL,
|
||||
start_year INTEGER,
|
||||
end_month INTEGER,
|
||||
end_day INTEGER,
|
||||
end_year INTEGER,
|
||||
description TEXT,
|
||||
color TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
tags TEXT[],
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
||||
);
|
||||
`);
|
||||
console.log('✅ Database initialized successfully');
|
||||
} catch (error) {
|
||||
console.error('❌ Error initializing database:', error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
return db;
|
||||
},
|
||||
};
|
||||
|
||||
@Global()
|
||||
@Module({
|
||||
providers: [databaseProvider],
|
||||
exports: [DATABASE_CONNECTION],
|
||||
})
|
||||
export class DatabaseModule {}
|
||||
Reference in New Issue
Block a user