From a9bba02f442e66b11b08bdfbd451d2ce3ca0c00f Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 23 Feb 2024 01:34:15 +0100 Subject: [PATCH] Draft --- .../src/services/project/project-service.ts | 25 +++++++++++++++++++ backend/src/services/project/project-types.ts | 14 +++++++++++ 2 files changed, 39 insertions(+) diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index c19856eb9..ca27c883c 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -33,7 +33,9 @@ import { assignWorkspaceKeysToMembers, createProjectKey } from "./project-fns"; import { TProjectQueueFactory } from "./project-queue"; import { TCreateProjectDTO, + TDeleteProjectBySlugDTO, TDeleteProjectDTO, + TGetProjectBySlugDTO, TGetProjectDTO, TToggleProjectAutoCapitalizationDTO, TUpdateProjectDTO, @@ -358,6 +360,27 @@ export const projectServiceFactory = ({ return deletedProject; }; + const deleteProjectBySlug = async ({ actor, actorId, actorOrgId, slug }: TDeleteProjectBySlugDTO) => { + const project = await projectDAL.findOne({ slug }); + + const { permission } = await permissionService.getProjectPermission(actor, actorId, project.id, actorOrgId); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Delete, ProjectPermissionSub.Project); + + const deletedProject = await projectDAL.transaction(async (tx) => { + const delProject = await projectDAL.deleteById(project.id, tx); + const projectGhostUser = await projectMembershipDAL.findProjectGhostUser(project.id).catch(() => null); + + // Delete the org membership for the ghost user if it's found. + if (projectGhostUser) { + await userDAL.deleteById(projectGhostUser.id, tx); + } + + return delProject; + }); + + return deletedProject; + }; + const getProjects = async (actorId: string) => { const workspaces = await projectDAL.findAllProjects(actorId); return workspaces; @@ -450,8 +473,10 @@ export const projectServiceFactory = ({ deleteProject, getProjects, updateProject, + deleteProjectBySlug, getProjectUpgradeStatus, getAProject, + getProjectBySlug, toggleAutoCapitalization, updateName, upgradeProject diff --git a/backend/src/services/project/project-types.ts b/backend/src/services/project/project-types.ts index 56237b428..258018176 100644 --- a/backend/src/services/project/project-types.ts +++ b/backend/src/services/project/project-types.ts @@ -36,6 +36,13 @@ export type TDeleteProjectBySlugDTO = { actorOrgId?: string; }; +export type TDeleteProjectBySlugDTO = { + slug: string; + actor: ActorType; + actorId: string; + actorOrgId?: string; +}; + export type TGetProjectDTO = { filter: Filter; } & Omit; @@ -47,6 +54,13 @@ export type TUpdateProjectNameDTO = { name: string; } & TProjectPermission; +export type TGetProjectBySlugDTO = { + slug: string; + actor: ActorType; + actorId: string; + actorOrgId?: string; +}; + export type TUpdateProjectDTO = { filter: Filter; update: {