@@ -188,22 +188,19 @@ export class NamespacesService {
188188 await this . namespaceRepository . softDelete ( id ) ;
189189 }
190190
191- async addMember (
192- namespaceId : string ,
191+ async createOrRestorePrivateRoot (
193192 userId : string ,
194- role : NamespaceRole ,
195- permission : ResourcePermission ,
193+ namespaceId : string ,
194+ namespaceMember : NamespaceMember | null ,
196195 entityManager : EntityManager ,
197- ) {
198- const count = await entityManager . count ( NamespaceMember , {
199- where : {
196+ ) : Promise < string > {
197+ if ( namespaceMember ) {
198+ await this . resourcesService . restoreResource (
200199 namespaceId ,
201- userId,
202- deletedAt : IsNull ( ) ,
203- } ,
204- } ) ;
205- if ( count > 0 ) {
206- return ;
200+ namespaceMember . rootResourceId ,
201+ entityManager ,
202+ ) ;
203+ return namespaceMember . rootResourceId ;
207204 }
208205 const privateRoot = await this . resourcesService . createResource (
209206 {
@@ -214,12 +211,45 @@ export class NamespacesService {
214211 } ,
215212 entityManager ,
216213 ) ;
214+ await this . resourcesService . createResource (
215+ {
216+ namespaceId,
217+ parentId : privateRoot . id ,
218+ userId,
219+ resourceType : ResourceType . FOLDER ,
220+ name : await this . getUncategorizedName ( userId , entityManager ) ,
221+ } ,
222+ entityManager ,
223+ ) ;
224+ return privateRoot . id ;
225+ }
226+
227+ async addMember (
228+ namespaceId : string ,
229+ userId : string ,
230+ role : NamespaceRole ,
231+ permission : ResourcePermission ,
232+ entityManager : EntityManager ,
233+ ) {
234+ const namespaceMember = await entityManager . findOne ( NamespaceMember , {
235+ where : { namespaceId, userId } ,
236+ withDeleted : true ,
237+ } ) ;
238+ if ( namespaceMember && ! namespaceMember . deletedAt ) {
239+ return ;
240+ }
241+ const privateRootId = await this . createOrRestorePrivateRoot (
242+ userId ,
243+ namespaceId ,
244+ namespaceMember ,
245+ entityManager ,
246+ ) ;
217247 await entityManager . save (
218248 entityManager . create ( NamespaceMember , {
219249 namespaceId,
220250 userId,
221251 role,
222- rootResourceId : privateRoot . id ,
252+ rootResourceId : privateRootId ,
223253 } ) ,
224254 ) ;
225255 const teamspaceRoot = await this . getTeamspaceRoot (
@@ -235,21 +265,11 @@ export class NamespacesService {
235265 ) ;
236266 await this . permissionsService . updateUserPermission (
237267 namespaceId ,
238- privateRoot . id ,
268+ privateRootId ,
239269 userId ,
240270 ResourcePermission . FULL_ACCESS ,
241271 entityManager ,
242272 ) ;
243- await this . resourcesService . createResource (
244- {
245- namespaceId,
246- parentId : privateRoot . id ,
247- userId,
248- resourceType : ResourceType . FOLDER ,
249- name : await this . getUncategorizedName ( userId , entityManager ) ,
250- } ,
251- entityManager ,
252- ) ;
253273 }
254274
255275 private async getUncategorizedName (
@@ -347,10 +367,11 @@ export class NamespacesService {
347367 return ;
348368 }
349369 // Delete private root
350- await manager . softDelete ( Resource , {
370+ await this . resourcesService . deleteResource (
351371 namespaceId ,
352- id : member . rootResourceId ,
353- } ) ;
372+ member . rootResourceId ,
373+ manager ,
374+ ) ;
354375 // Clear user permissions
355376 await manager . softDelete ( UserPermission , {
356377 namespaceId,
0 commit comments