Proper update project endpoint

This commit is contained in:
Daniel Hougaard
2024-02-22 05:00:26 +01:00
parent 9c11226b71
commit 0b7efa57be
2 changed files with 31 additions and 5 deletions
@@ -26,9 +26,15 @@ import { TSecretBlindIndexDALFactory } from "../secret-blind-index/secret-blind-
import { ROOT_FOLDER_NAME, TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; import { ROOT_FOLDER_NAME, TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal";
import { TUserDALFactory } from "../user/user-dal"; import { TUserDALFactory } from "../user/user-dal";
import { TProjectDALFactory } from "./project-dal"; import { TProjectDALFactory } from "./project-dal";
import { createProjectKey, createWsMembers } from "./project-fns"; import { assignWorkspaceKeysToMembers, createProjectKey } from "./project-fns";
import { TProjectQueueFactory } from "./project-queue"; import { TProjectQueueFactory } from "./project-queue";
import { TCreateProjectDTO, TDeleteProjectDTO, TGetProjectDTO, TUpgradeProjectDTO } from "./project-types"; import {
TCreateProjectDTO,
TDeleteProjectDTO,
TGetProjectDTO,
TUpdateProjectDTO,
TUpgradeProjectDTO
} from "./project-types";
export const DEFAULT_PROJECT_ENVS = [ export const DEFAULT_PROJECT_ENVS = [
{ name: "Development", slug: "dev" }, { name: "Development", slug: "dev" },
@@ -74,7 +80,7 @@ export const projectServiceFactory = ({
/* /*
* Create workspace. Make user the admin * Create workspace. Make user the admin
* */ * */
const createProject = async ({ orgId, actor, actorId, actorOrgId, workspaceName }: TCreateProjectDTO) => { const createProject = async ({ orgId, actor, actorId, actorOrgId, workspaceName, slug }: TCreateProjectDTO) => {
const { permission, membership: orgMembership } = await permissionService.getOrgPermission( const { permission, membership: orgMembership } = await permissionService.getOrgPermission(
actor, actor,
actorId, actorId,
@@ -102,7 +108,7 @@ export const projectServiceFactory = ({
{ {
name: workspaceName, name: workspaceName,
orgId, orgId,
slug: slugify(`${workspaceName}-${alphaNumericNanoId(4)}`), slug: slug || slugify(`${workspaceName}-${alphaNumericNanoId(4)}`),
version: ProjectVersion.V2 version: ProjectVersion.V2
}, },
tx tx
@@ -194,7 +200,7 @@ export const projectServiceFactory = ({
throw new Error("User not found"); throw new Error("User not found");
} }
const [projectAdmin] = createWsMembers({ const [projectAdmin] = assignWorkspaceKeysToMembers({
decryptKey: latestKey, decryptKey: latestKey,
userPrivateKey: ghostUser.keys.plainPrivateKey, userPrivateKey: ghostUser.keys.plainPrivateKey,
members: [ members: [
@@ -305,6 +311,17 @@ export const projectServiceFactory = ({
return projectDAL.findProjectById(projectId); return projectDAL.findProjectById(projectId);
}; };
const updateProject = async ({ projectId, actor, actorId, actorOrgId, update }: TUpdateProjectDTO) => {
const { permission } = await permissionService.getProjectPermission(actor, actorId, projectId, actorOrgId);
ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Settings);
const updatedProject = await projectDAL.updateById(projectId, {
name: update.name,
autoCapitalization: update.autoCapitalization
});
return updatedProject;
};
const toggleAutoCapitalization = async ({ const toggleAutoCapitalization = async ({
projectId, projectId,
actor, actor,
@@ -371,6 +388,7 @@ export const projectServiceFactory = ({
createProject, createProject,
deleteProject, deleteProject,
getProjects, getProjects,
updateProject,
findProjectGhostUser, findProjectGhostUser,
getProjectUpgradeStatus, getProjectUpgradeStatus,
getAProject, getAProject,
@@ -9,6 +9,7 @@ export type TCreateProjectDTO = {
actorOrgId?: string; actorOrgId?: string;
orgId: string; orgId: string;
workspaceName: string; workspaceName: string;
slug?: string;
}; };
export type TDeleteProjectDTO = { export type TDeleteProjectDTO = {
@@ -25,6 +26,13 @@ export type TGetProjectDTO = {
projectId: string; projectId: string;
}; };
export type TUpdateProjectDTO = {
update: {
name?: string;
autoCapitalization?: boolean;
};
} & TProjectPermission;
export type TUpgradeProjectDTO = { export type TUpgradeProjectDTO = {
userPrivateKey: string; userPrivateKey: string;
} & TProjectPermission; } & TProjectPermission;