Smart Library Docs

Routes

Complete route definitions with HTTP methods, paths, middleware chains, and access control for every API endpoint.

Routes

All Express Router modules live in backend/routes/. Each file defines the HTTP method, URL path, middleware chain, and controller handler for its domain.

Route Base Path

All routes are mounted under /api/v1/ in server.js:

app.use('/api/v1/auth',          authRoutes);
app.use('/api/v1/users',         userRoutes);
app.use('/api/v1/books',         bookRoutes);
app.use('/api/v1/circulation',   circulationRoutes);
app.use('/api/v1/fines',         fineRoutes);
app.use('/api/v1/dashboard',     dashboardRoutes);
app.use('/api/v1/notifications', notificationRoutes);

Additionally, src/app.js mounts supplementary routes:

app.use('/api/reservations',  reservationRoutes);
app.use('/api/dashboard',     dashboardRoutes);
app.use('/api/notifications', notificationRoutes);
app.use('/api/config',        systemConfigRoutes);
app.use('/api/audit',         auditRoutes);
app.use('/api/reports',       reportRoutes);

1. Auth Routes

File: routes/auth.js

Includes rate limiting: 5 requests per minute per IP on setup, login, and refresh.

MethodPathMiddlewareHandlerDescription
POST/api/v1/auth/setupauthLimiterauthController.setupCreate initial Super Admin
POST/api/v1/auth/loginauthLimiterauthController.loginAuthenticate and get JWT + refresh token
POST/api/v1/auth/refreshauthLimiterauthController.refreshExchange refresh token for new access token
POST/api/v1/auth/logoutauthController.logoutBlacklist tokens and log out
GET/api/v1/auth/meauthenticateauthController.getMeGet current user profile

Note: setup, login, and refresh are public endpoints (no auth required). Rate-limited to 5 requests per minute per IP.


2. User Routes

File: routes/users.js

All user routes require authentication (router.use(authenticate)). Includes rate limiting on user creation.

MethodPathMiddlewareHandlerDescription
GET/api/v1/usersauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])userController.listUsersList all users
POST/api/v1/usersauthLimiter, authorize(['ROLE_ADMIN'])userController.createUserCreate new user
GET/api/v1/users/meuserController.getMeGet own profile
PATCH/api/v1/users/meuserController.updateMeUpdate own profile
GET/api/v1/users/:idauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])userController.getUserGet single user
PATCH/api/v1/users/:idauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])userController.updateUserUpdate user

3. Book Routes

File: routes/books.js

MethodPathMiddlewareHandlerDescription
GET/api/v1/books/categoriesauthenticatebookController.listCategoriesList all categories
GET/api/v1/booksauthenticatebookController.listBooksList all books (search, filter, paginate)
GET/api/v1/books/:idauthenticatebookController.getBookGet single book with copies
POST/api/v1/booksauthenticate, authorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])bookController.createBookCreate book
PATCH/api/v1/books/:idauthenticate, authorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])bookController.updateBookUpdate book
DELETE/api/v1/books/:idauthenticate, authorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])bookController.deleteBookDelete book
POST/api/v1/books/:id/copiesauthenticate, authorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])bookController.addCopyAdd physical copy

4. Circulation Routes

File: routes/circulation.js

All circulation routes require authentication (router.use(authenticate)).

MethodPathMiddlewareHandlerDescription
POST/api/v1/circulation/issueauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])circulationController.issueBookIssue book to user
POST/api/v1/circulation/returnauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])circulationController.returnBookProcess book return
GET/api/v1/circulation/historycirculationController.getHistoryGet borrowing history
GET/api/v1/circulation/activeauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])circulationController.getActiveList active loans

Note: history is available to all authenticated users but the controller filters results by role — students see only their own history.


5. Fine Routes

File: routes/fines.js

All fine routes require authentication (router.use(authenticate)).

MethodPathMiddlewareHandlerDescription
GET/api/v1/finesfineController.listFinesList fines (role-filtered)
POST/api/v1/fines/:id/payauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])fineController.payFineMark fine as paid

6. Dashboard Routes

File: routes/dashboard.js

MethodPathMiddlewareHandlerDescription
GET/api/v1/dashboard/statsauthenticatedashboardController.getStatsGet aggregate statistics
GET/api/v1/dashboard/analyticsauthenticatedashboardController.getAnalyticsGet trend data (loans, revenue)

7. Notification Routes

File: routes/notifications.js

All notification routes require authentication (router.use(authenticate)).

MethodPathMiddlewareHandlerDescription
GET/api/v1/notificationsnotificationController.getMyNotificationsGet own notifications (max 50)
PUT/api/v1/notifications/mark-all-readnotificationController.markAllAsReadMark all as read
PUT/api/v1/notifications/:id/readnotificationController.markAsReadMark single notification as read

8. Reservation Routes

File: routes/reservations.js

All reservation routes require authentication (router.use(authenticate)).

MethodPathMiddlewareHandlerDescription
POST/api/v1/reservationsreservationController.createReservationCreate a reservation
GET/api/v1/reservations/mereservationController.listMyReservationsList own reservations
POST/api/v1/reservations/:id/cancelreservationController.cancelReservationCancel own reservation
GET/api/v1/reservationsauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])reservationController.listAllReservationsList all reservations
POST/api/v1/reservations/:id/fulfillauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])reservationController.fulfillReservationFulfill reservation

9. Report Routes

File: routes/reports.js

All report routes require authentication and ROLE_ADMIN or ROLE_LIBRARIAN authorization.

MethodPathMiddlewareHandlerDescription
GET/api/v1/reports/circulationauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])reportController.exportCirculationDownload circulation CSV
GET/api/v1/reports/finesauthorize(['ROLE_ADMIN', 'ROLE_LIBRARIAN'])reportController.exportFinesDownload fines CSV

10. Audit Routes

File: routes/audit.js

All audit routes require authentication and ROLE_ADMIN authorization.

MethodPathMiddlewareHandlerDescription
GET/api/v1/auditauthorize(['ROLE_ADMIN'])auditController.getAuditLogsGet paginated audit logs

11. System Config Routes

File: routes/systemConfig.js

All config routes require authentication and ROLE_ADMIN authorization.

MethodPathMiddlewareHandlerDescription
GET/api/v1/configauthorize(['ROLE_ADMIN'])systemConfigController.getAllConfigsList all configs
PATCH/api/v1/config/:idauthorize(['ROLE_ADMIN'])systemConfigController.updateConfigUpdate config value

Access Control Summary

Endpoint GroupPublicStudentStaffLibrarianAdmin
Auth (setup, login, refresh)
Auth (me)
Users (own)
Users (all)✅ (read)✅ (full)
Books (read)
Books (write)
Circulation (issue/return)
Circulation (history)✅ (own)✅ (own)✅ (all)✅ (all)
Circulation (active)
Fines (read)✅ (own)✅ (own)✅ (all)✅ (all)
Fines (pay)
Dashboard
Notifications
Reservations (own)
Reservations (all/fulfill)
Reports
Audit Logs
System Config

On this page