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.
- package/.env.example +13 -0
- package/backend-project/README.md +133 -0
- package/backend-project/package-lock.json +2559 -0
- package/backend-project/package.json +25 -0
- package/backend-project/server.js +28 -0
- package/backend-project/src/app.js +84 -0
- package/backend-project/src/config/app.config.js +72 -0
- package/backend-project/src/config/db.js +20 -0
- package/backend-project/src/config/env.js +19 -0
- package/backend-project/src/middleware/auth.middleware.js +33 -0
- package/backend-project/src/middleware/error.middleware.js +19 -0
- package/backend-project/src/modules/_example/example.controller.js +82 -0
- package/backend-project/src/modules/_example/example.model.js +47 -0
- package/backend-project/src/modules/_example/example.routes.js +43 -0
- package/backend-project/src/modules/_example/example.service.js +58 -0
- package/backend-project/src/modules/auth/auth.controller.js +47 -0
- package/backend-project/src/modules/auth/auth.routes.js +16 -0
- package/backend-project/src/modules/auth/auth.service.js +57 -0
- package/backend-project/src/modules/auth/user.model.js +41 -0
- package/backend-project/src/modules/department/department.controller.js +54 -0
- package/backend-project/src/modules/department/department.model.js +10 -0
- package/backend-project/src/modules/department/department.routes.js +15 -0
- package/backend-project/src/modules/department/department.service.js +29 -0
- package/backend-project/src/modules/employee/employee.controller.js +63 -0
- package/backend-project/src/modules/employee/employee.model.js +15 -0
- package/backend-project/src/modules/employee/employee.routes.js +16 -0
- package/backend-project/src/modules/employee/employee.service.js +30 -0
- package/backend-project/src/modules/excel/excel.controller.js +61 -0
- package/backend-project/src/modules/excel/excel.routes.js +13 -0
- package/backend-project/src/modules/excel/excel.service.js +303 -0
- package/backend-project/src/modules/reports/reports.controller.js +41 -0
- package/backend-project/src/modules/reports/reports.routes.js +10 -0
- package/backend-project/src/modules/salary/salary.controller.js +70 -0
- package/backend-project/src/modules/salary/salary.model.js +23 -0
- package/backend-project/src/modules/salary/salary.routes.js +16 -0
- package/backend-project/src/modules/salary/salary.service.js +44 -0
- package/backend-project/src/seed.js +36 -0
- package/backend-project/src/utils/response.js +35 -0
- package/backend-project/src/utils/token.js +27 -0
- package/bin/epms.js +161 -0
- package/frontend-project/README.md +16 -0
- package/frontend-project/dist/assets/index-B08ICGra.js +20 -0
- package/frontend-project/dist/assets/index-D_cqT2Z6.css +1 -0
- package/frontend-project/dist/car.jfif +0 -0
- package/frontend-project/dist/favicon.svg +1 -0
- package/frontend-project/dist/icons.svg +24 -0
- package/frontend-project/dist/index.html +14 -0
- package/frontend-project/dist/logo.png +0 -0
- package/frontend-project/eslint.config.js +21 -0
- package/frontend-project/index.html +13 -0
- package/frontend-project/package-lock.json +3660 -0
- package/frontend-project/package.json +33 -0
- package/frontend-project/postcss.config.js +6 -0
- package/frontend-project/tailwind.config.js +15 -0
- package/frontend-project/vite.config.js +8 -0
- 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
|
+
```
|