"use strict"; const utils = require("@strapi/utils"); const { ApplicationError, ValidationError } = utils.errors; /** * experience controller */ const { createCoreController } = require("@strapi/strapi").factories; module.exports = createCoreController("api::experience.experience", () => ({ async create(ctx) { // Validations if (!ctx.request.body.data.vendor) { throw new ValidationError("Vendor is a mandatory field."); } if (!ctx.request.body.data.pincode) { throw new ValidationError("Pincode is a mandatory field."); } if (!ctx.request.body.data.subCategory) { throw new ValidationError("Subcategory is a mandatory field"); } if (!ctx.request.body.data.category) { throw new ValidationError("Category is a mandatory field"); } const subCategory = await strapi .query("api::sub-categorie.sub-categorie") .findOne({ where: { name: { $eq: ctx.request.body.data.subCategory, }, }, }); const category = await strapi.query("api::categorie.categorie").findOne({ where: { name: { $eq: ctx.request.body.data.category, }, }, }); const repeatedActivities = await strapi .query("api::experience.experience") .findOne({ where: { $and: [ { name: ctx.request.body.data.name }, { vendor: ctx.request.body.data.vendor.id }, ], }, }); if (repeatedActivities) { throw new ValidationError( "Activity with the same name already exists, please rename the activity." ); } // Create Activity const activity = await strapi.entityService.create( "api::experience.experience", { data: { name: ctx.request.body.data.name, description: ctx.request.body.data.description, pricePerPerson: ctx.request.body.data.pricePerPerson, address: ctx.request.body.data.address, masterPincode: ctx.request.body.data.pincode.id, minimumDuration: ctx.request.body.data.minimumDuration, maximumDuration: ctx.request.body.data.maximumDuration, duration: ctx.request.body.data.duration, ageLowerLimit: ctx.request.body.data.ageLowerLimit, ageNotes: ctx.request.body.data.ageNotes, phoneNumber: ctx.request.body.data.phoneNumber, minGroupSize: ctx.request.body.data.minGroupSize, maxGroupSize: ctx.request.body.data.maxGroupSize, activityType: ctx.request.body.data.activityType, link: ctx.request.body.data.link, cancellationPolicy: ctx.request.body.data.cancellationPolicy, vendor: ctx.request.body.data.vendor.id, subCategory: subCategory.id, category: category.id, giftSomeone: ctx.request.body.data.giftSomeone, fromDate: ctx.request.body.data.fromDate, toDate: ctx.request.body.data.toDate, fromTime: ctx.request.body.data.fromTime, toTime: ctx.request.body.data.toTime, offers: ctx.request.body.data.offers, rating: ctx.request.body.data.rating, contactPersonForActivity: ctx.request.body.data.contactPersonForActivity, contactPersonForBooking: ctx.request.body.data.contactPersonForBooking, ...ctx.request.body.data.daysBoolean, }, } ); ctx.send({ success: true, message: "Activity Created", data: { ...activity, }, }); }, async update(ctx) { // if (!ctx.request.body.data.vendor) { // throw new ValidationError("Vendor is a mandatory field."); // } console.log("ctx>", ctx.request.body); if (!ctx.request.body.data.pincode) { throw new ValidationError("Pincode is a mandatory field."); } if (!ctx.request.body.data.subCategory) { throw new ValidationError("Subcategory is a mandatory field"); } if (!ctx.request.body.data.category) { throw new ValidationError("Category is a mandatory field"); } console.log("subcategoyr", ctx.params); const { id } = ctx.params; const subCategory = await strapi .query("api::sub-categorie.sub-categorie") .findOne({ where: { name: { $eq: ctx.request.body.data.subCategory, }, }, }); const category = await strapi.query("api::categorie.categorie").findOne({ where: { name: { $eq: ctx.request.body.data.category, }, }, }); console.log( "ctx.request.body.data.activityId", ctx.request.body.data.activityId ); const updatedExperience = await strapi .query("api::experience.experience") .update( { id }, { name: ctx.request.body.data.name, description: ctx.request.body.data.description, pricePerPerson: ctx.request.body.data.pricePerPerson, address: ctx.request.body.data.address, masterPincode: ctx.request.body.data.pincode.id, minimumDuration: ctx.request.body.data.minimumDuration, maximumDuration: ctx.request.body.data.maximumDuration, duration: ctx.request.body.data.duration, ageLowerLimit: ctx.request.body.data.ageLowerLimit, ageNotes: ctx.request.body.data.ageNotes, phoneNumber: ctx.request.body.data.phoneNumber, minGroupSize: ctx.request.body.data.minGroupSize, maxGroupSize: ctx.request.body.data.maxGroupSize, activityType: ctx.request.body.data.activityType, link: ctx.request.body.data.link, cancellationPolicy: ctx.request.body.data.cancellationPolicy, // vendor: ctx.request.body.data.vendor.id, subCategory: subCategory.id, category: category.id, giftSomeone: ctx.request.body.data.giftSomeone, fromDate: ctx.request.body.data.fromDate, toDate: ctx.request.body.data.toDate, fromTime: ctx.request.body.data.fromTime, toTime: ctx.request.body.data.toTime, offers: ctx.request.body.data.offers, rating: ctx.request.body.data.rating, contactPersonForActivity: ctx.request.body.data.contactPersonForActivity, contactPersonForBooking: ctx.request.body.data.contactPersonForBooking, ...ctx.request.body.data.daysBoolean, } ); // const activity = await strapi.entityService.update( // "api::experience.experience", // { id: ctx.request.body.data.activityId }, // { // name: ctx.request.body.data.name, // description: ctx.request.body.data.description, // pricePerPerson: ctx.request.body.data.pricePerPerson, // address: ctx.request.body.data.address, // masterPincode: ctx.request.body.data.pincode.id, // minimumDuration: ctx.request.body.data.minimumDuration, // maximumDuration: ctx.request.body.data.maximumDuration, // duration: ctx.request.body.data.duration, // ageLowerLimit: ctx.request.body.data.ageLowerLimit, // ageNotes: ctx.request.body.data.ageNotes, // phoneNumber: ctx.request.body.data.phoneNumber, // minGroupSize: ctx.request.body.data.minGroupSize, // maxGroupSize: ctx.request.body.data.maxGroupSize, // activityType: ctx.request.body.data.activityType, // link: ctx.request.body.data.link, // cancellationPolicy: ctx.request.body.data.cancellationPolicy, // // vendor: ctx.request.body.data.vendor.id, // subCategory: subCategory.id, // category: category.id, // giftSomeone: ctx.request.body.data.giftSomeone, // fromDate: ctx.request.body.data.fromDate, // toDate: ctx.request.body.data.toDate, // fromTime: ctx.request.body.data.fromTime, // toTime: ctx.request.body.data.toTime, // offers: ctx.request.body.data.offers, // rating: ctx.request.body.data.rating, // contactPersonForActivity: // ctx.request.body.data.contactPersonForActivity, // contactPersonForBooking: ctx.request.body.data.contactPersonForBooking, // ...ctx.request.body.data.daysBoolean, // } // ); console.log("updatedExperience", updatedExperience); ctx.send({ success: true, message: "Activity updated", data: { ...updatedExperience, }, }); }, }));