apps/api gains Prisma (instance_settings as the first model) with the initial migration applied automatically at startup via prisma migrate deploy, a lazy-connecting PrismaService, and GET /api/v1/readyz reporting named checks (database reachable, migrations applied) with 200/503. DATABASE_URL joins the validated environment schema; MIGRATE_ON_START=false skips deploys for tests and tooling. An idempotent seed script and a Compose dev overlay with PostgreSQL (host port 5434 — 5433 is taken locally) complete the loop. Closes #3 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25 lines
765 B
TypeScript
25 lines
765 B
TypeScript
/**
|
|
* Development/Test fixture seeding. Idempotent: running it twice must not
|
|
* duplicate anything. Real fixtures (users, ponds, pages) arrive with their
|
|
* feature stories (#20, #32); until then this only proves the wiring.
|
|
*/
|
|
import { PrismaClient } from '@prisma/client';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main(): Promise<void> {
|
|
await prisma.instanceSetting.upsert({
|
|
where: { key: 'seed.marker' },
|
|
create: { key: 'seed.marker', value: { seededAt: new Date().toISOString() } },
|
|
update: { value: { seededAt: new Date().toISOString() } },
|
|
});
|
|
console.log('seed: done (no fixtures defined yet)');
|
|
}
|
|
|
|
main()
|
|
.catch((error) => {
|
|
console.error(error);
|
|
process.exitCode = 1;
|
|
})
|
|
.finally(() => prisma.$disconnect());
|