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 { 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[];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user