Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
ah7-backend
/
src
/
controllers
/
Filename :
schedule.controller.js
back
Copy
import WorkoutSchedule from '../models/workoutSchedule.model.js'; import responseHandler from '../utils/ResponseHandler.js'; import {sendPushNotification} from '../services/notificationService.js'; import moment from 'moment'; // 1. Create Schedule export const createSchedule = async (req, res) => { try { const { user, workout, frequency, startDate, time, deviceToken } = req.body; // Validate required fields if (!user || !workout || !frequency || !startDate || !time || !deviceToken) { return responseHandler.error(res, "Missing required fields.", 400); } // Validate time format (HH:mm in UTC) if (!/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/.test(time)) { return responseHandler.error(res, "Invalid time format. Use HH:mm in UTC", 400); } // Validate startDate is UTC and not in past const startMoment = moment.utc(startDate); if (!startMoment.isValid()) { return responseHandler.error(res, "Invalid startDate format", 400); } if (startMoment.isBefore(moment.utc().startOf('day'))) { return responseHandler.error(res, "Start date cannot be in the past", 400); } const newSchedule = new WorkoutSchedule({ user, workout, frequency, startDate: startMoment.toDate(), // Store as UTC Date time, // UTC time in HH:mm deviceToken, }); const savedSchedule = await newSchedule.save(); return responseHandler.success(res, "Workout schedule created successfully", savedSchedule, 201); } catch (error) { console.error("Error creating workout schedule:", error); return responseHandler.error(res, "Failed to create workout schedule", 500, error.message); } }; // 2. Get All Schedules export const getAllSchedules = async (req, res) => { try { const schedules = await WorkoutSchedule.find().populate("user").populate("workout"); if (!schedules || schedules.length === 0) return responseHandler.error(res, "No schedules found", 404); return responseHandler.success(res, "All workout schedules fetched successfully", schedules); } catch (error) { console.error("Error fetching schedules:", error); return responseHandler.error(res, "Failed to fetch schedules", 500, error.message); } }; // 3. Get Schedules by User ID export const getUserSchedules = async (req, res) => { try { const { userId } = req.params; const schedules = await WorkoutSchedule.find({ user: userId }).populate("workout"); if (!schedules || schedules.length === 0) return responseHandler.error(res, "No schedules found for this user", 404); return responseHandler.success(res, "User workout schedules fetched successfully", schedules); } catch (error) { console.error("Error fetching user schedules:", error); return responseHandler.error(res, "Failed to fetch user schedules", 500, error.message); } }; // 4. Delete Schedule export const deleteSchedule = async (req, res) => { try { const { id } = req.params; const deletedSchedule = await WorkoutSchedule.findByIdAndDelete(id); if (!deletedSchedule) return responseHandler.error(res, "Schedule not found", 404); return responseHandler.success(res, "Schedule deleted successfully", deletedSchedule); } catch (error) { console.error("Error deleting schedule:", error); return responseHandler.error(res, "Failed to delete schedule", 500, error.message); } }; // 5. Update Schedule export const updateSchedule = async (req, res) => { try { const { id } = req.params; const updated = await WorkoutSchedule.findByIdAndUpdate(id, req.body, { new: true }); if (!updated) return responseHandler.error(res, "Schedule not found", 404); return responseHandler.success(res, "Schedule updated successfully", updated); } catch (error) { console.error("Error updating schedule:", error); return responseHandler.error(res, "Failed to update schedule", 500, error.message); } }; // 6. Test Notification Endpoint export const testNotification = async (req, res) => { try { const { deviceToken } = req.body; if (!deviceToken) { return responseHandler.error(res, "Device token is required", 400); } const result = await sendPushNotification( deviceToken, 'Test Notification', 'This is a test notification from AH7 Fitness' ); if (!result.success) { return responseHandler.error(res, "Failed to send test notification", 400, result.error); } return responseHandler.success(res, "Test notification sent successfully"); } catch (error) { console.error("Error sending test notification:", { error: error.message, stack: error.stack, deviceToken: req.body.deviceToken }); return responseHandler.error(res, "Failed to send test notification", 500, error.message); } };