diff --git a/src/api/services/TopSpeaker.service.ts b/src/api/services/TopSpeaker.service.ts index 4072ba2..05ce5c3 100644 --- a/src/api/services/TopSpeaker.service.ts +++ b/src/api/services/TopSpeaker.service.ts @@ -5,41 +5,45 @@ import TopSpeakerModel from "../models/TopSpeaker.model"; * @todo create @function insertTopSpeaker to save a speaker in the database */ export const insertTopSpeaker = async (topSpeakerData: DocumentDefinition) => { - return await TopSpeakerModel.create(topSpeakerData) - .then(async (topSpeaker) => { - return topSpeaker; - }) - .catch((error) => { - throw new Error(error.message); - }); - }; + return await TopSpeakerModel.create(topSpeakerData) + .then((topSpeaker) => { + return topSpeaker; + }) + .catch((error) => { + throw new Error(error.message); + }); +}; /** * @todo create @function getTopSpeaker to fetch a TopSpeaker in the system * @param topSpeakerId @type string */ export const getTopSpeaker = async (topSpeakerId: string) => { - return await TopSpeakerModel.findById(topSpeakerId) - .then(async (topSpeaker) => { + return await TopSpeakerModel.findById(topSpeakerId) + .then((topSpeaker) => { + if (topSpeaker && topSpeaker.deletedAt) { return topSpeaker; - }) - .catch((error) => { - throw new Error(error.message); - }); - }; + } else { + throw new Error("Speaker is not found"); + } + }) + .catch((error) => { + throw new Error(error.message); + }); +}; /** * @todo create @function getTopSpeakers to fetch all the TopSpeakers in the system */ export const getTopSpeakers = async () => { - return await TopSpeakerModel.find() - .then(async (topSpeaker) => { - return topSpeaker; - }) - .catch((error) => { - throw new Error(error.message); - }); - }; + return await TopSpeakerModel.aggregate([{ $match: { deletedAt: { $eq: null } } }]) + .then((topSpeakers) => { + return topSpeakers; + }) + .catch((error) => { + throw new Error(error.message); + }); +}; /** * @todo create @function updateTopSpeaker to update a TopSpeaker in the system @@ -47,45 +51,70 @@ export const getTopSpeakers = async () => { * @param updateData @type DocumentDefinition */ export const updateTopSpeaker = async ( - topSpeakerId: string, - updateData: DocumentDefinition - ) => { - return await TopSpeakerModel.findById(topSpeakerId) - .then(async (topSpeakerDetails) => { - if (topSpeakerDetails) { - topSpeakerDetails.title = updateData.title; - topSpeakerDetails.description = updateData.description; - topSpeakerDetails.imageUrl = updateData.imageUrl; - topSpeakerDetails.socialMediaURLs.facebook = updateData.socialMediaURLs.facebook; - topSpeakerDetails.socialMediaURLs.instagram = updateData.socialMediaURLs.instagram; - topSpeakerDetails.socialMediaURLs.linkedIn = updateData.socialMediaURLs.linkedIn; - topSpeakerDetails.socialMediaURLs.twitter = updateData.socialMediaURLs.twitter; - topSpeakerDetails.socialMediaURLs.web = updateData.socialMediaURLs.web; - return await topSpeakerDetails.save(); - } else { - return null; + topSpeakerId: string, + updateData: DocumentDefinition +) => { + return await TopSpeakerModel.findById(topSpeakerId) + .then(async (topSpeakerDetails) => { + if (topSpeakerDetails) { + + if (updateData.title) { + topSpeakerDetails.title = updateData.title; + } + + if (updateData.description) { + topSpeakerDetails.description = updateData.description; } - }) - .catch((error) => { - throw new Error(error.message); - }); - }; + + if (updateData.imageUrl) { + topSpeakerDetails.imageUrl = updateData.imageUrl; + } + + if (updateData.socialMediaURLs && updateData.socialMediaURLs.facebook) { + topSpeakerDetails.socialMediaURLs.facebook = updateData.socialMediaURLs.facebook; + } + + if (updateData.socialMediaURLs && updateData.socialMediaURLs.instagram) { + topSpeakerDetails.socialMediaURLs.instagram = updateData.socialMediaURLs.instagram; + } + + if (updateData.socialMediaURLs && updateData.socialMediaURLs.linkedIn) { + topSpeakerDetails.socialMediaURLs.linkedIn = updateData.socialMediaURLs.linkedIn; + } + + if (updateData.socialMediaURLs && updateData.socialMediaURLs.twitter) { + topSpeakerDetails.socialMediaURLs.twitter = updateData.socialMediaURLs.twitter; + } + + if (updateData.socialMediaURLs && updateData.socialMediaURLs.web) { + topSpeakerDetails.socialMediaURLs.web = updateData.socialMediaURLs.web; + } + + return await topSpeakerDetails.save(); + } else { + return null; + } + }) + .catch((error) => { + throw new Error(error.message); + }); +}; /** * @todo create @function deleteTopSpeaker to delete a past event * @param topSpeakerId @type string */ export const deleteTopSpeaker = async (topSpeakerId: string) => { - return await TopSpeakerModel.findById(topSpeakerId) - .then(async (topSpeakerDetails) => { - if (topSpeakerDetails) { - topSpeakerDetails.deletedAt = new Date(); - return await topSpeakerDetails.save(); - } else { - return null; - } - }) - .catch((error) => { - throw new Error(error.message); - }); - }; + return await TopSpeakerModel.findById(topSpeakerId) + .then(async (topSpeakerDetails) => { + if (topSpeakerDetails) { + topSpeakerDetails.deletedAt = new Date(); + return await topSpeakerDetails.save(); + } else { + return null; + } + }) + .catch((error) => { + throw new Error(error.message); + }); +};