Implement backend API and database services in Docker setup

- Added a new `api` service for the NestJS backend, including health checks and dependencies on PostgreSQL, Redis, and MinIO.
- Introduced PostgreSQL and Redis services with health checks and configurations for data persistence.
- Added MinIO for S3-compatible object storage and a one-shot service to initialize required buckets.
- Updated the Nginx configuration to proxy requests to the new backend API and MinIO storage.
- Enhanced the Dockerfile to support the new API environment variables and configurations.
- Updated the `package.json` and `package-lock.json` to include new dependencies for QR code generation and other utilities.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Dorian
2026-02-12 20:14:39 +00:00
parent f19fd6feef
commit cdd24a5def
478 changed files with 55355 additions and 529 deletions

View File

@@ -0,0 +1,32 @@
/* eslint-disable unicorn/no-array-method-this-argument */
import { Project } from 'src/projects/entities/project.entity';
import { Category } from 'src/projects/enums/category.enum';
import { MigrationInterface, QueryRunner } from 'typeorm';
export class MusicVideosUpdate1729096262567 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
// update all projects that have category music-video to have the category narrative and type music-video
const projects = await queryRunner.manager.find(Project, {
where: { category: 'music-video' as Category },
});
const updatedProjects = projects.map((project) => {
project.category = 'narrative';
project.type = 'music-video';
return project;
});
await queryRunner.manager.save(updatedProjects);
}
public async down(queryRunner: QueryRunner): Promise<void> {
// update all projects that have category narrative and type music-video to have the category music-video
const projects = await queryRunner.manager.find(Project, {
where: { category: 'narrative' as Category, type: 'music-video' },
});
const updatedProjects = projects.map((project) => {
project.category = 'music-video' as Category;
project.type = 'film';
return project;
});
await queryRunner.manager.save(updatedProjects);
}
}