alpe-temp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/.env.example +13 -0
  2. package/backend-project/README.md +133 -0
  3. package/backend-project/package-lock.json +2559 -0
  4. package/backend-project/package.json +25 -0
  5. package/backend-project/server.js +28 -0
  6. package/backend-project/src/app.js +84 -0
  7. package/backend-project/src/config/app.config.js +72 -0
  8. package/backend-project/src/config/db.js +20 -0
  9. package/backend-project/src/config/env.js +19 -0
  10. package/backend-project/src/middleware/auth.middleware.js +33 -0
  11. package/backend-project/src/middleware/error.middleware.js +19 -0
  12. package/backend-project/src/modules/_example/example.controller.js +82 -0
  13. package/backend-project/src/modules/_example/example.model.js +47 -0
  14. package/backend-project/src/modules/_example/example.routes.js +43 -0
  15. package/backend-project/src/modules/_example/example.service.js +58 -0
  16. package/backend-project/src/modules/auth/auth.controller.js +47 -0
  17. package/backend-project/src/modules/auth/auth.routes.js +16 -0
  18. package/backend-project/src/modules/auth/auth.service.js +57 -0
  19. package/backend-project/src/modules/auth/user.model.js +41 -0
  20. package/backend-project/src/modules/department/department.controller.js +54 -0
  21. package/backend-project/src/modules/department/department.model.js +10 -0
  22. package/backend-project/src/modules/department/department.routes.js +15 -0
  23. package/backend-project/src/modules/department/department.service.js +29 -0
  24. package/backend-project/src/modules/employee/employee.controller.js +63 -0
  25. package/backend-project/src/modules/employee/employee.model.js +15 -0
  26. package/backend-project/src/modules/employee/employee.routes.js +16 -0
  27. package/backend-project/src/modules/employee/employee.service.js +30 -0
  28. package/backend-project/src/modules/excel/excel.controller.js +61 -0
  29. package/backend-project/src/modules/excel/excel.routes.js +13 -0
  30. package/backend-project/src/modules/excel/excel.service.js +303 -0
  31. package/backend-project/src/modules/reports/reports.controller.js +41 -0
  32. package/backend-project/src/modules/reports/reports.routes.js +10 -0
  33. package/backend-project/src/modules/salary/salary.controller.js +70 -0
  34. package/backend-project/src/modules/salary/salary.model.js +23 -0
  35. package/backend-project/src/modules/salary/salary.routes.js +16 -0
  36. package/backend-project/src/modules/salary/salary.service.js +44 -0
  37. package/backend-project/src/seed.js +36 -0
  38. package/backend-project/src/utils/response.js +35 -0
  39. package/backend-project/src/utils/token.js +27 -0
  40. package/bin/epms.js +161 -0
  41. package/frontend-project/README.md +16 -0
  42. package/frontend-project/dist/assets/index-B08ICGra.js +20 -0
  43. package/frontend-project/dist/assets/index-D_cqT2Z6.css +1 -0
  44. package/frontend-project/dist/car.jfif +0 -0
  45. package/frontend-project/dist/favicon.svg +1 -0
  46. package/frontend-project/dist/icons.svg +24 -0
  47. package/frontend-project/dist/index.html +14 -0
  48. package/frontend-project/dist/logo.png +0 -0
  49. package/frontend-project/eslint.config.js +21 -0
  50. package/frontend-project/index.html +13 -0
  51. package/frontend-project/package-lock.json +3660 -0
  52. package/frontend-project/package.json +33 -0
  53. package/frontend-project/postcss.config.js +6 -0
  54. package/frontend-project/tailwind.config.js +15 -0
  55. package/frontend-project/vite.config.js +8 -0
  56. package/package.json +41 -0
package/.env.example ADDED
@@ -0,0 +1,13 @@
1
+ PORT=3000
2
+ NODE_ENV=development
3
+
4
+ MONGODB_URI=mongodb://localhost:27017/EPMS
5
+
6
+ JWT_SECRET=your-secret-key-change-this
7
+ JWT_EXPIRES_IN=7d
8
+ JWT_REFRESH_SECRET=your-refresh-secret-change-this
9
+ JWT_REFRESH_EXPIRES_IN=30d
10
+
11
+ BCRYPT_ROUNDS=12
12
+
13
+ EXCEL_OUTPUT_DIR=./exports
@@ -0,0 +1,133 @@
1
+ # EPMS - Employee Payroll Management System
2
+
3
+ ## Entity Relationship Diagram (ERD)
4
+
5
+ ```
6
+ ┌────────────────────────────────────────────────────────────────────────────┐
7
+ │ ENTITY RELATIONSHIP DIAGRAM │
8
+ │ SmartPark - EPMS │
9
+ └────────────────────────────────────────────────────────────────────────────┘
10
+
11
+ ┌─────────────────────┐ ┌─────────────────────┐
12
+ │ │ │ │
13
+ │ DEPARTMENT │ │ EMPLOYEE │
14
+ │ │ │ │
15
+ │ ┌─────────────────┐ │ │ ┌─────────────────┐ │
16
+ │ │ departmentCode │◄├─PK │ │ employeeNumber │◄├─PK
17
+ │ │ (VARCHAR) │ │ │ │ (VARCHAR) │ │
18
+ │ ├─────────────────┤ │ │ ├─────────────────┤ │
19
+ │ │ departmentName │ │ │ │ firstName │ │
20
+ │ ├─────────────────┤ │ │ ├─────────────────┤ │
21
+ │ │ grossSalary │ │ │ │ lastName │ │
22
+ │ └─────────────────┘ │ │ ├─────────────────┤ │
23
+ │ │ │ │ position │ │
24
+ │ 1 │ │ ├─────────────────┤ │
25
+ │ ┼─────────────┼──────────┼─│ address │ │
26
+ │ │ * │ ├─────────────────┤ │
27
+ │ │ │ │ telephone │ │
28
+ │ │ │ ├─────────────────┤ │
29
+ │ │ │ │ gender │ │
30
+ │ │ │ ├─────────────────┤ │
31
+ │ │ │ │ hiredDate │ │
32
+ │ │ │ ├─────────────────┤ │
33
+ │ │ │ │ departmentCode │◄├─FK ────┐
34
+ │ │ │ └─────────────────┘ │ │
35
+ └─────────────────────┘ └─────────┬───────────┘ │
36
+ │ │
37
+ │ 1 │
38
+ │ ┼ │
39
+ │ │ │
40
+ │ * │
41
+ │ │ │
42
+ ┌─────┴───────────┐ │
43
+ │ │ │
44
+ │ SALARY │ │
45
+ │ │ │
46
+ │ ┌─────────────┐ │ │
47
+ │ │ salaryID │◄├─PK │
48
+ │ │ (ObjectId)│ │ │
49
+ │ ├─────────────┤ │ │
50
+ │ │ employee │◄├─FK ────┘
51
+ │ ├─────────────┤ │
52
+ │ │ grossSalary │ │
53
+ │ ├─────────────┤ │
54
+ │ │ totalDeduct │ │
55
+ │ ├─────────────┤ │
56
+ │ │ netSalary │ │
57
+ │ ├─────────────┤ │
58
+ │ │ month │ │
59
+ │ └─────────────┘ │
60
+ └─────────────────┘
61
+
62
+
63
+ ──── Relationship Summary ────────────────────────────────────────────────────
64
+
65
+ DEPARTMENT ──1───*── EMPLOYEE
66
+ One department can have many employees.
67
+ An employee belongs to exactly one department.
68
+
69
+ EMPLOYEE ──1───*── SALARY
70
+ One employee can have many salary records (one per month).
71
+ A salary record belongs to exactly one employee.
72
+
73
+
74
+ ──── Cardinality Symbols ─────────────────────────────────────────────────────
75
+
76
+ ┼ or 1 = One (mandatory one)
77
+ ────── = Relationship line
78
+ * or O = Many (zero or many)
79
+
80
+
81
+ ──── Entity Attributes ───────────────────────────────────────────────────────
82
+
83
+ DEPARTMENT
84
+ ┌────────────────┬────────────┬──────────────────────────────────────┐
85
+ │ Attribute │ Type │ Constraint │
86
+ ├────────────────┼────────────┼──────────────────────────────────────┤
87
+ │ departmentCode │ VARCHAR │ PRIMARY KEY, UNIQUE, NOT NULL │
88
+ │ departmentName │ VARCHAR │ NOT NULL │
89
+ │ grossSalary │ NUMBER │ NOT NULL │
90
+ └────────────────┴────────────┴──────────────────────────────────────┘
91
+
92
+ EMPLOYEE
93
+ ┌────────────────┬────────────┬──────────────────────────────────────┐
94
+ │ Attribute │ Type │ Constraint │
95
+ ├────────────────┼────────────┼──────────────────────────────────────┤
96
+ │ employeeNumber │ VARCHAR │ PRIMARY KEY, UNIQUE, NOT NULL │
97
+ │ firstName │ VARCHAR │ NOT NULL │
98
+ │ lastName │ VARCHAR │ NOT NULL │
99
+ │ position │ VARCHAR │ NOT NULL │
100
+ │ address │ VARCHAR │ │
101
+ │ telephone │ VARCHAR │ │
102
+ │ gender │ VARCHAR │ NOT NULL (male/female) │
103
+ │ hiredDate │ DATE │ NOT NULL │
104
+ │ departmentCode │ VARCHAR │ FOREIGN KEY → Department │
105
+ └────────────────┴────────────┴──────────────────────────────────────┘
106
+
107
+ SALARY
108
+ ┌────────────────┬────────────┬──────────────────────────────────────┐
109
+ │ Attribute │ Type │ Constraint │
110
+ ├────────────────┼────────────┼──────────────────────────────────────┤
111
+ │ salaryID │ ObjectId │ PRIMARY KEY, AUTO-GENERATED │
112
+ │ employee │ ObjectId │ FOREIGN KEY → Employee │
113
+ │ grossSalary │ NUMBER │ NOT NULL │
114
+ │ totalDeduction │ NUMBER │ NOT NULL │
115
+ │ netSalary │ NUMBER │ NOT NULL (grossSalary - deductions) │
116
+ │ month │ VARCHAR │ NOT NULL (YYYY-MM) │
117
+ └────────────────┴────────────┴──────────────────────────────────────┘
118
+ ```
119
+
120
+ ## Tech Stack
121
+ - **Backend:** Node.js, Express.js
122
+ - **Database:** MongoDB (Mongoose ODM)
123
+ - **Auth:** JWT (access + refresh tokens)
124
+ - **Frontend:** React 19, Vite, Tailwind CSS
125
+ - **API Client:** Axios
126
+
127
+ ## Setup
128
+ ```bash
129
+ npm install
130
+ cp .env.example .env # configure MongoDB URI
131
+ npm run seed # seed departments
132
+ npm run dev # start dev server
133
+ ```