- Prisma schema: sqlite → mysql provider - Migration SQL rewritten as MySQL DDL (utf8mb4, DATETIME(3), AUTO_INCREMENT) - Add migration_lock.toml for mysql provider - Dockerfile.backend: drop node:22/sqlite deps, use node:20-slim - entrypoint.sh: replace SQLite first-run logic with prisma migrate deploy + db seed - docker-compose.prod.yml: production compose for /opt/webapps/okr on web VPS - reads DB creds from /opt/webapps/webapp-mysql.env - reads app secrets from /opt/webapps/okr/.env.app (written by CI) - port 80 (frontend), no conflict with Gitea 3000/Vault 8200 - ci.yml deploy-okr: moves from ubuntu-latest (web VPS) to ci-runner (161.33.149.243) - builds images on CI runner VPS (no heavy build on web/Gitea VPS) - transfers images via docker save | gzip | ssh | docker load - deploys via SSH + docker compose up on web VPS - scripts/setup-ci-runner.sh: one-time setup script for CI runner VPS Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
2.5 KiB
SQL
66 lines
2.5 KiB
SQL
-- MySQL initial schema for OKR application
|
|
CREATE TABLE `User` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(191) NOT NULL,
|
|
`username` VARCHAR(191) NOT NULL,
|
|
`email` VARCHAR(191) NOT NULL,
|
|
`passwordHash` VARCHAR(191) NOT NULL,
|
|
`role` VARCHAR(191) NOT NULL,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE INDEX `User_username_key`(`username`),
|
|
UNIQUE INDEX `User_email_key`(`email`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `Objective` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`title` VARCHAR(191) NOT NULL,
|
|
`description` VARCHAR(191) NULL,
|
|
`ownerId` INT NOT NULL,
|
|
`quarter` VARCHAR(191) NOT NULL,
|
|
`status` VARCHAR(191) NOT NULL DEFAULT 'NOT_STARTED',
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
INDEX `Objective_ownerId_idx`(`ownerId`),
|
|
INDEX `Objective_quarter_idx`(`quarter`),
|
|
INDEX `Objective_status_idx`(`status`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `KeyResult` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`objectiveId` INT NOT NULL,
|
|
`title` VARCHAR(191) NOT NULL,
|
|
`progress` INT NOT NULL DEFAULT 0,
|
|
`startValue` INT NOT NULL,
|
|
`targetValue` INT NOT NULL,
|
|
`deadline` DATETIME(3) NOT NULL,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
INDEX `KeyResult_objectiveId_idx`(`objectiveId`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `ProgressUpdate` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`keyResultId` INT NOT NULL,
|
|
`progress` INT NOT NULL,
|
|
`comment` VARCHAR(191) NULL,
|
|
`createdById` INT NOT NULL,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
ALTER TABLE `Objective` ADD CONSTRAINT `Objective_ownerId_fkey`
|
|
FOREIGN KEY (`ownerId`) REFERENCES `User`(`id`)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE `KeyResult` ADD CONSTRAINT `KeyResult_objectiveId_fkey`
|
|
FOREIGN KEY (`objectiveId`) REFERENCES `Objective`(`id`)
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE `ProgressUpdate` ADD CONSTRAINT `ProgressUpdate_keyResultId_fkey`
|
|
FOREIGN KEY (`keyResultId`) REFERENCES `KeyResult`(`id`)
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|