fix: switch backend to CommonJS, generate Drizzle migrations, add migrate script
All checks were successful
Build and Push Docker Image to Gitea / build-and-push (push) Successful in 4m23s

- Remove "type": "module" and switch tsconfig to CommonJS/Node resolution
  to fix drizzle-kit ESM/CJS incompatibility
- Strip .js extensions from all backend TypeScript imports
- Fix gamification resolver: combine two .where() calls using and()
- Fix index.ts: wrap top-level awaits in async main(), fix Fastify+yoga
  request handling via handleNodeRequestAndResponse
- Generate initial Drizzle SQL migration (0000_pale_hellion.sql) for all
  15 tables
- Add src/scripts/migrate.ts: programmatic Drizzle migrator for production
- Copy migrations folder into Docker image (Dockerfile.backend)
- Add schema:migrate npm script

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-04 18:42:58 +01:00
parent 2565e6c28b
commit 4102f9990c
31 changed files with 2341 additions and 135 deletions

View File

@@ -6,8 +6,8 @@ import {
index,
uniqueIndex,
} from "drizzle-orm/pg-core";
import { users } from "./users.js";
import { files } from "./files.js";
import { users } from "./users";
import { files } from "./files";
export const articles = pgTable(
"articles",

View File

@@ -5,7 +5,7 @@ import {
index,
integer,
} from "drizzle-orm/pg-core";
import { users } from "./users.js";
import { users } from "./users";
export const comments = pgTable(
"comments",

View File

@@ -8,8 +8,8 @@ import {
pgEnum,
uniqueIndex,
} from "drizzle-orm/pg-core";
import { users } from "./users.js";
import { recordings } from "./recordings.js";
import { users } from "./users";
import { recordings } from "./recordings";
export const achievementStatusEnum = pgEnum("achievement_status", [
"draft",

View File

@@ -1,7 +1,7 @@
export * from "./files.js";
export * from "./users.js";
export * from "./videos.js";
export * from "./articles.js";
export * from "./recordings.js";
export * from "./comments.js";
export * from "./gamification.js";
export * from "./files";
export * from "./users";
export * from "./videos";
export * from "./articles";
export * from "./recordings";
export * from "./comments";
export * from "./gamification";

View File

@@ -9,8 +9,8 @@ import {
uniqueIndex,
jsonb,
} from "drizzle-orm/pg-core";
import { users } from "./users.js";
import { videos } from "./videos.js";
import { users } from "./users";
import { videos } from "./videos";
export const recordingStatusEnum = pgEnum("recording_status", [
"draft",

View File

@@ -8,7 +8,7 @@ import {
uniqueIndex,
integer,
} from "drizzle-orm/pg-core";
import { files } from "./files.js";
import { files } from "./files";
export const roleEnum = pgEnum("user_role", ["model", "viewer", "admin"]);

View File

@@ -8,8 +8,8 @@ import {
uniqueIndex,
primaryKey,
} from "drizzle-orm/pg-core";
import { users } from "./users.js";
import { files } from "./files.js";
import { users } from "./users";
import { files } from "./files";
export const videos = pgTable(
"videos",