diff --git a/backend/package-lock.json b/backend/package-lock.json index 044ba83..50ad582 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -9,6 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "cors": "^2.8.5", + "dotenv": "^17.2.1", "express": "^5.1.0" } }, @@ -122,6 +124,19 @@ "node": ">=6.6.0" } }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -148,6 +163,18 @@ "node": ">= 0.8" } }, + "node_modules/dotenv": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz", + "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -505,6 +532,15 @@ "node": ">= 0.6" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", diff --git a/backend/package.json b/backend/package.json index 03c47e8..545a0c8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,6 +11,8 @@ "license": "ISC", "description": "", "dependencies": { + "cors": "^2.8.5", + "dotenv": "^17.2.1", "express": "^5.1.0" } } diff --git a/backend/server.js b/backend/server.js index e69de29..a45c984 100644 --- a/backend/server.js +++ b/backend/server.js @@ -0,0 +1,26 @@ +import express from "express"; +import cors from "cors"; +import env from "dotenv"; +env.config(); +const app = express(); +const port = 10001; + +app.use(cors()); +app.use(express.urlencoded({ extended: true })); +app.set("view engine", "ejs"); +app.use(express.json()); + +app.get("/", (req, res) => { + res.render("index.ejs", { title: port }); +}); + +app.listen(port, () => { + console.log(`Server is running on port: ${port}`); +}); + +// error handling code +app.use((err, req, res, next) => { + // Log the error stack and send a generic error response + console.error(err.stack); + res.status(500).send("Something broke!"); +}); diff --git a/backend/views/index.ejs b/backend/views/index.ejs new file mode 100644 index 0000000..ed024d8 --- /dev/null +++ b/backend/views/index.ejs @@ -0,0 +1,11 @@ + + + + + + Backend + + + Backend + + \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 80326da..3c9487d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,8 +9,10 @@ "version": "0.0.0", "dependencies": { "@tailwindcss/vite": "^4.1.11", + "lucide-react": "^0.539.0", "react": "^19.1.1", "react-dom": "^19.1.1", + "react-router-dom": "^7.8.0", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", "tailwindcss-animate": "^1.0.7", @@ -2402,6 +2404,15 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -3436,6 +3447,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.539.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.539.0.tgz", + "integrity": "sha512-VVISr+VF2krO91FeuCrm1rSOLACQUYVy7NQkzrOty52Y8TlTPcXcMdQFj9bYzBgXbWCiywlwSZ3Z8u6a+6bMlg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -3793,6 +3813,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.0.tgz", + "integrity": "sha512-r15M3+LHKgM4SOapNmsH3smAizWds1vJ0Z9C4mWaKnT9/wD7+d/0jYcj6LmOvonkrO4Rgdyp4KQ/29gWN2i1eg==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.0.tgz", + "integrity": "sha512-ntInsnDVnVRdtSu6ODmTQ41cbluak/ENeTif7GBce0L6eztFg6/e1hXAysFQI8X25C8ipKmT9cClbJwxx3Kaqw==", + "license": "MIT", + "dependencies": { + "react-router": "7.8.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3891,6 +3949,12 @@ "semver": "bin/semver.js" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index e9f182c..a7bd765 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,8 +11,10 @@ }, "dependencies": { "@tailwindcss/vite": "^4.1.11", + "lucide-react": "^0.539.0", "react": "^19.1.1", "react-dom": "^19.1.1", + "react-router-dom": "^7.8.0", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", "tailwindcss-animate": "^1.0.7", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 1316a02..f9e3161 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,14 +1,16 @@ -import "./App.css"; -import Layout from "./layout/Layout"; +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import Admin from './components/Admin'; // Beispiel-Komponente +import Home from './components/Home'; // Beispiel-Komponente function App() { return ( - <> - -

Hello World

-
- + + + } /> + } /> + + ); } -export default App; +export default App; \ No newline at end of file diff --git a/frontend/src/components/Admin.tsx b/frontend/src/components/Admin.tsx new file mode 100644 index 0000000..3c2b47d --- /dev/null +++ b/frontend/src/components/Admin.tsx @@ -0,0 +1,11 @@ +import React from "react"; + +const Admin: React.FC = () => { + return ( + <> +

Admin

+ + ); +}; + +export default Admin; diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index 20f4c90..e5629a4 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -1,9 +1,26 @@ import React from "react"; +import { Award, RectangleEllipsis } from "lucide-react"; const Header: React.FC = () => { return ( -
-

Header

+
+
+
+ +

+ MCS Lose +

+
+ + + +
); }; diff --git a/frontend/src/components/Home.tsx b/frontend/src/components/Home.tsx new file mode 100644 index 0000000..9c47457 --- /dev/null +++ b/frontend/src/components/Home.tsx @@ -0,0 +1,15 @@ +import "../App.css"; +import Layout from "../layout/Layout"; +import MainForm from "./MainForm"; + +function App() { + return ( + <> + + + + + ); +} + +export default App; diff --git a/frontend/src/components/MainForm.tsx b/frontend/src/components/MainForm.tsx new file mode 100644 index 0000000..56bc11c --- /dev/null +++ b/frontend/src/components/MainForm.tsx @@ -0,0 +1,125 @@ +import React from "react"; + +const MainForm: React.FC = () => { + return ( +
+

Los registrieren

+

+ * alle Informationen werden benötigt +

+ +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +

+ Wenn Sie die Daten eines Loses bearbeiten möchten,{" "} + + kontaktieren Sie uns + + . +

+
+
+ ); +}; + +export default MainForm; diff --git a/frontend/src/layout/Layout.tsx b/frontend/src/layout/Layout.tsx index 7467f20..1536d61 100644 --- a/frontend/src/layout/Layout.tsx +++ b/frontend/src/layout/Layout.tsx @@ -1,5 +1,6 @@ import React from "react"; import Header from "../components/Header"; +import "../App.css"; type LayoutProps = { children: React.ReactNode;