Convert metadata tables to camel_case (#2420)

* Convert metadata tables to camelcase

* refactor folder structure

* rename datasourcemetadata

* regenerate metadata schema

* rename dataSourceMetadata to dataSource
This commit is contained in:
Weiko
2023-11-10 15:33:25 +01:00
committed by GitHub
parent 6e7ad5eabc
commit 04c618284f
98 changed files with 1189 additions and 1735 deletions

View File

@ -1,4 +1,4 @@
import { Field, InputType } from '@nestjs/graphql';
import { Field, HideField, InputType } from '@nestjs/graphql';
import { BeforeCreateOne } from '@ptc-org/nestjs-query-graphql';
import {
@ -9,8 +9,8 @@ import {
IsUUID,
} from 'class-validator';
import { RelationMetadataType } from 'src/metadata/relation-metadata/relation-metadata.entity';
import { BeforeCreateOneRelation } from 'src/metadata/relation-metadata/hooks/before-create-one-relation.hook';
import { RelationMetadataType } from 'src/metadata/relation-metadata/relation-metadata.entity';
@InputType()
@BeforeCreateOne(BeforeCreateOneRelation)
@ -50,5 +50,6 @@ export class CreateRelationInput {
@Field({ nullable: true })
icon?: string;
@HideField()
workspaceId: string;
}

View File

@ -0,0 +1,57 @@
import { ObjectType, ID, Field, HideField } from '@nestjs/graphql';
import { CreateDateColumn, UpdateDateColumn } from 'typeorm';
import {
Authorize,
IDField,
QueryOptions,
Relation,
} from '@ptc-org/nestjs-query-graphql';
import { ObjectMetadataDTO } from 'src/metadata/object-metadata/dtos/object-metadata.dto';
import { RelationMetadataType } from 'src/metadata/relation-metadata/relation-metadata.entity';
@ObjectType('relation')
@Authorize({
authorize: (context: any) => ({
workspaceId: { eq: context?.req?.user?.workspace?.id },
}),
})
@QueryOptions({
defaultResultSize: 10,
disableFilter: true,
disableSort: true,
maxResultsSize: 1000,
})
@Relation('fromObjectMetadata', () => ObjectMetadataDTO)
@Relation('toObjectMetadata', () => ObjectMetadataDTO)
export class RelationMetadataDTO {
@IDField(() => ID)
id: string;
@Field()
relationType: RelationMetadataType;
@Field()
fromObjectMetadataId: string;
@Field()
toObjectMetadataId: string;
@Field()
fromFieldMetadataId: string;
@Field()
toFieldMetadataId: string;
@HideField()
workspaceId: string;
@Field()
@CreateDateColumn()
createdAt: Date;
@Field()
@UpdateDateColumn()
updatedAt: Date;
}

View File

@ -1,35 +0,0 @@
import {
AutoResolverOpts,
PagingStrategies,
ReadResolverOpts,
} from '@ptc-org/nestjs-query-graphql';
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
import { RelationMetadata } from './relation-metadata.entity';
import { RelationMetadataService } from './services/relation-metadata.service';
import { CreateRelationInput } from './dtos/create-relation.input';
export const relationMetadataAutoResolverOpts: AutoResolverOpts<
any,
any,
unknown,
unknown,
ReadResolverOpts<any>,
PagingStrategies
>[] = [
{
EntityClass: RelationMetadata,
DTOClass: RelationMetadata,
ServiceClass: RelationMetadataService,
CreateDTOClass: CreateRelationInput,
enableTotalCount: true,
pagingStrategy: PagingStrategies.CURSOR,
read: { many: { disabled: true } },
create: { many: { disabled: true } },
update: { disabled: true },
delete: { disabled: true },
guards: [JwtAuthGuard],
},
];

View File

@ -1,5 +1,3 @@
import { ObjectType, ID, Field } from '@nestjs/graphql';
import {
Column,
CreateDateColumn,
@ -10,17 +8,11 @@ import {
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
import {
Authorize,
IDField,
QueryOptions,
Relation,
} from '@ptc-org/nestjs-query-graphql';
import { RelationMetadataInterface } from 'src/tenant/schema-builder/interfaces/relation-metadata.interface';
import { FieldMetadata } from 'src/metadata/field-metadata/field-metadata.entity';
import { ObjectMetadata } from 'src/metadata/object-metadata/object-metadata.entity';
import { FieldMetadataEntity } from 'src/metadata/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/metadata/object-metadata/object-metadata.entity';
export enum RelationMetadataType {
ONE_TO_ONE = 'ONE_TO_ONE',
@ -29,67 +21,57 @@ export enum RelationMetadataType {
}
@Entity('relationMetadata')
@ObjectType('relation')
@Authorize({
authorize: (context: any) => ({
workspaceId: { eq: context?.req?.user?.workspace?.id },
}),
})
@QueryOptions({
defaultResultSize: 10,
disableFilter: true,
disableSort: true,
maxResultsSize: 1000,
})
@Relation('fromObjectMetadata', () => ObjectMetadata)
@Relation('toObjectMetadata', () => ObjectMetadata)
export class RelationMetadata implements RelationMetadataInterface {
@IDField(() => ID)
export class RelationMetadataEntity implements RelationMetadataInterface {
@PrimaryGeneratedColumn('uuid')
id: string;
@Field()
@Column({ nullable: false })
relationType: RelationMetadataType;
@Field()
@Column({ nullable: false, type: 'uuid' })
fromObjectMetadataId: string;
@Field()
@Column({ nullable: false, type: 'uuid' })
toObjectMetadataId: string;
@Field()
@Column({ nullable: false, type: 'uuid' })
fromFieldMetadataId: string;
@Field()
@Column({ nullable: false, type: 'uuid' })
toFieldMetadataId: string;
@Column({ nullable: false })
workspaceId: string;
@ManyToOne(() => ObjectMetadata, (object) => object.fromRelations)
fromObjectMetadata: ObjectMetadata;
@ManyToOne(
() => ObjectMetadataEntity,
(object: ObjectMetadataEntity) => object.fromRelations,
)
fromObjectMetadata: ObjectMetadataEntity;
@ManyToOne(() => ObjectMetadata, (object) => object.toRelations)
toObjectMetadata: ObjectMetadata;
@ManyToOne(
() => ObjectMetadataEntity,
(object: ObjectMetadataEntity) => object.toRelations,
)
toObjectMetadata: ObjectMetadataEntity;
@OneToOne(() => FieldMetadata, (field) => field.fromRelationMetadata)
@OneToOne(
() => FieldMetadataEntity,
(field: FieldMetadataEntity) => field.fromRelationMetadata,
)
@JoinColumn()
fromFieldMetadata: FieldMetadata;
fromFieldMetadata: FieldMetadataEntity;
@OneToOne(() => FieldMetadata, (field) => field.toRelationMetadata)
@OneToOne(
() => FieldMetadataEntity,
(field: FieldMetadataEntity) => field.toRelationMetadata,
)
@JoinColumn()
toFieldMetadata: FieldMetadata;
toFieldMetadata: FieldMetadataEntity;
@Field()
@CreateDateColumn()
createdAt: Date;
@Field()
@UpdateDateColumn()
updatedAt: Date;
}

View File

@ -1,30 +1,52 @@
import { Module } from '@nestjs/common';
import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql';
import {
NestjsQueryGraphQLModule,
PagingStrategies,
} from '@ptc-org/nestjs-query-graphql';
import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { FieldMetadataModule } from 'src/metadata/field-metadata/field-metadata.module';
import { ObjectMetadataModule } from 'src/metadata/object-metadata/object-metadata.module';
import { MigrationRunnerModule } from 'src/metadata/migration-runner/migration-runner.module';
import { TenantMigrationRunnerModule } from 'src/tenant-migration-runner/tenant-migration-runner.module';
import { TenantMigrationModule } from 'src/metadata/tenant-migration/tenant-migration.module';
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
import { RelationMetadata } from './relation-metadata.entity';
import { relationMetadataAutoResolverOpts } from './relation-metadata.auto-resolver-opts';
import { RelationMetadataService } from './relation-metadata.service';
import { RelationMetadataEntity } from './relation-metadata.entity';
import { RelationMetadataService } from './services/relation-metadata.service';
import { CreateRelationInput } from './dtos/create-relation.input';
import { RelationMetadataDTO } from './dtos/relation-metadata.dto';
@Module({
imports: [
NestjsQueryGraphQLModule.forFeature({
imports: [
NestjsQueryTypeOrmModule.forFeature([RelationMetadata], 'metadata'),
NestjsQueryTypeOrmModule.forFeature(
[RelationMetadataEntity],
'metadata',
),
ObjectMetadataModule,
FieldMetadataModule,
MigrationRunnerModule,
TenantMigrationRunnerModule,
TenantMigrationModule,
],
services: [RelationMetadataService],
resolvers: relationMetadataAutoResolverOpts,
resolvers: [
{
EntityClass: RelationMetadataEntity,
DTOClass: RelationMetadataDTO,
ServiceClass: RelationMetadataService,
CreateDTOClass: CreateRelationInput,
enableTotalCount: true,
pagingStrategy: PagingStrategies.CURSOR,
read: { many: { disabled: true } },
create: { many: { disabled: true } },
update: { disabled: true },
delete: { disabled: true },
guards: [JwtAuthGuard],
},
],
}),
],
providers: [RelationMetadataService],

View File

@ -8,34 +8,35 @@ import { InjectRepository } from '@nestjs/typeorm';
import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
import { Repository } from 'typeorm';
import {
RelationMetadata,
RelationMetadataType,
} from 'src/metadata/relation-metadata/relation-metadata.entity';
import { ObjectMetadataService } from 'src/metadata/object-metadata/services/object-metadata.service';
import { FieldMetadataService } from 'src/metadata/field-metadata/services/field-metadata.service';
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
import { ObjectMetadataService } from 'src/metadata/object-metadata/object-metadata.service';
import { FieldMetadataService } from 'src/metadata/field-metadata/field-metadata.service';
import { CreateRelationInput } from 'src/metadata/relation-metadata/dtos/create-relation.input';
import { MigrationRunnerService } from 'src/metadata/migration-runner/migration-runner.service';
import { TenantMigrationRunnerService } from 'src/tenant-migration-runner/tenant-migration-runner.service';
import { TenantMigrationService } from 'src/metadata/tenant-migration/tenant-migration.service';
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
import { TenantMigrationColumnActionType } from 'src/metadata/tenant-migration/tenant-migration.entity';
import {
RelationMetadataEntity,
RelationMetadataType,
} from './relation-metadata.entity';
@Injectable()
export class RelationMetadataService extends TypeOrmQueryService<RelationMetadata> {
export class RelationMetadataService extends TypeOrmQueryService<RelationMetadataEntity> {
constructor(
@InjectRepository(RelationMetadata, 'metadata')
private readonly relationMetadataRepository: Repository<RelationMetadata>,
@InjectRepository(RelationMetadataEntity, 'metadata')
private readonly relationMetadataRepository: Repository<RelationMetadataEntity>,
private readonly objectMetadataService: ObjectMetadataService,
private readonly fieldMetadataService: FieldMetadataService,
private readonly tenantMigrationService: TenantMigrationService,
private readonly migrationRunnerService: MigrationRunnerService,
private readonly migrationRunnerService: TenantMigrationRunnerService,
) {
super(relationMetadataRepository);
}
override async createOne(
record: CreateRelationInput,
): Promise<RelationMetadata> {
): Promise<RelationMetadataEntity> {
if (record.relationType === RelationMetadataType.MANY_TO_MANY) {
throw new BadRequestException(
'Many to many relations are not supported yet',
@ -72,7 +73,7 @@ export class RelationMetadataService extends TypeOrmQueryService<RelationMetadat
targetColumnMap: {},
isActive: true,
type: FieldMetadataType.RELATION,
objectId: record.fromObjectMetadataId,
objectMetadataId: record.fromObjectMetadataId,
workspaceId: record.workspaceId,
},
// NOTE: Since we have to create the field-metadata for the user, we need to use the toObjectMetadata info.
@ -87,13 +88,13 @@ export class RelationMetadataService extends TypeOrmQueryService<RelationMetadat
targetColumnMap: {},
isActive: true,
type: FieldMetadataType.RELATION,
objectId: record.toObjectMetadataId,
objectMetadataId: record.toObjectMetadataId,
workspaceId: record.workspaceId,
},
]);
const createdFieldMap = createdFields.reduce((acc, curr) => {
acc[curr.objectId] = curr;
acc[curr.objectMetadataId] = curr;
return acc;
}, {});