From 02a8ca8f93f3f6360402f6520d0f7110a7696c6e Mon Sep 17 00:00:00 2001 From: himanshu-contentstack Date: Mon, 22 Jan 2024 17:00:02 +0530 Subject: [PATCH 1/3] feat: Project APIs --- src/models/project.ts | 2 + src/services/projects.service.ts | 74 +++++++++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/models/project.ts b/src/models/project.ts index 60738430e..ba39ee947 100644 --- a/src/models/project.ts +++ b/src/models/project.ts @@ -37,6 +37,8 @@ interface ProjectDocument extends Document { status: boolean; migration: Migration; execution_log: ExecutionLog; + createdAt: Date; + updatedAt: Date; } const projectSchema = new Schema( diff --git a/src/services/projects.service.ts b/src/services/projects.service.ts index 292aefcf4..2c16b1282 100644 --- a/src/services/projects.service.ts +++ b/src/services/projects.service.ts @@ -1,4 +1,7 @@ import { Request } from "express"; +import ProjectModel from "../models/project"; +import logger from "../utils/logger"; +import { NotFoundError } from "../utils/custom-errors.utils"; const getAllProjects = async (req: Request) => { const orgId = req?.params?.orgId; @@ -9,22 +12,81 @@ const getProject = async (req: Request) => { const orgId = req?.params?.orgId; const projectId = req?.params?.projectId; - //Add logic to get Project from DB - return { orgId, projectId }; + // Find the project based on both orgId and projectId + const project = await ProjectModel.findOne({ org_id: orgId, _id: projectId }); + + if (!project) throw new NotFoundError("Project not found!"); + + return { + name: project?.name, + description: project?.description, + id: project?.id, + status: project?.status, + created_at: project?.createdAt, + modified_at: project?.updatedAt, + }; }; const createProject = async (req: Request) => { const orgId = req?.params?.orgId; - + const { name, description } = req.body; + logger.info(orgId); + // const decodedToken = (req as any).decodedToken; + // const { user_id = "1", region = "NA" } = decodedToken; + const projectData = { + region: "US", + org_id: orgId, + owner: "2", + created_by: "2", + name, + description, + }; //Add logic to create Project from DB - return { orgId }; + const project = await ProjectModel.create(projectData); + + //Add some logic to throw error + return { + status: "success", + message: "Project created successfully", + project: { + name: project.name, + id: project.id, + status: project.status, + created_at: project.createdAt, + modified_at: project.updatedAt, + // Add other properties as needed + }, + }; }; const updateProject = async (req: Request) => { const orgId = req?.params?.orgId; const projectId = req?.params?.projectId; + const updateData = req?.body; - //Add logic to update Project from DB - return { orgId, projectId }; + // Find the project based on both orgId and projectId + const project = await ProjectModel.findOne({ org_id: orgId, _id: projectId }); + + if (!project) throw new NotFoundError("Project not found!"); + + // Update the project fields + project.name = updateData.name || project.name; + project.description = updateData.description || project.description; + + // Save the updated project + const updatedProject = await project.save(); + + return { + status: "success", + message: "Project updated successfully", + project: { + name: updatedProject.name, + id: updatedProject.id, + status: updatedProject.status, + created_at: updatedProject.createdAt, + modified_at: updatedProject.updatedAt, + // Add other properties as needed + }, + }; }; const deleteProject = async (req: Request) => { From 62041bff3a61b4e2cb5b70cb7b02a6a6c36c7e0f Mon Sep 17 00:00:00 2001 From: himanshu-contentstack Date: Sun, 28 Jan 2024 20:35:37 +0530 Subject: [PATCH 2/3] refactor: project apis --- src/constants/index.ts | 2 ++ src/services/projects.service.ts | 39 ++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/constants/index.ts b/src/constants/index.ts index 3eabc5098..fd2eb4052 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -37,6 +37,7 @@ export type HttpErrorTexts = { TOKEN_ERROR: string; LOGIN_ERROR: string; ROUTE_ERROR: string; + PROJECT_NOT_FOUND: string; }; export type HttpResponseHeaders = { @@ -70,6 +71,7 @@ export const constants: ConstantType = { TOKEN_ERROR: "Error occurred during token generation.", LOGIN_ERROR: "Error occurred during login", ROUTE_ERROR: "Sorry, the requested resource is not available.", + PROJECT_NOT_FOUND: "Sorry, the requested project does not exists.", }, HTTP_RESPONSE_HEADERS: { "Access-Control-Allow-Origin": "*", diff --git a/src/services/projects.service.ts b/src/services/projects.service.ts index 2c16b1282..90f68abb9 100644 --- a/src/services/projects.service.ts +++ b/src/services/projects.service.ts @@ -1,7 +1,7 @@ import { Request } from "express"; import ProjectModel from "../models/project"; -import logger from "../utils/logger"; import { NotFoundError } from "../utils/custom-errors.utils"; +import { constants } from "../constants"; const getAllProjects = async (req: Request) => { const orgId = req?.params?.orgId; @@ -11,11 +11,17 @@ const getAllProjects = async (req: Request) => { const getProject = async (req: Request) => { const orgId = req?.params?.orgId; const projectId = req?.params?.projectId; + const decodedToken = req.body.token_payload; + const { user_id = "test-123", region = "NA" } = decodedToken; + // Find the project based on both orgId and projectId, region, owner + const project = await ProjectModel.findOne({ + org_id: orgId, + _id: projectId, + region, + owner: user_id, + }); - // Find the project based on both orgId and projectId - const project = await ProjectModel.findOne({ org_id: orgId, _id: projectId }); - - if (!project) throw new NotFoundError("Project not found!"); + if (!project) throw new NotFoundError(constants.HTTP_TEXTS.PROJECT_NOT_FOUND); return { name: project?.name, @@ -29,21 +35,20 @@ const getProject = async (req: Request) => { const createProject = async (req: Request) => { const orgId = req?.params?.orgId; const { name, description } = req.body; - logger.info(orgId); - // const decodedToken = (req as any).decodedToken; - // const { user_id = "1", region = "NA" } = decodedToken; + const decodedToken = req.body.token_payload; + const { user_id = "test-123", region = "NA" } = decodedToken; const projectData = { - region: "US", + region, org_id: orgId, - owner: "2", - created_by: "2", + owner: user_id, + created_by: user_id, name, description, }; //Add logic to create Project from DB const project = await ProjectModel.create(projectData); - //Add some logic to throw error + if (!project) throw new NotFoundError(constants.HTTP_TEXTS.PROJECT_NOT_FOUND); return { status: "success", message: "Project created successfully", @@ -62,9 +67,15 @@ const updateProject = async (req: Request) => { const orgId = req?.params?.orgId; const projectId = req?.params?.projectId; const updateData = req?.body; - + const decodedToken = req.body.token_payload; + const { user_id = "test-123", region = "NA" } = decodedToken; // Find the project based on both orgId and projectId - const project = await ProjectModel.findOne({ org_id: orgId, _id: projectId }); + const project = await ProjectModel.findOne({ + org_id: orgId, + _id: projectId, + region, + owner: user_id, + }); if (!project) throw new NotFoundError("Project not found!"); From 4ae18667500caaae65a57bbd2b32b6578d150ff0 Mon Sep 17 00:00:00 2001 From: himanshu-contentstack Date: Sun, 28 Jan 2024 20:43:12 +0530 Subject: [PATCH 3/3] fix: spell correction --- src/models/project.ts | 4 ++-- src/services/projects.service.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/models/project.ts b/src/models/project.ts index ba39ee947..56ca1842e 100644 --- a/src/models/project.ts +++ b/src/models/project.ts @@ -37,8 +37,8 @@ interface ProjectDocument extends Document { status: boolean; migration: Migration; execution_log: ExecutionLog; - createdAt: Date; - updatedAt: Date; + created_at: Date; + updated_at: Date; } const projectSchema = new Schema( diff --git a/src/services/projects.service.ts b/src/services/projects.service.ts index 90f68abb9..b09a90ded 100644 --- a/src/services/projects.service.ts +++ b/src/services/projects.service.ts @@ -28,8 +28,8 @@ const getProject = async (req: Request) => { description: project?.description, id: project?.id, status: project?.status, - created_at: project?.createdAt, - modified_at: project?.updatedAt, + created_at: project?.created_at, + modified_at: project?.updated_at, }; }; const createProject = async (req: Request) => { @@ -56,8 +56,8 @@ const createProject = async (req: Request) => { name: project.name, id: project.id, status: project.status, - created_at: project.createdAt, - modified_at: project.updatedAt, + created_at: project.created_at, + modified_at: project.updated_at, // Add other properties as needed }, }; @@ -93,8 +93,8 @@ const updateProject = async (req: Request) => { name: updatedProject.name, id: updatedProject.id, status: updatedProject.status, - created_at: updatedProject.createdAt, - modified_at: updatedProject.updatedAt, + created_at: updatedProject.created_at, + modified_at: updatedProject.updated_at, // Add other properties as needed }, };