create-steve-rogers 1.0.0 → 1.0.2

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 (94) hide show
  1. package/apps/SFMS/.env +9 -0
  2. package/apps/SFMS/README.md +0 -0
  3. package/apps/SFMS/backend/.env +9 -0
  4. package/apps/SFMS/backend/.env.example +9 -0
  5. package/apps/SFMS/backend/package-lock.json +1580 -0
  6. package/apps/SFMS/backend/package.json +23 -0
  7. package/apps/SFMS/backend/src/config/database.js +7 -0
  8. package/apps/SFMS/backend/src/config/env.js +35 -0
  9. package/apps/SFMS/backend/src/middleware/authMiddleware.js +32 -0
  10. package/apps/SFMS/backend/src/models/Payment.js +12 -0
  11. package/apps/SFMS/backend/src/models/Student.js +12 -0
  12. package/apps/SFMS/backend/src/models/User.js +13 -0
  13. package/apps/SFMS/backend/src/routes/authRoutes.js +93 -0
  14. package/apps/SFMS/backend/src/routes/paymentRoutes.js +117 -0
  15. package/apps/SFMS/backend/src/routes/reportRoutes.js +59 -0
  16. package/apps/SFMS/backend/src/routes/studentRoutes.js +79 -0
  17. package/apps/SFMS/backend/src/server.js +34 -0
  18. package/apps/SFMS/frontend/.env.example +8 -0
  19. package/apps/SFMS/frontend/dist/assets/index-B08X8imN.css +1 -0
  20. package/apps/SFMS/frontend/dist/assets/index-DVO0_wcb.js +67 -0
  21. package/apps/SFMS/frontend/dist/favicon.svg +4 -0
  22. package/apps/SFMS/frontend/dist/index.html +20 -0
  23. package/apps/SFMS/frontend/index.html +19 -0
  24. package/apps/SFMS/frontend/package-lock.json +2667 -0
  25. package/apps/SFMS/frontend/package.json +23 -0
  26. package/apps/SFMS/frontend/postcss.config.js +6 -0
  27. package/apps/SFMS/frontend/public/favicon.svg +4 -0
  28. package/apps/SFMS/frontend/src/App.jsx +41 -0
  29. package/apps/SFMS/frontend/src/api/apiClient.js +41 -0
  30. package/apps/SFMS/frontend/src/components/AppLayout.jsx +60 -0
  31. package/apps/SFMS/frontend/src/context/AuthContext.jsx +79 -0
  32. package/apps/SFMS/frontend/src/index.css +229 -0
  33. package/apps/SFMS/frontend/src/main.jsx +16 -0
  34. package/apps/SFMS/frontend/src/pages/DashboardPage.jsx +82 -0
  35. package/apps/SFMS/frontend/src/pages/LoginPage.jsx +142 -0
  36. package/apps/SFMS/frontend/src/pages/PaymentsPage.jsx +269 -0
  37. package/apps/SFMS/frontend/src/pages/ReportsPage.jsx +114 -0
  38. package/apps/SFMS/frontend/src/pages/StudentsPage.jsx +257 -0
  39. package/apps/SFMS/frontend/tailwind.config.js +21 -0
  40. package/apps/SFMS/frontend/vite.config.js +35 -0
  41. package/apps/SIMS/.env +4 -0
  42. package/apps/SIMS/README.md +138 -0
  43. package/apps/SIMS/backend/.env +4 -0
  44. package/apps/SIMS/backend/.env.example +4 -0
  45. package/apps/SIMS/backend/package-lock.json +1600 -0
  46. package/apps/SIMS/backend/package.json +22 -0
  47. package/apps/SIMS/backend/src/config/db.js +9 -0
  48. package/apps/SIMS/backend/src/controllers/authController.js +93 -0
  49. package/apps/SIMS/backend/src/controllers/simsReportController.js +94 -0
  50. package/apps/SIMS/backend/src/controllers/sparePartController.js +41 -0
  51. package/apps/SIMS/backend/src/controllers/stockInController.js +45 -0
  52. package/apps/SIMS/backend/src/controllers/stockOutController.js +123 -0
  53. package/apps/SIMS/backend/src/middleware/auth.js +8 -0
  54. package/apps/SIMS/backend/src/models/SparePart.js +17 -0
  55. package/apps/SIMS/backend/src/models/StockIn.js +16 -0
  56. package/apps/SIMS/backend/src/models/StockOut.js +18 -0
  57. package/apps/SIMS/backend/src/models/User.js +11 -0
  58. package/apps/SIMS/backend/src/routes/authRoutes.js +12 -0
  59. package/apps/SIMS/backend/src/routes/simsReportRoutes.js +8 -0
  60. package/apps/SIMS/backend/src/routes/sparePartRoutes.js +8 -0
  61. package/apps/SIMS/backend/src/routes/stockInRoutes.js +8 -0
  62. package/apps/SIMS/backend/src/routes/stockOutRoutes.js +10 -0
  63. package/apps/SIMS/backend/src/server.js +62 -0
  64. package/apps/SIMS/backend/src/utils/passwordPolicy.js +10 -0
  65. package/apps/SIMS/backend/src/utils/sparePartHelpers.js +5 -0
  66. package/apps/SIMS/frontend/dist/assets/index-3hv-vGL2.css +2 -0
  67. package/apps/SIMS/frontend/dist/assets/index-T8XT7M6y.js +19 -0
  68. package/apps/SIMS/frontend/dist/index.html +14 -0
  69. package/apps/SIMS/frontend/index.html +13 -0
  70. package/apps/SIMS/frontend/package-lock.json +3053 -0
  71. package/apps/SIMS/frontend/package.json +31 -0
  72. package/apps/SIMS/frontend/src/App.jsx +112 -0
  73. package/apps/SIMS/frontend/src/api/authApi.js +7 -0
  74. package/apps/SIMS/frontend/src/api/client.js +8 -0
  75. package/apps/SIMS/frontend/src/api/simsReportApi.js +5 -0
  76. package/apps/SIMS/frontend/src/api/sparePartsApi.js +4 -0
  77. package/apps/SIMS/frontend/src/api/stockInApi.js +4 -0
  78. package/apps/SIMS/frontend/src/api/stockOutApi.js +6 -0
  79. package/apps/SIMS/frontend/src/api/usersApi.js +3 -0
  80. package/apps/SIMS/frontend/src/components/AppLayout.jsx +60 -0
  81. package/apps/SIMS/frontend/src/index.css +737 -0
  82. package/apps/SIMS/frontend/src/main.jsx +13 -0
  83. package/apps/SIMS/frontend/src/pages/DashboardPage.jsx +179 -0
  84. package/apps/SIMS/frontend/src/pages/LoginPage.jsx +75 -0
  85. package/apps/SIMS/frontend/src/pages/RegisterPage.jsx +78 -0
  86. package/apps/SIMS/frontend/src/pages/ReportsPage.jsx +108 -0
  87. package/apps/SIMS/frontend/src/pages/ResetPasswordPage.jsx +75 -0
  88. package/apps/SIMS/frontend/src/pages/SparePartPage.jsx +128 -0
  89. package/apps/SIMS/frontend/src/pages/StockInPage.jsx +100 -0
  90. package/apps/SIMS/frontend/src/pages/StockOutPage.jsx +206 -0
  91. package/apps/SIMS/frontend/src/utils/passwordPolicy.js +8 -0
  92. package/apps/SIMS/frontend/vite.config.js +8 -0
  93. package/apps/config.js +13 -0
  94. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "sims-frontend",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "lint": "eslint .",
10
+ "preview": "vite preview"
11
+ },
12
+ "dependencies": {
13
+ "@tailwindcss/vite": "^4.2.4",
14
+ "axios": "^1.15.2",
15
+ "react": "^19.2.5",
16
+ "react-dom": "^19.2.5",
17
+ "react-router-dom": "^7.14.2",
18
+ "tailwindcss": "^4.2.4"
19
+ },
20
+ "devDependencies": {
21
+ "@eslint/js": "^10.0.1",
22
+ "@types/react": "^19.2.14",
23
+ "@types/react-dom": "^19.2.3",
24
+ "@vitejs/plugin-react": "^6.0.1",
25
+ "eslint": "^10.2.0",
26
+ "eslint-plugin-react-hooks": "^7.1.1",
27
+ "eslint-plugin-react-refresh": "^0.5.2",
28
+ "globals": "^17.5.0",
29
+ "vite": "^8.0.10"
30
+ }
31
+ }
@@ -0,0 +1,112 @@
1
+ import { useEffect, useState } from "react";
2
+ import { Navigate, Route, Routes } from "react-router-dom";
3
+ import AppLayout from "./components/AppLayout";
4
+ import LoginPage from "./pages/LoginPage";
5
+ import RegisterPage from "./pages/RegisterPage";
6
+ import ResetPasswordPage from "./pages/ResetPasswordPage";
7
+ import DashboardPage from "./pages/DashboardPage";
8
+ import SparePartPage from "./pages/SparePartPage";
9
+ import StockInPage from "./pages/StockInPage";
10
+ import StockOutPage from "./pages/StockOutPage";
11
+ import ReportsPage from "./pages/ReportsPage";
12
+ import { fetchCurrentUser, logoutUser } from "./api/authApi";
13
+
14
+ function ProtectedLayout({ isAuthenticated, username, onLogout }) {
15
+ if (!isAuthenticated) {
16
+ return <Navigate to="/login" replace />;
17
+ }
18
+ return <AppLayout onLogout={onLogout} username={username} />;
19
+ }
20
+
21
+ function PublicRoute({ isAuthenticated, children }) {
22
+ if (isAuthenticated) {
23
+ return <Navigate to="/dashboard" replace />;
24
+ }
25
+ return children;
26
+ }
27
+
28
+ function App() {
29
+ const [isAuthenticated, setIsAuthenticated] = useState(false);
30
+ const [username, setUsername] = useState("");
31
+ const [loading, setLoading] = useState(true);
32
+
33
+ useEffect(() => {
34
+ (async () => {
35
+ try {
36
+ const r = await fetchCurrentUser();
37
+ setIsAuthenticated(true);
38
+ setUsername(r.data.username);
39
+ } catch {
40
+ setIsAuthenticated(false);
41
+ } finally {
42
+ setLoading(false);
43
+ }
44
+ })();
45
+ }, []);
46
+
47
+ const handleLogout = async () => {
48
+ await logoutUser();
49
+ setIsAuthenticated(false);
50
+ setUsername("");
51
+ };
52
+
53
+ if (loading) {
54
+ return <div className="p-8 text-center text-slate-600">Checking session…</div>;
55
+ }
56
+
57
+ return (
58
+ <Routes>
59
+ <Route
60
+ path="/login"
61
+ element={
62
+ <PublicRoute isAuthenticated={isAuthenticated}>
63
+ <LoginPage
64
+ onLoginSuccess={(name) => {
65
+ setIsAuthenticated(true);
66
+ setUsername(name);
67
+ }}
68
+ />
69
+ </PublicRoute>
70
+ }
71
+ />
72
+ <Route
73
+ path="/register"
74
+ element={
75
+ <PublicRoute isAuthenticated={isAuthenticated}>
76
+ <RegisterPage />
77
+ </PublicRoute>
78
+ }
79
+ />
80
+ <Route
81
+ path="/reset-password"
82
+ element={
83
+ <PublicRoute isAuthenticated={isAuthenticated}>
84
+ <ResetPasswordPage />
85
+ </PublicRoute>
86
+ }
87
+ />
88
+ <Route
89
+ element={
90
+ <ProtectedLayout
91
+ isAuthenticated={isAuthenticated}
92
+ username={username}
93
+ onLogout={handleLogout}
94
+ />
95
+ }
96
+ >
97
+ <Route path="/dashboard" element={<DashboardPage />} />
98
+ <Route path="/spare-part" element={<SparePartPage />} />
99
+ <Route path="/stock-in" element={<StockInPage />} />
100
+ <Route path="/stock-out" element={<StockOutPage />} />
101
+ <Route path="/reports" element={<ReportsPage />} />
102
+ <Route path="/" element={<Navigate to="/dashboard" replace />} />
103
+ </Route>
104
+ <Route
105
+ path="*"
106
+ element={<Navigate to={isAuthenticated ? "/dashboard" : "/login"} replace />}
107
+ />
108
+ </Routes>
109
+ );
110
+ }
111
+
112
+ export default App;
@@ -0,0 +1,7 @@
1
+ import api from "./client";
2
+
3
+ export const registerUser = (payload) => api.post("/auth/register", payload);
4
+ export const loginUser = (payload) => api.post("/auth/login", payload);
5
+ export const recoverPassword = (payload) => api.post("/auth/recover", payload);
6
+ export const logoutUser = () => api.post("/auth/logout");
7
+ export const fetchCurrentUser = () => api.get("/auth/me");
@@ -0,0 +1,8 @@
1
+ import axios from "axios";
2
+
3
+ const api = axios.create({
4
+ baseURL: "http://localhost:5001/api",
5
+ withCredentials: true,
6
+ });
7
+
8
+ export default api;
@@ -0,0 +1,5 @@
1
+ import api from "./client";
2
+
3
+ export const getDailyStockStatus = (date) =>
4
+ api.get("/reports/daily-stock-status", { params: { date } });
5
+ export const getDailyStockOut = (date) => api.get("/reports/daily-stockout", { params: { date } });
@@ -0,0 +1,4 @@
1
+ import api from "./client";
2
+
3
+ export const getSpareParts = () => api.get("/spare-parts");
4
+ export const createSparePart = (payload) => api.post("/spare-parts", payload);
@@ -0,0 +1,4 @@
1
+ import api from "./client";
2
+
3
+ export const getStockIn = () => api.get("/stock-in");
4
+ export const createStockIn = (payload) => api.post("/stock-in", payload);
@@ -0,0 +1,6 @@
1
+ import api from "./client";
2
+
3
+ export const getStockOut = () => api.get("/stock-out");
4
+ export const createStockOut = (payload) => api.post("/stock-out", payload);
5
+ export const updateStockOut = (id, payload) => api.put(`/stock-out/${id}`, payload);
6
+ export const deleteStockOut = (id) => api.delete(`/stock-out/${id}`);
@@ -0,0 +1,3 @@
1
+ import { loginUser, registerUser, recoverPassword, fetchCurrentUser, logoutUser } from "./authApi";
2
+
3
+ export { loginUser, registerUser, recoverPassword, fetchCurrentUser, logoutUser };
@@ -0,0 +1,60 @@
1
+ import { Link, NavLink, Outlet } from "react-router-dom";
2
+
3
+ function AppLayout({ onLogout, username }) {
4
+ const linkClass = ({ isActive }) => `app-nav-link ${isActive ? "app-nav-link-active" : ""}`;
5
+
6
+ return (
7
+ <div className="app-shell">
8
+ <aside className="app-sidebar">
9
+ <div className="app-brand-block">
10
+ <Link to="/spare-part" className="app-brand">
11
+ <span className="app-brand-mark">SI</span>
12
+ <span>
13
+ <span className="app-brand-name">SIMS</span>
14
+ <span className="app-brand-caption">Inventory console</span>
15
+ </span>
16
+ </Link>
17
+ </div>
18
+
19
+ <nav className="app-nav" aria-label="Main navigation">
20
+ <NavLink to="/dashboard" className={linkClass}>
21
+ <span className="app-nav-icon">00</span>
22
+ Dashboard
23
+ </NavLink>
24
+ <NavLink to="/spare-part" className={linkClass}>
25
+ <span className="app-nav-icon">01</span>
26
+ Spare Part
27
+ </NavLink>
28
+ <NavLink to="/stock-in" className={linkClass}>
29
+ <span className="app-nav-icon">02</span>
30
+ Stock In
31
+ </NavLink>
32
+ <NavLink to="/stock-out" className={linkClass}>
33
+ <span className="app-nav-icon">03</span>
34
+ Stock Out
35
+ </NavLink>
36
+ <NavLink to="/reports" className={linkClass}>
37
+ <span className="app-nav-icon">04</span>
38
+ Reports
39
+ </NavLink>
40
+ </nav>
41
+
42
+ <div className="app-sidebar-footer">
43
+ <div className="app-user">
44
+ <span className="app-user-label">Signed in</span>
45
+ <strong>{username}</strong>
46
+ </div>
47
+ <button type="button" onClick={onLogout} className="app-logout">
48
+ Logout
49
+ </button>
50
+ </div>
51
+ </aside>
52
+
53
+ <main className="app-main">
54
+ <Outlet />
55
+ </main>
56
+ </div>
57
+ );
58
+ }
59
+
60
+ export default AppLayout;