Initial commit: teaching institution management API.

Express/MongoDB backend with JWT auth, RBAC, S3 uploads, notifications, and scheduled jobs.
This commit is contained in:
2026-08-09 04:18:08 +02:00
commit f04c797be6
107 changed files with 9190 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
// /constants/eventNames.js
const EVENT_NAMES = {
USER_REGISTERED: 'user.registered',
USER_CREATED: 'user.created',
USER_ENROLLED: 'user.enrolled',
USER_UPDATED: 'user.updated',
PROFESSOR_CREATED: 'professor.created',
COURSE_CREATED: 'course.created',
COURSE_PRICE_CHANGED: 'course.price_changed',
SESSION_CREATED: 'session.created',
SESSION_CANCELLED: 'session.cancelled',
ATTENDANCE_RECORDED: 'attendance.recorded',
ATTENDANCE_BULK_RECORDED: 'attendance.bulk_recorded',
PAYMENT_CREATED: 'payment.created',
PAYMENT_STATUS_CHANGED: 'payment.status_changed',
PAYMENT_TRANSACTION_ADDED: 'payment.transaction_added',
PAYMENT_REMINDER_DUE: 'payment.reminder_due',
NOTIFICATION_CREATED: 'notification.created',
NOTIFICATION_SENT: 'notification.sent',
NOTIFICATION_FAILED: 'notification.failed',
CERTIFICATE_ISSUED: 'certificate.issued',
CERTIFICATE_UPLOADED: 'certificate.uploaded'
};
module.exports = EVENT_NAMES;
+90
View File
@@ -0,0 +1,90 @@
// /constants/permissions.js
const PERMISSIONS = {
// Users permissions
USERS_CREATE: 'users:create',
USERS_READ: 'users:read',
USERS_UPDATE: 'users:update',
USERS_DELETE: 'users:delete',
USERS_SEARCH: 'users:search',
USERS_ENROLL: 'users:enroll',
// Professors permissions
PROFESSORS_CREATE: 'professors:create',
PROFESSORS_READ: 'professors:read',
PROFESSORS_UPDATE: 'professors:update',
PROFESSORS_DELETE: 'professors:delete',
PROFESSORS_SEARCH: 'professors:search',
// Courses permissions
COURSES_CREATE: 'courses:create',
COURSES_READ: 'courses:read',
COURSES_UPDATE: 'courses:update',
COURSES_DELETE: 'courses:delete',
COURSES_SEARCH: 'courses:search',
// Classes permissions
CLASSES_CREATE: 'classes:create',
CLASSES_READ: 'classes:read',
CLASSES_UPDATE: 'classes:update',
CLASSES_DELETE: 'classes:delete',
CLASSES_SEARCH: 'classes:search',
CLASSES_REGISTER_USERS: 'classes:register_users',
// Sessions permissions
SESSIONS_CREATE: 'sessions:create',
SESSIONS_READ: 'sessions:read',
SESSIONS_UPDATE: 'sessions:update',
SESSIONS_DELETE: 'sessions:delete',
SESSIONS_SEARCH: 'sessions:search',
SESSIONS_ATTENDANCE: 'sessions:attendance',
// Payments permissions
PAYMENTS_CREATE: 'payments:create',
PAYMENTS_READ: 'payments:read',
PAYMENTS_UPDATE: 'payments:update',
PAYMENTS_DELETE: 'payments:delete',
PAYMENTS_SEARCH: 'payments:search',
// Roles permissions
ROLES_CREATE: 'roles:create',
ROLES_READ: 'roles:read',
ROLES_UPDATE: 'roles:update',
ROLES_DELETE: 'roles:delete',
ROLES_SEARCH: 'roles:search',
// Notifications permissions
NOTIFICATIONS_CREATE: 'notifications:create',
NOTIFICATIONS_READ: 'notifications:read',
NOTIFICATIONS_UPDATE: 'notifications:update',
NOTIFICATIONS_DELETE: 'notifications:delete',
NOTIFICATIONS_SEARCH: 'notifications:search',
NOTIFICATIONS_RETRY: 'notifications:retry',
// Certificates permissions
CERTIFICATES_CREATE: 'certificates:create',
CERTIFICATES_READ: 'certificates:read',
CERTIFICATES_UPDATE: 'certificates:update',
CERTIFICATES_DELETE: 'certificates:delete',
CERTIFICATES_SEARCH: 'certificates:search',
// Files permissions
FILES_UPLOAD: 'files:upload',
FILES_READ: 'files:read',
FILES_DELETE: 'files:delete',
// Activity logs permissions
LOGS_READ: 'logs:read',
LOGS_SEARCH: 'logs:search',
// Contact inquiries (website form)
CONTACT_INQUIRIES_READ: 'contact_inquiries:read',
CONTACT_INQUIRIES_UPDATE: 'contact_inquiries:update'
};
const ALL_PERMISSIONS = Object.values(PERMISSIONS);
module.exports = {
PERMISSIONS,
ALL_PERMISSIONS
};