Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
ah7-backend
/
src
/
controllers
/
Filename :
logHistory.controller.js
back
Copy
import Exercise from '../models/exercise.model.js'; import ExerciseLog from '../models/logHistory.model.js'; import ResponseHandler from "../utils/ResponseHandler.js"; // Add Log To Exercise const addLog = async (req, res) => { try { const { exerciseId, exerciseItemId } = req.params; // exerciseId (main exercise) and exerciseItemId (nested exercise) const { user_id, weights, repetitions, optional_notes, name, category, weight_category } = req.body; // Verify if the main exercise exists const exercise = await Exercise.findById(exerciseId); if (!exercise) return ResponseHandler.error(res, "Exercise not found", 404); // Check if the nested exercise item exists const exerciseItem = exercise.exercises.find( (item) => item._id.toString() === exerciseItemId ); if (!exerciseItem) return ResponseHandler.error(res, "Exercise item not found", 404); // Determine weight based on selected category let logEntryData = { user_id, exercise_id: exerciseId, name, repetitions, optional_notes, category, weight_category, }; if (weight_category === "kg") { logEntryData.weights = weights; // Save weight as kg } else if (weight_category === "lbs") { logEntryData.weights = weights; // Save weight as lbs } else { return ResponseHandler.error(res, "Invalid weight category. Choose 'kg' or 'lbs'.", 400); } // Create log entry const logEntry = new ExerciseLog(logEntryData); // Save the log entry await logEntry.save(); ResponseHandler.success(res, "Log added successfully", logEntry); } catch (error) { console.error("Error adding log:", error); ResponseHandler.error(res, "Internal Server Error", 500, error.message); } }; // Update the nested log_history array for the specific exercise item in add log controller part // const updateResult = await Exercise.updateOne( // { _id: exerciseId, "exercises._id": exerciseItemId }, // { $push: { "exercises.$[elem].log_history": logEntry._id } }, // { arrayFilters: [{ "elem._id": exerciseItemId }] } // Filter for the specific subitem // ); // if (updateResult.modifiedCount === 0) return ResponseHandler.error(res, "Failed to update log history", 400); // Get Logs for a User // Get Logs for a User (with optional route and query filtering) const getLogsByUser = async (req, res) => { try { const { user_id, exercise_id } = req.params; // Route params const { date, category } = req.query; // Query params // Build the query object dynamically const query = { user_id }; if (exercise_id) query.exercise_id = exercise_id; // Add exercise ID filter if provided if (date) query.time = { $gte: new Date(date) }; // Filter logs by date if (category) query.category = category; // Filter logs by category // Fetch logs based on the query const logs = await ExerciseLog.find(query) .populate("exercise_id", "name category") .sort({ time: -1 }); // Sort logs by latest first if (logs.length === 0) { return ResponseHandler.error(res, "No logs found", 404); } ResponseHandler.success(res, "Logs fetched successfully", logs); } catch (error) { console.error("Error fetching logs:", error); ResponseHandler.error(res, "Internal Server Error", 500, error.message); } }; // Delete Log by ID const deleteLog = async (req, res) => { try { const { logId } = req.params; const log = await ExerciseLog.findByIdAndDelete(logId); if (!log) return ResponseHandler.error(res, "Log not found", 404); ResponseHandler.success(res, "Log deleted successfully", log); } catch (error) { console.error("Error deleting log:", error); ResponseHandler.error(res, "Internal Server Error", 500, error.message); } }; const deleteLogHistory = async (req, res) => { try { const { user_id } = req.params if(!user_id) return ResponseHandler.error(res, "User ID is required", 400); const deleteHistory = await ExerciseLog.deleteMany({ user_id }); if (deleteHistory.deletedCount === 0) return ResponseHandler.error(res, "No logs found for the user", 404); ResponseHandler.success( res, `${deleteHistory.deletedCount} logs deleted successfully for user`, deleteHistory ); } catch (error) { console.log(error) ResponseHandler.error(res, "Internal Server Error", 500, error.message); } } export { addLog, getLogsByUser, deleteLog, deleteLogHistory };