Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
ah7-backend
/
src
/
controllers
/
Filename :
exercise.controller.js
back
Copy
import Exercise from "../models/exercise.model.js"; import responseHandler from "../utils/ResponseHandler.js"; import mongoose from "mongoose"; // Import mongoose for ObjectId import { uploadFileToS3, deleteFileFromS3 } from "../services/s3Service.js"; const createExercise = async (req, res) => { try { const { category, exercises: exercisesString } = req.body; // Rename to exercisesString for clarity const categoryImageFile = req.files['image'][0]; // Category image file const exerciseImageFiles = req.files['exerciseImages']; // Exercise images files console.log("Category:", category); console.log("Exercises (String):", exercisesString); // Log the raw string console.log("Category Image File:", categoryImageFile); console.log("Exercise Image Files:", exerciseImageFiles); // Validate data if (!category || !exercisesString || !categoryImageFile || !exerciseImageFiles) { return responseHandler.error(res, "Invalid data provided", 400); } // Parse exercises string into an array let exercises; try { exercises = JSON.parse(exercisesString); // Parse the JSON string into an array } catch (parseError) { return responseHandler.error(res, "Invalid exercises format. Please provide a valid JSON array.", 400); } // Check if exercises is an array if (!Array.isArray(exercises)) { return responseHandler.error(res, "Exercises must be an array.", 400); } // Check if exercise with the same category already exists const existingExercise = await Exercise.findOne({ category }); if (existingExercise) return responseHandler.error(res, "Exercise with this category already exists", 400); // Upload image to S3 const { publicURL: categoryImageURL } = await uploadFileToS3(categoryImageFile); console.log("Category Image URL:", categoryImageURL); // Upload exercise images to S3 and update exercises array const updatedExercises = await Promise.all( exercises.map(async (exercise, index) => { const exerciseImageFile = exerciseImageFiles[index]; const { publicURL: exerciseImageURL } = await uploadFileToS3(exerciseImageFile); return { ...exercise, _id: new mongoose.Types.ObjectId(), // Generate a unique _id for each exercise item image: exerciseImageURL, // Update exercise image URL }; }) ); console.log("Updated Exercises:", updatedExercises); // Create new exercise const newExercise = new Exercise({ category, image: categoryImageURL, // Save the category image URL exercises: updatedExercises, // Save the updated exercises array }); await newExercise.save(); return responseHandler.success(res, "Exercise created successfully", newExercise); } catch (error) { // Handle duplicate key error for unique constraint if (error.code === 11000) return responseHandler.error(res, "Category must be unique. Exercise with this category already exists.", 400); console.log("error", error); return responseHandler.error(res, "Failed to create exercise", 500, error.message); } }; // -------------- Get a single exercise by ID ------------------ const getExerciseById = async (req, res) => { try { const { id } = req.params; const exercise = await Exercise.findById(id); if (!exercise) return responseHandler.error(res, "Exercise not found", 404); return responseHandler.success(res, "Exercise fetched successfully", exercise); } catch (error) { console.log(error) return responseHandler.error(res, "Failed to fetch exercises", 500, error.message); } } // Delete an exercise const deleteExercise = async (req, res) => { try { const { id } = req.params; const deletedExercise = await Exercise.findByIdAndDelete(id); if (!deletedExercise) return responseHandler.error(res, "Exercise not found", 404); return responseHandler.success(res, "Exercise deleted successfully", deletedExercise); } catch (error) { return responseHandler.error(res, "Failed to delete exercise", 500, error.message); } }; // Update an exercise const updateExercise = async (req, res) => { try { const { id } = req.params; const { category, exercises: exercisesString } = req.body; const categoryImageFile = req.files?.['image']?.[0]; // Optional: New category image file const exerciseImageFiles = req.files?.['exerciseImages']; // Optional: New exercise images files console.log("Category:", category); console.log("Exercises (String):", exercisesString); console.log("Category Image File:", categoryImageFile); console.log("Exercise Image Files:", exerciseImageFiles); // Validate data if (!category || !exercisesString) { return responseHandler.error(res, "Invalid data provided", 400); } // Parse exercises string into an array let exercises; try { exercises = JSON.parse(exercisesString); // Parse the JSON string into an array } catch (parseError) { return responseHandler.error(res, "Invalid exercises format. Please provide a valid JSON array.", 400); } // Check if exercises is an array if (!Array.isArray(exercises)) { return responseHandler.error(res, "Exercises must be an array.", 400); } // Find the existing exercise const existingExercise = await Exercise.findById(id); if (!existingExercise) { return responseHandler.error(res, "Exercise not found", 404); } // Upload new category image to S3 if provided let categoryImageURL = existingExercise.image; // Default to existing image if (categoryImageFile) { // Delete the old category image from S3 if (existingExercise.image) { await deleteFileFromS3(existingExercise.image); } // Upload the new category image const { publicURL } = await uploadFileToS3(categoryImageFile); categoryImageURL = publicURL; } // Upload new exercise images to S3 if provided const updatedExercises = await Promise.all( exercises.map(async (exercise, index) => { let exerciseImageURL = exercise.image; // Default to existing image if (exerciseImageFiles && exerciseImageFiles[index]) { // Delete the old exercise image from S3 if it exists if (exercise.image) { await deleteFileFromS3(exercise.image); } // Upload the new exercise image const { publicURL } = await uploadFileToS3(exerciseImageFiles[index]); exerciseImageURL = publicURL; } return { ...exercise, image: exerciseImageURL, // Update exercise image URL }; }) ); // Update the exercise const updatedExercise = await Exercise.findByIdAndUpdate( id, { category, image: categoryImageURL, exercises: updatedExercises, }, { new: true, runValidators: true } ); return responseHandler.success(res, "Exercise updated successfully", updatedExercise); } catch (error) { console.log("error", error); return responseHandler.error(res, "Failed to update exercise", 500, error.message); } }; // get all exercises const getExercises = async (req, res) => { try { const exercises = await Exercise.find({}); // MongoDB se saare exercises retrieve karna return responseHandler.success(res, "Exercises fetched successfully", exercises); } catch (error) { return responseHandler.error(res, "Failed to fetch exercises", 500, error.message); } }; export { getExercises, createExercise, getExerciseById, deleteExercise, updateExercise } // import Exercise from "../models/exercise.model.js"; // import responseHandler from "../utils/ResponseHandler.js"; // // Create exercise // const createExercise = async (req, res) => { // try { // const { category, image, exercises } = req.body; // // Validate data // if (!category || !Array.isArray(exercises)) return responseHandler.error(res, "Invalid data provided", 400); // // Check if exercise with the same category already exists // const existingExercise = await Exercise.findOne({ category }); // if (existingExercise) return responseHandler.error(res, "Exercise with this category already exists", // 400); // // Create new exercise // const newExercise = new Exercise({ // category, // image, // exercises, // }); // await newExercise.save(); // return responseHandler.success(res, "Exercise created successfully", newExercise); // } catch (error) { // // Handle duplicate key error for unique constraint // if (error.code === 11000) return responseHandler.error(res, "Category must be unique. Exercise with this category already exists.", 400); // console.log(error); // return responseHandler.error(res, "Failed to create exercise", 500, error.message); // } // }; // // Get a single exercise by ID // const getExerciseById = async (req, res) => { // try { // const { id } = req.params; // const exercise = await Exercise.findById(id); // if (!exercise) return responseHandler.error(res, "Exercise not found", 404); // return responseHandler.success(res, "Exercise fetched successfully", exercise); // } catch (error) { // console.log(error) // return responseHandler.error(res, "Failed to fetch exercises", 500, error.message); // } // } // // Delete an exercise // const deleteExercise = async (req, res) => { // try { // const { id } = req.params; // const deletedExercise = await Exercise.findByIdAndDelete(id); // if (!deletedExercise) return responseHandler.error(res, "Exercise not found", 404); // return responseHandler.success(res, "Exercise deleted successfully", deletedExercise); // } catch (error) { // return responseHandler.error(res, "Failed to delete exercise", 500, error.message); // } // }; // // Update an exercise // const updateExercise = async (req, res) => { // try { // const { id } = req.params; // const { category, image, exercises } = req.body; // // Validate data // if (!category || !Array.isArray(exercises)) return responseHandler.error(res, "Invalid data provided", 400); // const updatedExercise = await Exercise.findByIdAndUpdate( // id, // { category, image, exercises }, // { new: true, runValidators: true } // ); // if (!updatedExercise) return responseHandler.error(res, "Exercise not found", 404); // return responseHandler.success(res, "Exercise updated successfully", updatedExercise); // } catch (error) { // return responseHandler.error(res, "Failed to update exercise", 500, error.message); // } // }; // // get all exercises // const getExercises = async (req, res) => { // try { // const exercises = await Exercise.find({}); // MongoDB se saare exercises retrieve karna // return responseHandler.success(res, "Exercises fetched successfully", exercises); // } catch (error) { // return responseHandler.error(res, "Failed to fetch exercises", 500, error.message); // } // }; // export { // getExercises, // createExercise, // getExerciseById, // deleteExercise, // updateExercise // }