feat: new get-by-id for folder for tf

This commit is contained in:
=
2024-07-12 14:24:13 +05:30
parent ebbccdb857
commit 3c63346d3a
5 changed files with 57 additions and 3 deletions
+3
View File
@@ -313,6 +313,9 @@ export const FOLDERS = {
path: "The path to list folders from.", path: "The path to list folders from.",
directory: "The directory to list folders from. (Deprecated in favor of path)" directory: "The directory to list folders from. (Deprecated in favor of path)"
}, },
GET_BY_ID: {
folderId: "The id of the folder to get details."
},
CREATE: { CREATE: {
workspaceId: "The ID of the project to create the folder in.", workspaceId: "The ID of the project to create the folder in.",
environment: "The slug of the environment to create the folder in.", environment: "The slug of the environment to create the folder in.",
@@ -292,4 +292,39 @@ export const registerSecretFolderRouter = async (server: FastifyZodProvider) =>
return { folders }; return { folders };
} }
}); });
server.route({
method: "GET",
url: "/:id",
config: {
rateLimit: readLimit
},
schema: {
description: "Get folder by id",
security: [
{
bearerAuth: []
}
],
params: z.object({
id: z.string().trim().describe(FOLDERS.GET_BY_ID.folderId)
}),
response: {
200: z.object({
folder: SecretFoldersSchema
})
}
},
onRequest: verifyAuth([AuthMode.JWT, AuthMode.API_KEY, AuthMode.SERVICE_TOKEN, AuthMode.IDENTITY_ACCESS_TOKEN]),
handler: async (req) => {
const folder = await server.services.folder.getFolderById({
actorId: req.permission.id,
actor: req.permission.type,
actorAuthMethod: req.permission.authMethod,
actorOrgId: req.permission.orgId,
id: req.params.id
});
return { folder };
}
});
}; };
@@ -322,7 +322,7 @@ export const secretFolderDALFactory = (db: TDbClient) => {
.first(); .first();
if (folder) { if (folder) {
const { envId, envName, envSlug, ...el } = folder; const { envId, envName, envSlug, ...el } = folder;
return { ...el, environment: { envId, envName, envSlug } }; return { ...el, environment: { envId, envName, envSlug }, envId };
} }
} catch (error) { } catch (error) {
throw new DatabaseError({ error, name: "Find by id" }); throw new DatabaseError({ error, name: "Find by id" });
@@ -6,7 +6,7 @@ import { TSecretFoldersInsert } from "@app/db/schemas";
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service";
import { BadRequestError } from "@app/lib/errors"; import { BadRequestError, NotFoundError } from "@app/lib/errors";
import { TProjectDALFactory } from "../project/project-dal"; import { TProjectDALFactory } from "../project/project-dal";
import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal";
@@ -14,6 +14,7 @@ import { TSecretFolderDALFactory } from "./secret-folder-dal";
import { import {
TCreateFolderDTO, TCreateFolderDTO,
TDeleteFolderDTO, TDeleteFolderDTO,
TGetFolderByIdDTO,
TGetFolderDTO, TGetFolderDTO,
TUpdateFolderDTO, TUpdateFolderDTO,
TUpdateManyFoldersDTO TUpdateManyFoldersDTO
@@ -368,11 +369,22 @@ export const secretFolderServiceFactory = ({
return folders; return folders;
}; };
const getFolderById = async ({ actor, actorId, actorOrgId, actorAuthMethod, id }: TGetFolderByIdDTO) => {
const folder = await folderDAL.findById(id);
if (!folder) throw new NotFoundError({ message: "folder not found" });
// folder list is allowed to be read by anyone
// permission to check does user has access
await permissionService.getProjectPermission(actor, actorId, folder.projectId, actorAuthMethod, actorOrgId);
return folder;
};
return { return {
createFolder, createFolder,
updateFolder, updateFolder,
updateManyFolders, updateManyFolders,
deleteFolder, deleteFolder,
getFolders getFolders,
getFolderById
}; };
}; };
@@ -37,3 +37,7 @@ export type TGetFolderDTO = {
environment: string; environment: string;
path: string; path: string;
} & TProjectPermission; } & TProjectPermission;
export type TGetFolderByIdDTO = {
id: string;
} & Omit<TProjectPermission, "projectId">;