The Gym Class Scheduling and Membership Management System is designed to streamline gym operations by efficiently managing roles, schedules, and memberships. This system includes three roles:
- Admin: Responsible for creating trainers, managing schedules, and assigning trainers.
- Trainer: Conducts classes and views assigned schedules.
- Trainee: Creates and manages their own profiles, books available class schedules, and cancels bookings when necessary.
Key features include:
- A maximum of five schedules per day, each lasting two hours.
- A limit of ten trainees per class.
- Role-based permissions with JWT-based authentication.
- Robust error handling to manage unauthorized access, validation errors, and booking/schedule limits.
- Programming Language: JavaScript
- Web Framework: Express.js
- ORM/ODM: Mongoose
- Database: MongoDB
- Authentication: JSON Web Tokens (JWT)
- Description: Register a new user.
- Request Body:
{ "name": "John Doe", "email": "john@example.com", "password": "password123", "role": "trainee" }
- Response:
{ "success": true, "statusCode": 201, "message": "User created successfully", "Data": { "name": "Name", "email": "email@gmail.com", "role": "Trainee", "isVerifyed": false, "_id": "678dc931b680********", "createdAt": "2025-01-20T03:55:29.691Z" } }
- Description: Login for all roles.
- Request Body:
{ "email": "example@gmail.com", "password": "Example@111" }
- Response:
{ "success": true, "statusCode": 201, "message": "User login successfully", "Data": { "_id": "678e2b67**********", "name": "admin", "email": "email@gmail.com", "role": "Trainee", "isVerifyed": false, "createdAt": "2025-01-20T10:54:31.348Z", "token": "eyJhbGciOiJIUzI1NiIs*********" } }
- Description: Create a new class schedule.
- Request Body:
{ "trainerId": "trainer_id", "startTime": "2025-01-20T10:00:00.000Z", "endTime": "2025-01-20T12:00:00.000Z" }
- Response:
{ "success": true, "success": true, "statusCode": 201, "message": "Class schedule created successfully." }
- Description: View all requests.
- Response:
{ "success": true, "data": [ { "requestId": "id", "details": "Request details." } ] }
- Description: Update a specific request.
- Response:
{ "success": true, "message": "Request updated successfully." }
- Description: View details of a specific request.
- Response:
{ "success": true, "data": { "requestId": "id", "details": "Request details." } }
- Description: Add new classes.
- Request Body:
{ "trainerId": "trainer_id", "startTime": "2025-01-20T10:00:00.000Z", "endTime": "2025-01-20T12:00:00.000Z" }
- Response:
{ "success": true, "message": "Class added successfully." }
- Description: Get a list of active classes assigned to the trainer.
- Response:
{ "success": true, "data": [ { "classId": "id", "startTime": "2025-01-20T10:00:00.000Z", "endTime": "2025-01-20T12:00:00.000Z" } ] }
- Description: View user profile.
- Response:
{ "success": true, "data": { "name": "John Doe", "email": "john@example.com", "role": "trainee" } }
- Description: Update user profile.
- Request Body:
{ "gender": "Male", "age": 00, "location": "2000,location,Country", "photo": "PhotoURL" }
- Response:
{ "success": true, "message": "Profile updated successfully." }
- Description: Submit a trainee request.
- Response:
{ "success": true, "message": "Request submitted successfully." }
- Description: Submit a trainer request.
- Response:
{ "success": true, "message": "Request submitted successfully." }
- Description: Get a list of active classes available for booking.
- Response:
{ "success": true, "data": [ { "classId": "id", "startTime": "2025-01-20T10:00:00.000Z", "endTime": "2025-01-20T12:00:00.000Z" } ] }
- Description: Book a class by ID.
- Response:
{ "success": true, "message": "Class booked successfully." }
- Description: Cancel a booking by ID.
- Response:
{ "success": true, "message": "Booking canceled successfully." }
- Validation Error:
{ "success": false, "message": "Validation error occurred.", "errorDetails": { "field": "email", "message": "Invalid email format." } }
- Unauthorized Access:
{ "success": false, "message": "Unauthorized access." }
- Booking Limit Exceeded:
{ "success": false, "message": "Class schedule is full. Maximum 10 trainees allowed per schedule." }
{
"_id": "ObjectId",
"name": "String",
"email": "String",
"password": "String",
"role": "String (admin/trainer/trainee)",
"createdAt": "Date",
"updatedAt": "Date"
}
{
"_id": "ObjectId",
"trainer": "ObjectId",
"startTime": "Date",
"endTime": "Date",
"trainees": ["ObjectId"],
"createdAt": "Date",
"updatedAt": "Date"
}
{
"_id": "ObjectId",
"classDB": "ObjectId",
"trainee": "ObjectId",
"status": "Boolean",
"createdAt": "Date",
"updatedAt": "Date"
}
- Email: admin@gmail.com
- Password: Admin@3333
- Clone the Repository:
git clone https://github.com/devmilon923/Gym-Management-System.git cd <repository-folder>
- Install Dependencies:
npm install
- Set Environment Variables:
Create a
.env
file with the following.env.sample
:server_url='APP URL' mongodbURI='MongoDBURI' jwtKey='jwtPrivate'
- Start the Server:
npm start
- Test API Endpoints: Use Postman or any API client with the provided endpoints.
- Login using the provided admin credentials.
- Create trainers and schedules via the admin endpoints.
- As a trainee, book and cancel classes.
- Verify constraints like schedule and booking limits.
This README provides all the essential details for understanding, running, and testing the project.