A RESTful API for managing parking spaces, car entries/exits, and user management.
- User Management (Admin and User roles)
- Parking Space Management
- Car Entry/Exit Management
- Ticket Generation
- Email Notifications
- Parking Statistics
- Node.js (v14 or higher)
- PostgreSQL
- npm or yarn
-
Clone the repository
-
Install dependencies:
npm install
-
Create a
.envfile in the root directory with the following variables:PORT=3000 DATABASE_URL="postgresql://postgres:your_password@localhost:5432/parking_management" JWT_SECRET="your-super-secret-jwt-key" JWT_EXPIRES_IN="24h" SMTP_HOST="smtp.gmail.com" SMTP_PORT=587 SMTP_USER="your-email@gmail.com" SMTP_PASS="your-app-specific-password" SMTP_FROM="Parking Management System <your-email@gmail.com>"
-
Set up the database:
npx prisma migrate dev
-
Start the server:
npm start
POST /api/auth/register- Register a new userPOST /api/auth/login- Login userGET /api/auth/me- Get current user
GET /api/users- Get all users (Admin only)GET /api/users/:id- Get user by IDPUT /api/users/:id- Update userDELETE /api/users/:id- Delete user
POST /api/parkings- Create parking (Admin only)GET /api/parkings- Get all parkingsGET /api/parkings/:id- Get parking by IDPUT /api/parkings/:id- Update parking (Admin only)DELETE /api/parkings/:id- Delete parking (Admin only)GET /api/parkings/:id/stats- Get parking statistics (Admin only)
POST /api/parking-sessions/entry- Request car entryPOST /api/parking-sessions/:id/exit- Request car exitGET /api/parking-sessions/my-sessions- Get user's parking sessionsGET /api/parking-sessions/entry-requests- Get entry requests (Admin only)GET /api/parking-sessions/exit-requests- Get exit requests (Admin only)POST /api/parking-sessions/:id/approve-entry- Approve entry (Admin only)POST /api/parking-sessions/:id/approve-exit- Approve exit (Admin only)GET /api/parking-sessions/active- Get active sessions (Admin only)
- id: String (UUID)
- firstName: String
- lastName: String
- email: String
- password: String
- role: Role (ADMIN, USER)
- status: UserStatus (ACTIVE, INACTIVE)
- createdAt: DateTime
- updatedAt: DateTime
- id: String (UUID)
- parkingCode: String
- parkingName: String
- location: String
- availableSpaces: Int
- chargingFeePerHour: Float
- createdAt: DateTime
- updatedAt: DateTime
- id: String (UUID)
- ticketNumber: String
- plateNumber: String
- userId: String
- parkingId: String
- entryDateTime: DateTime
- exitDateTime: DateTime
- chargedAmount: Float
- status: SessionStatus
- createdAt: DateTime
- updatedAt: DateTime