diff --git a/libs/common/src/database/database.module.ts b/libs/common/src/database/database.module.ts index 472772b..cd83fa0 100644 --- a/libs/common/src/database/database.module.ts +++ b/libs/common/src/database/database.module.ts @@ -36,6 +36,7 @@ import { InviteUserEntity, InviteUserSpaceEntity, } from '../modules/Invite-user/entities'; +import { InviteSpaceEntity } from '../modules/space/entities/invite-space.entity'; @Module({ imports: [ TypeOrmModule.forRootAsync({ @@ -80,6 +81,7 @@ import { TagModel, InviteUserEntity, InviteUserSpaceEntity, + InviteSpaceEntity, ], namingStrategy: new SnakeNamingStrategy(), synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))), diff --git a/libs/common/src/modules/space/entities/invite-space.entity.ts b/libs/common/src/modules/space/entities/invite-space.entity.ts new file mode 100644 index 0000000..38e24a2 --- /dev/null +++ b/libs/common/src/modules/space/entities/invite-space.entity.ts @@ -0,0 +1,39 @@ +import { Column, Entity, ManyToOne, Unique } from 'typeorm'; +import { UserSpaceDto } from '../../user/dtos'; +import { AbstractEntity } from '../../abstract/entities/abstract.entity'; +import { UserEntity } from '../../user/entities'; +import { SpaceEntity } from './space.entity'; + +@Entity({ name: 'invite-space' }) +@Unique(['invitationCode']) +export class InviteSpaceEntity extends AbstractEntity { + @Column({ + type: 'uuid', + default: () => 'gen_random_uuid()', // Use gen_random_uuid() for default value + nullable: false, + }) + public uuid: string; + + @ManyToOne(() => UserEntity, (user) => user.userSpaces, { nullable: true }) + user: UserEntity; + + @ManyToOne(() => SpaceEntity, (space) => space.userSpaces, { + nullable: false, + }) + space: SpaceEntity; + + @Column({ + nullable: true, + }) + public invitationCode: string; + + @Column({ + nullable: false, + default: true, + }) + public isActive: boolean; + constructor(partial: Partial) { + super(); + Object.assign(this, partial); + } +} diff --git a/libs/common/src/modules/space/entities/space.entity.ts b/libs/common/src/modules/space/entities/space.entity.ts index 8ecbc70..a0b908d 100644 --- a/libs/common/src/modules/space/entities/space.entity.ts +++ b/libs/common/src/modules/space/entities/space.entity.ts @@ -1,11 +1,4 @@ -import { - Column, - Entity, - JoinColumn, - ManyToOne, - OneToMany, - Unique, -} from 'typeorm'; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; import { SpaceDto } from '../dtos'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { UserSpaceEntity } from '../../user/entities'; @@ -19,7 +12,6 @@ import { InviteUserSpaceEntity } from '../../Invite-user/entities'; import { TagEntity } from './tag.entity'; @Entity({ name: 'space' }) -@Unique(['invitationCode']) export class SpaceEntity extends AbstractEntity { @Column({ type: 'uuid', @@ -44,10 +36,6 @@ export class SpaceEntity extends AbstractEntity { @JoinColumn({ name: 'community_id' }) community: CommunityEntity; - @Column({ - nullable: true, - }) - public invitationCode: string; @ManyToOne(() => SpaceEntity, (space) => space.children, { nullable: true }) parent: SpaceEntity; diff --git a/libs/common/src/modules/space/repositories/space.repository.ts b/libs/common/src/modules/space/repositories/space.repository.ts index b2aacc0..9bc2fee 100644 --- a/libs/common/src/modules/space/repositories/space.repository.ts +++ b/libs/common/src/modules/space/repositories/space.repository.ts @@ -1,6 +1,7 @@ import { DataSource, Repository } from 'typeorm'; import { Injectable } from '@nestjs/common'; import { SpaceEntity, SpaceLinkEntity, TagEntity } from '../entities'; +import { InviteSpaceEntity } from '../entities/invite-space.entity'; @Injectable() export class SpaceRepository extends Repository { @@ -22,3 +23,10 @@ export class TagRepository extends Repository { super(TagEntity, dataSource.createEntityManager()); } } + +@Injectable() +export class InviteSpaceRepository extends Repository { + constructor(private dataSource: DataSource) { + super(InviteSpaceEntity, dataSource.createEntityManager()); + } +} diff --git a/libs/common/src/modules/space/space.repository.module.ts b/libs/common/src/modules/space/space.repository.module.ts index 030c684..a475a9a 100644 --- a/libs/common/src/modules/space/space.repository.module.ts +++ b/libs/common/src/modules/space/space.repository.module.ts @@ -1,11 +1,19 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { SpaceEntity, SubspaceEntity, TagEntity } from './entities'; +import { InviteSpaceEntity } from './entities/invite-space.entity'; @Module({ providers: [], exports: [], controllers: [], - imports: [TypeOrmModule.forFeature([SpaceEntity, SubspaceEntity, TagEntity])], + imports: [ + TypeOrmModule.forFeature([ + SpaceEntity, + SubspaceEntity, + TagEntity, + InviteSpaceEntity, + ]), + ], }) export class SpaceRepositoryModule {} diff --git a/src/space-model/space-model.module.ts b/src/space-model/space-model.module.ts index 7f72860..c00a00d 100644 --- a/src/space-model/space-model.module.ts +++ b/src/space-model/space-model.module.ts @@ -20,6 +20,7 @@ import { } from './handlers'; import { CqrsModule } from '@nestjs/cqrs'; import { + InviteSpaceRepository, SpaceLinkRepository, SpaceRepository, TagRepository, @@ -70,6 +71,7 @@ const CommandHandlers = [ CommunityRepository, SpaceLinkService, SpaceLinkRepository, + InviteSpaceRepository, ], exports: [CqrsModule, SpaceModelService], }) diff --git a/src/space/space.module.ts b/src/space/space.module.ts index f9a2317..b92e342 100644 --- a/src/space/space.module.ts +++ b/src/space/space.module.ts @@ -22,6 +22,7 @@ import { SpaceRepository, SpaceLinkRepository, TagRepository, + InviteSpaceRepository, } from '@app/common/modules/space/repositories'; import { CommunityRepository } from '@app/common/modules/community/repositories'; import { @@ -114,6 +115,7 @@ export const CommandHandlers = [DisableSpaceHandler]; UserDevicePermissionService, DeviceUserPermissionRepository, PermissionTypeRepository, + InviteSpaceRepository, ...CommandHandlers, ], exports: [SpaceService],