Files
Dwinzo-Backend-V0.0/src/shared/services/project/project-Services.ts

126 lines
3.4 KiB
TypeScript
Raw Normal View History

2025-05-14 14:29:14 +05:30
import projectModel from "../../model/project/project-model.ts";
import userModel from "../../model/user-Model.ts";
import { Types } from "mongoose";
import versionModel from "../../model/version/versionModel.ts";
import {
existingProject,
existingUser,
archiveProject,
previousVersion,
} from "../helpers/ProjecthelperFn.ts";
2025-05-14 14:29:14 +05:30
interface CreateProjectInput {
projectName: string;
projectUuid: string;
userId: string; // user ID
thumbnail?: string;
sharedUsers?: string[];
organization: string;
}
interface GetProjectsInterface {
userId: string;
organization: string;
}
interface DeleteProjectInterface {
projectId: string;
userId: string;
organization: string;
}
2025-05-14 14:29:14 +05:30
export const createProject = async (data: CreateProjectInput) => {
try {
const {
projectName,
projectUuid,
userId,
thumbnail,
sharedUsers,
organization,
} = data;
const userExisting = await existingUser(userId, organization);
if (!userExisting) {
return {
status: "user_not_found",
};
}
const projectExisting = await existingProject(
projectName,
organization,
userId
);
2025-05-14 14:29:14 +05:30
if (projectExisting) {
return {
status: "project_exists",
project: projectExisting,
};
}
const project = await projectModel(organization).create({
projectName: projectName,
projectUuid: projectUuid,
createdBy: userId,
thumbnail: thumbnail,
2025-05-14 14:29:14 +05:30
sharedUsers: sharedUsers || [],
isArchive: false,
});
const versionData = await previousVersion(project._id, organization);
if (!versionData || versionData.length === 0) {
const newVersion = await versionModel(organization).create({
2025-05-14 14:29:14 +05:30
projectId: project._id,
createdBy: userId,
version: 0.01,
});
await projectModel(organization).findByIdAndUpdate(
{ _id: project._id, isArchive: false },
{ total_versions: `v-${newVersion.version.toFixed(2)}` }
);
2025-05-14 14:29:14 +05:30
}
return {
status: "Success",
2025-05-14 14:29:14 +05:30
project: project,
};
} catch (error) {
console.log("error: ", error);
2025-05-14 14:29:14 +05:30
return {
status: error,
};
}
};
export const GetAllProjects = async (data: GetProjectsInterface) => {
2025-05-14 14:29:14 +05:30
try {
const { userId, organization } = data;
await existingUser(userId, organization);
if (!existingUser) return { status: "User not found" };
const projectDatas = await projectModel(organization)
.find({
isArchive: false,
})
.select("_id projectName createdBy thumbnail");
if (projectDatas) return { status: "Success", Datas: projectDatas };
2025-05-14 14:29:14 +05:30
} catch (error: unknown) {
return { status: error };
}
};
export const DeleteProject = async (data: DeleteProjectInterface) => {
try {
const { projectId, organization, userId } = data;
const ExistingUser = await existingUser(userId, organization);
if (!ExistingUser) return { status: "User not found" };
const existingProject = await projectModel(organization).findOne({
_id: projectId,
createdBy: userId,
isArchive: false,
});
if (!existingProject) return { status: "Project not found" };
const updateProject = await projectModel(organization).findOneAndUpdate(
{ _id: projectId, isArchive: false },
{ isArchive: true, DeletedAt: new Date() },
{ new: true }
);
if (updateProject) return { status: "Success" };
} catch (error: unknown) {
return { status: error };
2025-05-14 14:29:14 +05:30
}
};