diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index 59e3f08..a25cf35 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -42,6 +42,7 @@ import { SpaceLinkEntity } from '../modules/space/entities/space-link.entity'; import { SubspaceProductAllocationEntity } from '../modules/space/entities/subspace/subspace-product-allocation.entity'; import { SubspaceEntity } from '../modules/space/entities/subspace/subspace.entity'; import { TagEntity } from '../modules/space/entities/tag.entity'; +import { ClientEntity } from '../modules/client/entities'; @Module({ imports: [ TypeOrmModule.forRootAsync({ @@ -93,6 +94,7 @@ import { TagEntity } from '../modules/space/entities/tag.entity'; SubspaceModelProductAllocationEntity, SpaceProductAllocationEntity, SubspaceProductAllocationEntity, + ClientEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/client/dtos/client.dto.ts b/libs/common/src/modules/client/dtos/client.dto.ts new file mode 100644 index 0000000..fd12bc9 --- /dev/null +++ b/libs/common/src/modules/client/dtos/client.dto.ts @@ -0,0 +1,20 @@ +import { IsArray, IsNotEmpty, IsString } from 'class-validator'; + +export class ClientDto { + @IsString() + @IsNotEmpty() + public uuid: string; + + @IsString() + @IsNotEmpty() + public clientId: string; + @IsString() + @IsNotEmpty() + public clientSecret: string; + @IsString() + @IsNotEmpty() + public redirectUri: string; + @IsArray() + @IsNotEmpty() + public scopes: string[]; +} diff --git a/libs/common/src/modules/client/dtos/index.ts b/libs/common/src/modules/client/dtos/index.ts new file mode 100644 index 0000000..f347f86 --- /dev/null +++ b/libs/common/src/modules/client/dtos/index.ts @@ -0,0 +1 @@ +export * from './client.dto'; diff --git a/libs/common/src/modules/client/entities/client.entity.ts b/libs/common/src/modules/client/entities/client.entity.ts new file mode 100644 index 0000000..81c7a9b --- /dev/null +++ b/libs/common/src/modules/client/entities/client.entity.ts @@ -0,0 +1,42 @@ +import { Entity, Column, Unique } from 'typeorm'; +import { AbstractEntity } from '../../abstract/entities/abstract.entity'; +import { ClientDto } from '../dtos'; + +@Entity({ name: 'clients' }) +@Unique(['clientId']) +export class ClientEntity extends AbstractEntity { + @Column({ + type: 'uuid', + default: () => 'gen_random_uuid()', + nullable: false, + }) + public uuid: string; + + @Column({ + length: 255, + nullable: false, + }) + name: string; + + @Column({ + length: 255, + nullable: false, + unique: true, + }) + clientId: string; + + @Column({ + length: 255, + nullable: false, + }) + clientSecret: string; + + @Column({ + length: 255, + nullable: false, + }) + redirectUri: string; + + @Column('simple-array') + scopes: string[]; +} diff --git a/libs/common/src/modules/client/entities/index.ts b/libs/common/src/modules/client/entities/index.ts new file mode 100644 index 0000000..0f193b5 --- /dev/null +++ b/libs/common/src/modules/client/entities/index.ts @@ -0,0 +1 @@ +export * from './client.entity'; diff --git a/libs/common/src/modules/client/repositories/client.repository.ts b/libs/common/src/modules/client/repositories/client.repository.ts new file mode 100644 index 0000000..3fbeead --- /dev/null +++ b/libs/common/src/modules/client/repositories/client.repository.ts @@ -0,0 +1,10 @@ +import { DataSource, Repository } from 'typeorm'; +import { Injectable } from '@nestjs/common'; +import { ClientEntity } from '../entities'; + +@Injectable() +export class ClientRepository extends Repository { + constructor(private dataSource: DataSource) { + super(ClientEntity, dataSource.createEntityManager()); + } +} diff --git a/libs/common/src/modules/client/repositories/index.ts b/libs/common/src/modules/client/repositories/index.ts new file mode 100644 index 0000000..9812228 --- /dev/null +++ b/libs/common/src/modules/client/repositories/index.ts @@ -0,0 +1 @@ +export * from './client.repository';