feat: add Migration entity, service, controller, and constants for migration management

This commit is contained in:
Boris D
2025-09-26 13:05:00 +03:00
parent 07efa3b8df
commit 6d88c21305
6 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,26 @@
import { Project } from "src/project/entities/project.entity";
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
@Entity("migration")
export class Migration {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column()
name: string;
@Column({ type: "timestamp", default: () => "CURRENT_TIMESTAMP" })
appliedAt: Date;
@Column({ type: "tinyint", default: 1 })
isApplied: number;
@Column({ type: "tinyint", default: 1 })
isValid: number;
@ManyToOne(() => Project, (project) => project.migrations)
project: Project;
@Column({ type: "jsonb", nullable: true })
data: Record<string, any>;
}

View File

@ -0,0 +1,26 @@
export type MigrationFieldType =
| "int"
| "float"
| "bigint"
| "boolean"
| "text"
| "uuid"
| "datetime";
export type MigrationField = {
type: MigrationFieldType;
isNullable: boolean;
isUnique: boolean;
default?: any;
};
export type MigrationRelationType =
| "one-to-many"
| "many-to-one"
| "many-to-many";
export type MigrationTable = {
name: string;
fields: Record<string, MigrationField>;
relations?: Record<string, { table: string; type: MigrationRelationType }>;
};

View File

@ -0,0 +1,4 @@
import { Controller } from "@nestjs/common";
@Controller("migrations")
export class MigrationController {}

View File

@ -0,0 +1,12 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { Migration } from "./entities/migration.entity";
import { MigrationController } from "./migration.controller";
import { MigrationService } from "./migration.service";
@Module({
imports: [TypeOrmModule.forFeature([Migration])],
controllers: [MigrationController],
providers: [MigrationService],
})
export class MigrationModule {}

View File

@ -0,0 +1,27 @@
import { Injectable } from "@nestjs/common";
import { In, Repository } from "typeorm";
import { Migration } from "./entities/migration.entity";
import { InjectRepository } from "@nestjs/typeorm";
import { Project } from "src/project/entities/project.entity";
@Injectable()
export class MigrationService {
constructor(
@InjectRepository(Migration)
private readonly migrationRepository: Repository<Migration>
@InjectRepository(Project)
private readonly projectRepository: Repository<Project>
) {}
create(tables: MigrationTable[], projectId: string): Promise<Migration> {
const project = this.projectRepository.findOne({
where: { token: projectId },
});
const migrations = this.migrationRepository.find({
where: {
}
})
}
}

View File

@ -1,3 +1,4 @@
import { Migration } from "src/migration/entities/migration.entity";
import { Token } from "../../api/entities/token.entity"; import { Token } from "../../api/entities/token.entity";
import { Query } from "../../query/entities/query.entity"; import { Query } from "../../query/entities/query.entity";
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
@ -13,6 +14,9 @@ export class Project {
@OneToMany(() => Token, (token) => token.project) @OneToMany(() => Token, (token) => token.project)
apiTokens: Token[]; apiTokens: Token[];
@OneToMany(() => Migration, (migration) => migration.project)
migrations: Migration[];
@OneToMany(() => Query, (query) => query.project) @OneToMany(() => Query, (query) => query.project)
queries: Query[]; queries: Query[];
} }