diff --git a/src/constants/index.ts b/src/constants/index.ts index 2239fb213..309519841 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -24,6 +24,7 @@ export const constants = { 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.", NO_PROJECT: "resource not found with the given ID(s).", MIGRATION_CREATED: "Project's migration created successfully.", MIGRATION_UPDATED: "Project's migration updated successfully.", diff --git a/src/models/project.ts b/src/models/project.ts index 4cc0045a4..fc621b844 100644 --- a/src/models/project.ts +++ b/src/models/project.ts @@ -39,6 +39,8 @@ interface ProjectDocument extends Document { status: boolean; migration: Migration; execution_log: ExecutionLog; + 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 292aefcf4..b09a90ded 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 { NotFoundError } from "../utils/custom-errors.utils"; +import { constants } from "../constants"; const getAllProjects = async (req: Request) => { const orgId = req?.params?.orgId; @@ -8,23 +11,93 @@ 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, + }); - //Add logic to get Project from DB - return { orgId, projectId }; + if (!project) throw new NotFoundError(constants.HTTP_TEXTS.PROJECT_NOT_FOUND); + + return { + name: project?.name, + description: project?.description, + id: project?.id, + status: project?.status, + created_at: project?.created_at, + modified_at: project?.updated_at, + }; }; const createProject = async (req: Request) => { const orgId = req?.params?.orgId; - + const { name, description } = req.body; + const decodedToken = req.body.token_payload; + const { user_id = "test-123", region = "NA" } = decodedToken; + const projectData = { + region, + org_id: orgId, + owner: user_id, + created_by: user_id, + name, + description, + }; //Add logic to create Project from DB - return { orgId }; + const project = await ProjectModel.create(projectData); + + if (!project) throw new NotFoundError(constants.HTTP_TEXTS.PROJECT_NOT_FOUND); + return { + status: "success", + message: "Project created successfully", + project: { + name: project.name, + id: project.id, + status: project.status, + created_at: project.created_at, + modified_at: project.updated_at, + // Add other properties as needed + }, + }; }; 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, + region, + owner: user_id, + }); - //Add logic to update Project from DB - return { orgId, 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.created_at, + modified_at: updatedProject.updated_at, + // Add other properties as needed + }, + }; }; const deleteProject = async (req: Request) => {