25 Commits

Author SHA1 Message Date
1406f28f86 Merge branch 'dev' into debian12 2026-01-07 15:06:51 +01:00
c803e42a76 fixed docs api key example 2026-01-07 15:06:28 +01:00
76c0e6a64b added 404 2025-12-05 14:44:09 +01:00
ebda6424c7 fixed design of item table in the admin panel 2025-12-05 10:17:46 +01:00
38d1091e9b Merge branch 'dev' into debian12 2025-11-30 21:23:22 +01:00
f82efecb8c edited docker config 2025-11-30 21:21:21 +01:00
1f12bc8839 t 2025-11-30 21:17:36 +01:00
f19750f6f3 edited port config 2025-11-30 21:12:14 +01:00
808b3fd5c4 Merge branch 'dev' into debian12 2025-11-30 21:07:32 +01:00
e362515eff edited gitignore 2025-11-29 14:56:49 +01:00
0891598eb9 changed version info 2025-11-25 17:30:56 +01:00
39ff02f2e7 Merge branch 'dev' into debian12 2025-11-25 17:11:27 +01:00
cc67fb4f85 changed version info 2025-11-24 15:35:03 +01:00
75ff4aadc1 fixed color bug 2025-11-24 14:16:55 +01:00
6f998d07c1 Merge branch 'dev' into debian12 2025-11-23 21:52:34 +01:00
f2bb326040 Merge branch 'dev' into debian12 2025-11-23 21:40:11 +01:00
8c701db900 changed ports 2025-11-23 21:11:23 +01:00
d1664338a6 add networks configuration for frontend and backend services in docker-compose 2025-11-23 21:06:12 +01:00
1a2624cd9e again 2025-11-23 20:34:19 +01:00
a138190cc6 fixed bugs 2025-11-23 20:32:14 +01:00
993e0cd74b fixed bugs 2025-11-23 20:29:31 +01:00
dab004a7b6 changed docker config 2025-11-23 20:26:27 +01:00
d039336f39 Merge branch 'dev' into debian12 2025-11-23 20:20:41 +01:00
4c781e9325 changed ports 2025-11-23 20:12:41 +01:00
451e6b3646 published v2 2025-11-23 20:11:36 +01:00
11 changed files with 107 additions and 65 deletions

4
.gitignore vendored
View File

@@ -113,3 +113,7 @@ secrets/
keys/
ToDo.txt
# only in development branch
next-env.d.ts

View File

@@ -31,10 +31,10 @@ Include an API key in the route as `:key` parameter:
Example:
```http
GET /api/items/ABC123
GET /api/items/12345678
```
Where `ABC123` is your API key.
Where `12345678` is your API key.
The API key is validated server-side.
---
@@ -59,7 +59,7 @@ Returns a list of all items.
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
#### Authentication
@@ -70,14 +70,7 @@ Returns a list of all items.
#### Request Example
```http
GET /api/items/ABC123 HTTP/1.1
Host: backend.insta.the1s.de
```
or
```http
GET /api/items/dummyKey HTTP/1.1
GET /api/items/12345678 HTTP/1.1
Host: backend.insta.the1s.de
Authorization: Bearer <JWT_TOKEN>
```
@@ -123,7 +116,7 @@ Toggles `in_safe` between `0` and `1` for a given item.
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
- `:itemId` Item ID (integer)
#### Authentication
@@ -133,7 +126,7 @@ Toggles `in_safe` between `0` and `1` for a given item.
#### Request Example
```http
POST /api/change-state/ABC123/42 HTTP/1.1
POST /api/change-state/12345678/42 HTTP/1.1
Host: backend.insta.the1s.de
```
@@ -165,7 +158,7 @@ Fetch loan information by `loan_code`.
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
- `:loan_code` Loan code (string)
#### Authentication
@@ -175,7 +168,7 @@ Fetch loan information by `loan_code`.
#### Request Example
```http
GET /api/get-loan-by-code/ABC123/12345 HTTP/1.1
GET /api/get-loan-by-code/12345678/12345 HTTP/1.1
Host: backend.insta.the1s.de
```
@@ -214,7 +207,7 @@ Sets `returned_date = NOW()` on a loan and updates related items:
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
- `:loan_code` Loan code (string)
#### Authentication
@@ -224,7 +217,7 @@ Sets `returned_date = NOW()` on a loan and updates related items:
#### Request Example
```http
POST /api/set-return-date/ABC123/12345 HTTP/1.1
POST /api/set-return-date/12345678/12345 HTTP/1.1
Host: backend.insta.the1s.de
```
@@ -257,7 +250,7 @@ Sets `take_date = NOW()` on a loan and updates related items:
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
- `:loan_code` Loan code (string)
#### Authentication
@@ -267,7 +260,7 @@ Sets `take_date = NOW()` on a loan and updates related items:
#### Request Example
```http
POST /api/set-take-date/ABC123/LOAN-12345 HTTP/1.1
POST /api/set-take-date/12345678/LOAN-12345 HTTP/1.1
Host: backend.insta.the1s.de
```
@@ -297,7 +290,7 @@ Looks up an item by its `door_key`, toggles `in_safe`, and returns safe informat
#### Path Parameters
- `:key` API key (string)
- `:key` API key (8-digit number)
- `:doorKey` Door key/token (string) used by hardware to identify the locker.
#### Authentication
@@ -307,7 +300,7 @@ Looks up an item by its `door_key`, toggles `in_safe`, and returns safe informat
#### Request Example
```http
GET /api/open-door/ABC123/123 HTTP/1.1
GET /api/open-door/12345678/123 HTTP/1.1
Host: backend.insta.the1s.de
```

View File

@@ -16,6 +16,7 @@ import { Box, Flex } from "@chakra-ui/react";
import { Footer } from "./components/footer/Footer";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { API_BASE } from "@/config/api.config";
import { NotFoundPage } from "./pages/NotFoundPage";
const queryClient = new QueryClient();
@@ -83,6 +84,7 @@ function App() {
</Route>
<Route path="/login" element={<LoginPage />} />
<Route path="/not-found" element={<NotFoundPage />} />
</Routes>
</BrowserRouter>
</UserContext.Provider>

View File

@@ -1,15 +1,23 @@
"use client"
"use client";
import { ChakraProvider, defaultSystem } from "@chakra-ui/react"
import {
ColorModeProvider,
type ColorModeProviderProps,
} from "./color-mode"
import { ChakraProvider, defaultSystem } from "@chakra-ui/react";
import * as React from "react";
import type { ReactNode } from "react";
import { ColorModeProvider as ThemeColorModeProvider } from "./color-mode";
export function Provider(props: ColorModeProviderProps) {
export interface ColorModeProviderProps {
children: React.ReactNode;
}
export function ColorModeProvider({ children }: ColorModeProviderProps) {
// Wrap children with the real color-mode provider
return <ThemeColorModeProvider>{children}</ThemeColorModeProvider>;
}
export function Provider({ children }: { children: ReactNode }) {
return (
<ChakraProvider value={defaultSystem}>
<ColorModeProvider {...props} />
<ColorModeProvider>{children}</ColorModeProvider>
</ChakraProvider>
)
);
}

View File

@@ -0,0 +1,9 @@
import React from "react";
export const NotFoundPage = () => {
return (
<>
</>
)
};

View File

@@ -1,16 +1,23 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import svgr from "vite-plugin-svgr";
import tailwindcss from "@tailwindcss/vite";
import tsconfigPaths from "vite-tsconfig-paths";
import path from "node:path";
export default defineConfig({
plugins: [react(), svgr(), tailwindcss(), tsconfigPaths()],
plugins: [tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
},
},
server: {
host: "0.0.0.0",
port: 8001,
watch: {
usePolling: true,
allowedHosts: ["insta.the1s.de"],
port: 8101,
watch: { usePolling: true },
hmr: {
host: "insta.the1s.de",
port: 8101,
protocol: "wss",
},
},
});

View File

@@ -193,7 +193,12 @@ const ItemTable: React.FC = () => {
{/* make table fill available width, like UserTable */}
{!isLoading && (
<Table.Root size="sm" striped w="100%" style={{ tableLayout: "auto" }}>
<Table.Root
size="sm"
striped
w="100%"
style={{ tableLayout: "auto" }} // Spalten nach Content
>
<Table.Header>
<Table.Row>
<Table.ColumnHeader>
@@ -208,10 +213,10 @@ const ItemTable: React.FC = () => {
<Table.ColumnHeader>
<strong>Im Schließfach</strong>
</Table.ColumnHeader>
<Table.ColumnHeader>
<Table.ColumnHeader width="1%" whiteSpace="nowrap">
<strong>Schließfachnummer</strong>
</Table.ColumnHeader>
<Table.ColumnHeader>
<Table.ColumnHeader width="1%" whiteSpace="nowrap">
<strong>Schlüssel</strong>
</Table.ColumnHeader>
<Table.ColumnHeader>
@@ -226,7 +231,7 @@ const ItemTable: React.FC = () => {
<Table.ColumnHeader>
<strong>Dav **</strong>
</Table.ColumnHeader>
<Table.ColumnHeader>
<Table.ColumnHeader width="1%" whiteSpace="nowrap">
<strong>Aktionen</strong>
</Table.ColumnHeader>
</Table.Row>
@@ -314,7 +319,7 @@ const ItemTable: React.FC = () => {
<Table.Cell>{formatDateTime(item.entry_updated_at)}</Table.Cell>
<Table.Cell>{item.last_borrowed_person}</Table.Cell>
<Table.Cell>{item.currently_borrowing}</Table.Cell>
<Table.Cell>
<Table.Cell whiteSpace="nowrap">
<Button
onClick={() =>
handleEditItems(

View File

@@ -8,9 +8,13 @@ export default defineConfig({
plugins: [react(), svgr(), tailwindcss(), tsconfigPaths()],
server: {
host: "0.0.0.0",
port: 8003,
watch: {
usePolling: true,
allowedHosts: ["admin.insta.the1s.de"],
port: 8103,
watch: { usePolling: true },
hmr: {
host: "admin.insta.the1s.de",
port: 8103,
protocol: "wss",
},
},
});

View File

@@ -1,11 +1,11 @@
{
"backend-info": {
"version": "v2.0.1 (dev)"
"version": "v2.0.1"
},
"frontend-info": {
"version": "v2.0 (dev)"
"version": "v2.0"
},
"admin-panel-info": {
"version": "v1.3 (dev)"
"version": "v1.3"
}
}

View File

@@ -20,7 +20,7 @@ import apiRouter from "./routes/api/api.route.js";
env.config();
const app = express();
const port = 8004;
const port = 8102;
app.use(cors());
// Body-Parser VOR den Routen registrieren

View File

@@ -1,23 +1,29 @@
services:
# usr-frontend_v2:
# container_name: borrow_system-usr-frontend
# build: ./FrontendV2
# ports:
# - "8001:80"
# restart: unless-stopped
usr-frontend_v2:
container_name: borrow_system-usr-frontend
networks:
- proxynet
build: ./FrontendV2
ports:
- "8101:80"
restart: unless-stopped
# admin-frontend:
# container_name: borrow_system-admin-frontend
# build: ./admin
# ports:
# - "8003:80"
# restart: unless-stopped
admin-frontend:
container_name: borrow_system-admin-frontend
networks:
- proxynet
build: ./admin
ports:
- "8103:80"
restart: unless-stopped
backend_v2:
container_name: borrow_system-backend_v2
networks:
- proxynet
build: ./backendV2
ports:
- "8004:8004"
- "8102:8102"
environment:
NODE_ENV: production
DB_HOST: mysql_v2
@@ -30,6 +36,8 @@ services:
mysql_v2:
container_name: borrow_system-mysql-v2
networks:
- proxynet
image: mysql:8.0
restart: unless-stopped
environment:
@@ -39,9 +47,11 @@ services:
volumes:
- mysql-v2-data:/var/lib/mysql
- ./mysql-timezone.cnf:/etc/mysql/conf.d/timezone.cnf:ro
ports:
- "3310:3306"
volumes:
mysql-data:
mysql-v2-data:
networks:
proxynet:
external: true