11import each from 'src/utils/each' ;
2- import { ArrayContains , DataSource , EntityManager , Repository } from 'typeorm' ;
2+ import { DataSource , EntityManager , IsNull , Repository } from 'typeorm' ;
33import { InjectRepository } from '@nestjs/typeorm' ;
44import { UpdateNamespaceDto } from './dto/update-namespace.dto' ;
55import {
@@ -8,9 +8,10 @@ import {
88 NotFoundException ,
99} from '@nestjs/common' ;
1010import { Resource } from 'src/resources/resources.entity' ;
11- import { Namespace } from './entities/namespace.entity' ;
11+ import { Namespace , SpaceType } from './entities/namespace.entity' ;
1212import { NamespaceMember } from './entities/namespace-member.entity' ;
1313import { NamespaceMemberDto } from './dto/namespace-member.dto' ;
14+ import { ResourcesService } from 'src/resources/resources.service' ;
1415
1516@Injectable ( )
1617export class NamespacesService {
@@ -22,6 +23,8 @@ export class NamespacesService {
2223 private namespaceMemberRepository : Repository < NamespaceMember > ,
2324
2425 private readonly dataSource : DataSource ,
26+
27+ private readonly resourceService : ResourcesService ,
2528 ) { }
2629
2730 async getTeamspaceRoot ( namespaceId : string ) : Promise < Resource > {
@@ -55,9 +58,14 @@ export class NamespacesService {
5558 return namespace ;
5659 }
5760
58- async create ( ownerId : string , name : string ) : Promise < Namespace > {
61+ async createNamespaceAndMember (
62+ ownerId : string ,
63+ name : string ,
64+ ) : Promise < Namespace > {
5965 return await this . dataSource . transaction ( async ( manager ) => {
60- return await this . createAndInit ( ownerId , name , manager ) ;
66+ const namespace = await this . createNamespace ( name , manager ) ;
67+ await this . addMember ( namespace . id , ownerId , manager ) ;
68+ return namespace ;
6169 } ) ;
6270 }
6371
@@ -66,28 +74,22 @@ export class NamespacesService {
6674 name : string ,
6775 manager : EntityManager ,
6876 ) : Promise < Namespace > {
69- const namespace = await manager . save (
70- manager . create ( Namespace , {
71- name,
72- } ) ,
73- ) ;
74- const privateRoot = await manager . save (
75- manager . create ( Resource , {
76- resourceType : 'folder' ,
77- parent : null ,
78- namespace : { id : namespace . id } ,
79- user : { id : ownerId } ,
80- } ) ,
81- ) ;
82- const publicRoot = await manager . save (
83- manager . create ( Resource , {
84- resourceType : 'folder' ,
85- parent : null ,
86- namespace : { id : namespace . id } ,
87- user : { id : ownerId } ,
88- } ) ,
77+ const namespace = await this . createNamespace ( name , manager ) ;
78+ await this . addMember ( namespace . id , ownerId , manager ) ;
79+ return namespace ;
80+ }
81+
82+ async createNamespace (
83+ name : string ,
84+ manager : EntityManager ,
85+ ) : Promise < Namespace > {
86+ const namespace = await manager . save ( manager . create ( Namespace , { name } ) ) ;
87+ const publicRoot = await this . resourceService . createFolder (
88+ namespace . id ,
89+ null ,
90+ null ,
91+ manager ,
8992 ) ;
90- await this . addMember ( namespace . id , ownerId , privateRoot . id , manager ) ;
9193 await manager . update ( Namespace , namespace . id , {
9294 rootResource : { id : publicRoot . id } ,
9395 } ) ;
@@ -116,20 +118,28 @@ export class NamespacesService {
116118 await this . namespaceRepository . softDelete ( id ) ;
117119 }
118120
119- async addMember (
120- namespaceId : string ,
121- userId : string ,
122- privateRootId : string ,
123- manager ?: EntityManager ,
124- ) {
125- const repo = manager
126- ? manager . getRepository ( NamespaceMember )
127- : this . namespaceMemberRepository ;
128- await repo . save (
129- repo . create ( {
121+ async addMember ( namespaceId : string , userId : string , manager : EntityManager ) {
122+ const count = await manager . count ( NamespaceMember , {
123+ where : {
124+ namespace : { id : namespaceId } ,
125+ user : { id : userId } ,
126+ deletedAt : IsNull ( ) ,
127+ } ,
128+ } ) ;
129+ if ( count > 0 ) {
130+ return ;
131+ }
132+ const privateRoot = await this . resourceService . createFolder (
133+ namespaceId ,
134+ null ,
135+ userId ,
136+ manager ,
137+ ) ;
138+ await manager . save (
139+ manager . create ( NamespaceMember , {
130140 namespace : { id : namespaceId } ,
131141 user : { id : userId } ,
132- rootResource : { id : privateRootId } ,
142+ rootResource : { id : privateRoot . id } ,
133143 } ) ,
134144 ) ;
135145 }
@@ -167,4 +177,19 @@ export class NamespacesService {
167177 return { email : member . user . email , role : member . role } ;
168178 } ) ;
169179 }
180+
181+ async getRoot ( namespace : string , spaceType : SpaceType , userId : string ) {
182+ let resource : Resource | null ;
183+ if ( spaceType === SpaceType . TEAMSPACE ) {
184+ resource = await this . getTeamspaceRoot ( namespace ) ;
185+ } else {
186+ resource = await this . getPrivateRoot ( userId , namespace ) ;
187+ }
188+ const children = await this . resourceService . query ( {
189+ namespaceId : namespace ,
190+ spaceType,
191+ parentId : resource . id ,
192+ } ) ;
193+ return { ...resource , parentId : '0' , spaceType, children } ;
194+ }
170195}
0 commit comments