feat: add Migration entity, service, controller, and constants for migration management
This commit is contained in:
26
src/migration/entities/migration.entity.ts
Normal file
26
src/migration/entities/migration.entity.ts
Normal 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>;
|
||||
}
|
||||
26
src/migration/migration.constants.ts
Normal file
26
src/migration/migration.constants.ts
Normal 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 }>;
|
||||
};
|
||||
4
src/migration/migration.controller.ts
Normal file
4
src/migration/migration.controller.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import { Controller } from "@nestjs/common";
|
||||
|
||||
@Controller("migrations")
|
||||
export class MigrationController {}
|
||||
12
src/migration/migration.module.ts
Normal file
12
src/migration/migration.module.ts
Normal 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 {}
|
||||
27
src/migration/migration.service.ts
Normal file
27
src/migration/migration.service.ts
Normal 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: {
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
import { Migration } from "src/migration/entities/migration.entity";
|
||||
import { Token } from "../../api/entities/token.entity";
|
||||
import { Query } from "../../query/entities/query.entity";
|
||||
import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
|
||||
@ -13,6 +14,9 @@ export class Project {
|
||||
@OneToMany(() => Token, (token) => token.project)
|
||||
apiTokens: Token[];
|
||||
|
||||
@OneToMany(() => Migration, (migration) => migration.project)
|
||||
migrations: Migration[];
|
||||
|
||||
@OneToMany(() => Query, (query) => query.project)
|
||||
queries: Query[];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user