feat: duplicate team and user collections (#4207)

* chore: created new mutation for team-collection duplication

* feat: completed duplication function in TeamCollection module

* feat: user-collection duplication complete

* chore: changed duplicated title suffix for collections

* chore: added return type to argument for duplication mutation in user-collections

* chore: capitalized duplicate in duplicate collection service4 methods

* chore: changed target of hopp-old-backend service to prod
This commit is contained in:
Balu Babu
2024-07-24 21:55:08 +05:30
committed by GitHub
parent df730e4d21
commit 9cde6c597b
4 changed files with 122 additions and 0 deletions

View File

@@ -331,6 +331,26 @@ export class TeamCollectionResolver {
return updatedTeamCollection.right;
}
@Mutation(() => Boolean, {
description: 'Duplicate a Team Collection',
})
@UseGuards(GqlAuthGuard, GqlCollectionTeamMemberGuard)
@RequiresTeamRole(TeamMemberRole.OWNER, TeamMemberRole.EDITOR)
async duplicateTeamCollection(
@Args({
name: 'collectionID',
description: 'ID of the collection',
})
collectionID: string,
) {
const duplicatedTeamCollection =
await this.teamCollectionService.duplicateTeamCollection(collectionID);
if (E.isLeft(duplicatedTeamCollection))
throwErr(duplicatedTeamCollection.left);
return duplicatedTeamCollection.right;
}
// Subscriptions
@Subscription(() => TeamCollection, {

View File

@@ -1446,4 +1446,35 @@ export class TeamCollectionService {
return E.left(TEAM_COLL_NOT_FOUND);
}
}
/**
* Duplicate a Team Collection
*
* @param collectionID The Collection ID
* @returns Boolean of duplication status
*/
async duplicateTeamCollection(collectionID: string) {
const collection = await this.getCollection(collectionID);
if (E.isLeft(collection)) return E.left(TEAM_INVALID_COLL_ID);
const collectionJSONObject = await this.exportCollectionToJSONObject(
collection.right.teamID,
collectionID,
);
if (E.isLeft(collectionJSONObject)) return E.left(TEAM_INVALID_COLL_ID);
const result = await this.importCollectionsFromJSON(
JSON.stringify([
{
...collectionJSONObject.right,
name: `${collection.right.title} - Duplicate`,
},
]),
collection.right.teamID,
collection.right.parentID,
);
if (E.isLeft(result)) return E.left(result.left as string);
return E.right(true);
}
}