feat(#2): Implement PostgreSQL 17 + pgvector database schema

Establishes multi-tenant database layer with vector similarity search for AI-powered memory features. Includes Docker infrastructure, Prisma ORM integration, NestJS services, and shared types across the monorepo.

Key changes:
- Docker: PostgreSQL 17 + pgvector v0.7.4, Valkey cache
- Schema: 8 models (User, Workspace, Task, Event, Project, ActivityLog, MemoryEmbedding) with RLS preparation
- NestJS: PrismaModule, DatabaseModule, EmbeddingsService
- Shared: Type-safe enums, constants, and database types

Fixes #2

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Jason Woltje
2026-01-28 16:06:34 -06:00
parent 355cf2124b
commit 99afde4f99
26 changed files with 1844 additions and 64 deletions

View File

@@ -1,11 +1,15 @@
import { Controller, Get } from "@nestjs/common";
import { AppService } from "./app.service";
import { PrismaService } from "./prisma/prisma.service";
import type { ApiResponse, HealthStatus } from "@mosaic/shared";
import { successResponse } from "@mosaic/shared";
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
constructor(
private readonly appService: AppService,
private readonly prisma: PrismaService,
) {}
@Get()
getHello(): string {
@@ -13,10 +17,25 @@ export class AppController {
}
@Get("health")
getHealth(): ApiResponse<HealthStatus> {
async getHealth(): Promise<ApiResponse<HealthStatus>> {
const dbHealthy = await this.prisma.isHealthy();
const dbInfo = await this.prisma.getConnectionInfo();
const overallStatus = dbHealthy ? "healthy" : "degraded";
const packageVersion = process.env.npm_package_version;
return successResponse({
status: "healthy",
status: overallStatus,
timestamp: new Date().toISOString(),
...(packageVersion && { version: packageVersion }),
checks: {
database: {
status: dbHealthy ? "healthy" : "unhealthy",
message: dbInfo.connected
? `Connected to ${dbInfo.database} (${dbInfo.version})`
: "Database connection failed",
},
},
});
}
}