diff --git a/models/group.js b/models/group.js index 33ee606..d54b830 100644 --- a/models/group.js +++ b/models/group.js @@ -35,6 +35,10 @@ const schema = new mongoose.Schema({ type: Date, default: Date.now, }, + isDeleted:{ + type: Boolean, + default:false + } }); const group = mongoose.model("Group", schema); diff --git a/models/message.js b/models/message.js index b6c0cf0..14fb65e 100644 --- a/models/message.js +++ b/models/message.js @@ -11,6 +11,11 @@ const schema = new mongoose.Schema({ ref: "Group", required: true, }, + projectId: { + type: mongoose.Schema.Types.ObjectId, + ref: "Project", + required: true + }, messageType: { type: String, enum: ["Text", "Image", "Video", "File"], @@ -20,6 +25,10 @@ const schema = new mongoose.Schema({ type: Date, default: Date.now, }, + isDeleted: { + type: Boolean, + default: false + } }); const message = mongoose.model("Message", schema); diff --git a/models/project.js b/models/project.js index 6528909..dade3a6 100644 --- a/models/project.js +++ b/models/project.js @@ -35,6 +35,10 @@ const schema = new mongoose.Schema({ type: Date, default: Date.now, }, + isDeleted: { + type: Boolean, + default: false + } }); const project = mongoose.model("Project", schema); diff --git a/models/user.js b/models/user.js index 8242ce9..a791f6a 100644 --- a/models/user.js +++ b/models/user.js @@ -23,6 +23,10 @@ const schema = new mongoose.Schema({ type: Date, default: Date.now, }, + isDeleted: { + type: Boolean, + default: false + } }); const user = mongoose.model("User", schema); diff --git a/services/v1/DeveloperService.js b/services/v1/DeveloperService.js index c81359a..559ac17 100644 --- a/services/v1/DeveloperService.js +++ b/services/v1/DeveloperService.js @@ -1,11 +1,49 @@ import Service from "./Service"; +import HttpResponse from "../../helpers/HttpResponse"; class DeveloperService extends Service { constructor(model) { super(model); } + async getAll(query) { + let { skip, limit, sortBy } = query; + + skip = skip ? Number(skip) : 0; + limit = limit ? Number(limit) : 10; + sortBy = sortBy ? sortBy : { createdAt: -1 }; + + delete query.skip; + delete query.limit; + delete query.sortBy; + query['isDeleted'] = false; + + console.log("query", query); + + if (query._id) { + try { + query._id = new mongoose.mongo.ObjectId(query._id); + } catch (error) { + throw new Error("Not able to generate mongoose id with content"); + } + } + try { + const items = await this.model + .find({ query }) + .sort(sortBy) + .skip(skip) + .limit(limit) + .populate({ path: 'projects', match: { isDeleted: false }, select: '_id' }) + const total = await this.model.countDocuments(query); + + return new HttpResponse(items, { totalCount: total }); + } catch (errors) { + throw errors; + } + } + async findByEmail(email) { + console.log('called1'); try { const item = await this.model.findOne({ email }); return item; @@ -15,8 +53,9 @@ class DeveloperService extends Service { } async findByEmailOrCreateIfNotFound(data) { + console.log('called'); try { - let item = await this.model.findOne({ email: data.email }).populate('projects'); + let item = await this.model.findOne({ email: data.email }).populate({ path: 'projects', match: { isDeleted: 'false' } }) if (!item) { item = await this.insert(data); diff --git a/services/v1/GroupService.js b/services/v1/GroupService.js index 63b94f3..20bd74a 100644 --- a/services/v1/GroupService.js +++ b/services/v1/GroupService.js @@ -44,7 +44,7 @@ class GroupService extends Service { try { const item = await this.model - .findById(id) + .findOne({ _id: id, isDeleted: false }) .populate("membersList", "name") .populate("admins", "name");; @@ -93,20 +93,32 @@ class GroupService extends Service { } async addMessage(id, messageId) { - + try { const item = await this.model.findByIdAndUpdate( id, { $push: { messages: messageId } }, { new: true } ) - // console.log("Here",item) + // console.log("Here",item) return item; - } catch (error) { - throw error; + } catch (errors) { + throw errors; } } + + async deleteGroups(id) { + + try { + const item = await this.model.updateMany({ projectId: id }, { isDeleted: true }); + return item; + } catch (errors) { + throw errors; + } + } + + } export default GroupService; diff --git a/services/v1/MessageService.js b/services/v1/MessageService.js index d1f1883..d4d8d07 100644 --- a/services/v1/MessageService.js +++ b/services/v1/MessageService.js @@ -24,6 +24,16 @@ class MessageService extends Service { } } + + async deleteMessages(id) { + + try { + const item = await this.model.updateMany({ projectId: id }, { isDeleted: true }); + return item; + } catch (errors) { + throw errors; + } + } } export default MessageService; \ No newline at end of file diff --git a/services/v1/ProjectService.js b/services/v1/ProjectService.js index dac8288..331d1a1 100644 --- a/services/v1/ProjectService.js +++ b/services/v1/ProjectService.js @@ -1,8 +1,18 @@ import HttpResponse from "../../helpers/HttpResponse"; import Service from "./Service"; import Developer from "../../models/developer"; +import Message from "../../models/message"; +import Group from "../../models/group"; +import User from "../../models/user"; import DeveloperService from "./DeveloperService"; +import MessageService from "./MessageService"; +import GroupService from "./GroupService"; +import UserService from "./UserService"; + const developerService = new DeveloperService(Developer); +const messageService = new MessageService(Message); +const groupService = new GroupService(Group); +const userService = new UserService(User); class ProjectService extends Service { constructor(model) { @@ -24,8 +34,12 @@ class ProjectService extends Service { async delete(developerId, id) { try { - const item = await this.model.findByIdAndDelete(id); - await developerService.removeProject(developerId, id); + const item = await this.model.findByIdAndUpdate(id, { isDeleted: true }); + // await developerService.removeProject(developerId, id); + await groupService.deleteGroups(id); + await userService.deleteUsers(id); + await messageService.deleteMessages(id); + if (!item) { const error = new Error("Item not found"); diff --git a/services/v1/Service.js b/services/v1/Service.js index 1204f2e..d9035ca 100644 --- a/services/v1/Service.js +++ b/services/v1/Service.js @@ -18,6 +18,9 @@ class Service { delete query.skip; delete query.limit; delete query.sortBy; + query['isDeleted'] = false; + + console.log("query", query); if (query._id) { try { @@ -26,7 +29,6 @@ class Service { throw new Error("Not able to generate mongoose id with content"); } } - try { const items = await this.model .find(query) @@ -43,7 +45,7 @@ class Service { async get(id) { try { - const item = await this.model.findById(id); + const item = await this.model.findOne({ _id: id, isDeleted: false }); if (!item) { const error = new Error("Item not found"); @@ -83,7 +85,7 @@ class Service { async delete(id) { try { - const item = await this.model.findByIdAndDelete(id); + const item = await this.model.findByIdAndUpdate(id, { isDeleted: true }, { new: true }) if (!item) { const error = new Error("Item not found"); diff --git a/services/v1/UserService.js b/services/v1/UserService.js index 2d342c7..faa6d99 100644 --- a/services/v1/UserService.js +++ b/services/v1/UserService.js @@ -4,6 +4,16 @@ class UserService extends Service { constructor(model) { super(model); } + + async deleteUsers(id) { + + try { + const item = await this.model.updateMany({ projectId: id }, { isDeleted: true }); + return item; + } catch (errors) { + throw errors; + } + } } export default UserService;