diff --git a/.env.example b/.env.example index 5d2e739..67b9668 100644 --- a/.env.example +++ b/.env.example @@ -4,3 +4,5 @@ POSTGRES_USER=postgres POSTGRES_DB=open-health UPSTAGE_API_KEY=up_ OPENAI_API_KEY=sk- +# Example SQLite database URL +DATABASE_URL=sqlite:./dev.db diff --git a/docker-compose.yaml b/docker-compose.yaml index 8a5a916..78766c4 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,12 +13,20 @@ services: ports: - "5432:5432" + sqlite: + image: nouchka/sqlite3 + restart: always + volumes: + - sqlite_data:/var/lib/sqlite3/data + environment: + SQLITE_DB: ${SQLITE_DB} + app: build: context: . dockerfile: Dockerfile args: - - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB} + - DATABASE_URL=${DATABASE_URL} depends_on: - database volumes: @@ -27,8 +35,9 @@ services: - "3000:3000" restart: always environment: - DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB} + DATABASE_URL: ${DATABASE_URL} volumes: postgres_data: + sqlite_data: app_data: diff --git a/prisma/schema.prisma b/prisma/schema.prisma index efddf8d..efbf32b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,7 +3,7 @@ generator client { } datasource db { - provider = "postgresql" + provider = env("DATABASE_PROVIDER") url = env("DATABASE_URL") } diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index a159d01..a65db08 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -1,18 +1,30 @@ -import {PrismaClient} from "@prisma/client"; +import { PrismaClient } from "@prisma/client"; export function createPrismaClient() { - return new PrismaClient({ - log: ['warn', 'error'] - }); + const databaseProvider = process.env.DATABASE_PROVIDER || "postgresql"; + const databaseUrl = process.env.DATABASE_URL; + + if (!databaseUrl) { + throw new Error("DATABASE_URL environment variable is not set"); + } + + return new PrismaClient({ + log: ["warn", "error"], + datasources: { + db: { + url: databaseUrl, + }, + }, + }); } declare const globalThis: { - prismaGlobal: ReturnType; + prismaGlobal: ReturnType; } & typeof global; -const prisma = globalThis.prismaGlobal ?? createPrismaClient() +const prisma = globalThis.prismaGlobal ?? createPrismaClient(); -export default prisma -export {Prisma} from "@prisma/client"; +export default prisma; +export { Prisma } from "@prisma/client"; -if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma +if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = prisma;