From c04935a1171ff0ffdbe5109551d265ab24c92774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reinhard=20X=2E=20F=C3=BCrst?= Date: Sat, 9 May 2026 10:39:11 +0200 Subject: [PATCH] v1.4.0: Monatsfilter, Pagination, Rollenverwaltung, DB-Bereinigung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Liste: Monatsfilter mit ←/→ Navigation, Standard = aktueller Monat - Liste: Pagination (10 Einträge/Seite) - BEO-Auswahl filtert nur role='guide' - logbuch_objekte: ObjektName entfernt, JOIN auf objekte - utf8mb4 Migration und DB-Charset-Umstellung - SSH-Tunnel-Support: MySQL auf 127.0.0.1:3336 - phpMyAdmin unter /myadmin Co-Authored-By: Claude Sonnet 4.6 --- ACHTUNG.md | 10 +++ app/MainClient.tsx | 2 +- app/api/logbuch/route.ts | 25 ++++++- components/LogbuchList.tsx | 136 +++++++++++++++++++++++++++---------- dump_for_server.sh | 28 -------- logbuch_dump.sql | 22 +++--- package.json | 2 +- 7 files changed, 147 insertions(+), 78 deletions(-) create mode 100644 ACHTUNG.md delete mode 100755 dump_for_server.sh diff --git a/ACHTUNG.md b/ACHTUNG.md new file mode 100644 index 0000000..9220c9d --- /dev/null +++ b/ACHTUNG.md @@ -0,0 +1,10 @@ +### Zugriff zur Datenbank: + +Die Remote-Datenbank auf logbuch.fuerst-.stuttgart.de wird zum lokalen entwickeln über einen SSH-Tunner erreicht: + +~~~ + ssh -L 3336:localhost:3336 rxf@logbuch.fuerst-stuttgart.de -N +~~~ + +Dieser ist vor dem Starten des Programme einmal einzurichten!! + diff --git a/app/MainClient.tsx b/app/MainClient.tsx index e7e86ee..9d1b38c 100644 --- a/app/MainClient.tsx +++ b/app/MainClient.tsx @@ -157,7 +157,7 @@ export default function MainClient({ kuerzel, beoId, beoName }: Props) { kuppel={activeKuppel} refreshKey={refreshKey} onEdit={handleEdit} - limit={20} + limit={15} /> )} diff --git a/app/api/logbuch/route.ts b/app/api/logbuch/route.ts index b33a30c..2ee8de8 100644 --- a/app/api/logbuch/route.ts +++ b/app/api/logbuch/route.ts @@ -25,11 +25,30 @@ const LIST_SQL = export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); const kuppel = searchParams.get('kuppel') || 'West'; - const limit = Math.min(parseInt(searchParams.get('limit') || '20'), 100); + const limit = Math.min(parseInt(searchParams.get('limit') || '10'), 100); + const offset = Math.max(0, parseInt(searchParams.get('offset') || '0')); + const month = searchParams.get('month') || ''; + + let listWhere = 'WHERE l.Kuppel = ?'; + let countWhere = 'WHERE Kuppel = ?'; + let params: (string | number | null)[] = [kuppel]; + if (month && /^\d{4}-\d{2}$/.test(month)) { + const [y, m] = month.split('-').map(Number); + const start = `${y}-${String(m).padStart(2, '0')}-01`; + const nextM = m === 12 ? 1 : m + 1; + const nextY = m === 12 ? y + 1 : y; + const end = `${nextY}-${String(nextM).padStart(2, '0')}-01`; + listWhere += ' AND l.Beginn >= ? AND l.Beginn < ?'; + countWhere += ' AND Beginn >= ? AND Beginn < ?'; + params = [kuppel, start, end]; + } try { - const rows = await query(LIST_SQL + ` LIMIT ${limit}`, [kuppel]); - return NextResponse.json(rows); + const [countRows, entries] = await Promise.all([ + query('SELECT COUNT(*) AS total FROM logbuch ' + countWhere, params) as Promise<{ total: number }[]>, + query(LIST_SQL.replace('WHERE l.Kuppel = ?', listWhere) + ` LIMIT ${limit} OFFSET ${offset}`, params), + ]); + return NextResponse.json({ entries, total: (countRows as unknown as { total: number }[])[0]?.total ?? 0 }); } catch (error) { console.error('GET /api/logbuch:', error); return NextResponse.json({ error: 'Datenbankfehler' }, { status: 500 }); diff --git a/components/LogbuchList.tsx b/components/LogbuchList.tsx index 6e19ebb..91b0a60 100644 --- a/components/LogbuchList.tsx +++ b/components/LogbuchList.tsx @@ -13,6 +13,28 @@ interface Props { const pad = (n: number) => String(n).padStart(2, '0'); +const MONATE = ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']; + +function currentMonth() { + const d = new Date(); + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}`; +} + +function monthLabel(ym: string) { + const [y, m] = ym.split('-').map(Number); + return `${MONATE[m - 1]} ${y}`; +} + +function prevMonth(ym: string) { + const [y, m] = ym.split('-').map(Number); + return m === 1 ? `${y - 1}-12` : `${y}-${pad(m - 1)}`; +} + +function nextMonth(ym: string) { + const [y, m] = ym.split('-').map(Number); + return m === 12 ? `${y + 1}-01` : `${y}-${pad(m + 1)}`; +} + function formatDate(dt: string, short = false): string { if (!dt) return ''; const d = new Date(dt); @@ -28,25 +50,34 @@ function formatTime(dt: string): string { return `${pad(d.getHours())}:${pad(d.getMinutes())}`; } -export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, compact = false }: Props) { +export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 10, compact = false }: Props) { const [entries, setEntries] = useState([]); + const [total, setTotal] = useState(0); + const [page, setPage] = useState(0); + const [month, setMonth] = useState(compact ? '' : currentMonth()); const [loading, setLoading] = useState(true); const [deleteId, setDeleteId] = useState(null); const [error, setError] = useState(''); + useEffect(() => { setPage(0); }, [kuppel, refreshKey, month]); + useEffect(() => { setLoading(true); - fetch(`/api/logbuch?kuppel=${encodeURIComponent(kuppel)}&limit=${limit}`) + const offset = page * limit; + const url = `/api/logbuch?kuppel=${encodeURIComponent(kuppel)}&limit=${limit}&offset=${offset}` + + (month ? `&month=${encodeURIComponent(month)}` : ''); + fetch(url) .then((r) => { if (!r.ok) throw new Error(); return r.json(); }) - .then((data) => { setEntries(data); setLoading(false); }) + .then((data) => { setEntries(data.entries); setTotal(data.total); setLoading(false); }) .catch(() => { setError('Fehler beim Laden.'); setLoading(false); }); - }, [kuppel, refreshKey, limit]); + }, [kuppel, refreshKey, limit, page, month]); async function confirmDelete(id: number) { try { const res = await fetch(`/api/logbuch/${id}`, { method: 'DELETE' }); if (!res.ok) throw new Error(); setEntries((prev) => prev.filter((e) => e.ID !== id)); + setTotal((t) => t - 1); } catch { setError('Fehler beim Löschen.'); } finally { @@ -54,9 +85,39 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co } } - if (loading) return
Lade Einträge...
; - if (error) return
{error}
; - if (entries.length === 0) return
Keine Einträge vorhanden.
; + const monthNav = !compact && ( +
+ + setMonth(e.target.value)} + className="border border-gray-300 rounded-lg px-2 py-1 text-sm" + /> + + {month !== currentMonth() && ( + + )} +
+ ); + + const printHeader = !compact && ( +
+ Monat: {monthLabel(month)} +
+ ); const cell = compact ? 'px-1.5 py-1 border border-gray-200 text-xs' @@ -65,8 +126,13 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co ? 'px-1.5 py-1 border border-gray-300 text-xs font-semibold' : 'px-3 py-2 border border-gray-300'; + if (loading) return <>{monthNav}
Lade Einträge...
; + if (error) return <>{monthNav}
{error}
; + return (
+ {monthNav} + {printHeader}
@@ -90,7 +156,13 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co - {entries.map((e) => ( + {entries.length === 0 ? ( + + + + ) : entries.map((e) => ( {compact ? ( @@ -112,9 +184,7 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co - {!compact && ( - - )} + {!compact && } {!compact && ( )} ))} @@ -146,24 +206,30 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co
+ Keine Einträge für {monthLabel(month)}. +
{formatDate(e.Beginn, compact)}{e.Besucher || ''} {e.BEOs || '—'} {e.Objekte || '—'}{e.Bemerkungen || ''}{e.Bemerkungen || ''} {e.WetterTemp !== null && ( @@ -127,18 +197,8 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 20, co - - + +
+ {!compact && total > limit && ( +
+ + Seite {page + 1} von {Math.ceil(total / limit)} + +
+ )} + {deleteId !== null && (

Eintrag löschen?

Dieser Eintrag wird unwiderruflich gelöscht.

- - + +
diff --git a/dump_for_server.sh b/dump_for_server.sh deleted file mode 100755 index c6c4ed7..0000000 --- a/dump_for_server.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# Erstellt einen SQL-Dump der 5 App-Tabellen aus dem lokalen logbuch_mysql-Container. -# Die Datei logbuch_dump.sql dann auf den Server kopieren und dort server_import.sh ausführen. - -set -e - -CONTAINER="logbuch_mysql" -DB="sternwarte" -ROOT_PASS="SFluorit" -TABLES="beos objekte logbuch logbuch_beos logbuch_objekte" -OUTFILE="logbuch_dump.sql" - -echo "Exportiere Tabellen aus '$CONTAINER'..." -docker exec "$CONTAINER" mysqldump \ - -u root -p"$ROOT_PASS" \ - --single-transaction \ - --no-tablespaces \ - "$DB" $TABLES > "$OUTFILE" - -echo "Dump gespeichert: $OUTFILE ($(wc -c < "$OUTFILE" | tr -d ' ') Bytes)" -echo "" -echo "Nächste Schritte:" -echo " scp $OUTFILE user@server:/opt/logbuch/" -echo " scp docker-compose.prod.yml user@server:/opt/logbuch/" -echo " scp .env.prod.example user@server:/opt/logbuch/.env.prod" -echo " # Auf dem Server: .env.prod befüllen, dann:" -echo " # docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d" -echo " # ./server_import.sh" diff --git a/logbuch_dump.sql b/logbuch_dump.sql index 69a05bf..78308ed 100644 --- a/logbuch_dump.sql +++ b/logbuch_dump.sql @@ -43,6 +43,7 @@ CREATE TABLE `beos` ( `bemerkung` varchar(50) DEFAULT NULL, `pw` varchar(70) DEFAULT NULL, `MustChangePassword` tinyint(1) DEFAULT '1', + `role` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -53,7 +54,7 @@ CREATE TABLE `beos` ( LOCK TABLES `beos` WRITE; /*!40000 ALTER TABLE `beos` DISABLE KEYS */; -INSERT INTO `beos` VALUES (1,'Brückner','Steffen','Brü','Hegelstr. 10','71093','Weil im Schönbuch','brueckner@ccdastro.de',NULL,'070312627550',NULL,NULL,'070312627551',NULL,'m',2,'Mi II,Sa A',NULL,NULL,0),(2,'Dschida','Hans','HD','Rain 5','73660','Urbach','hansdschida1@gmail.com',NULL,'0718184322','015575359828','07195142599',NULL,NULL,'m',21,'Mi I,Sa C',NULL,'$2b$10$9EqDIW7xyTGsNE0NJqt5Pef1p/9C8FMj1tRfO0JPYkFaKouPey95W',0),(5,'Ess','Andrea','Ess','Beethovenweg 8','73630','Remshalden','andrea.ess@t-online.de',NULL,'071512703929',NULL,'07151566486',NULL,NULL,'w',NULL,NULL,NULL,NULL,0),(6,'Förnzler','Ulrich','Fö','Ober Str. 12','7ß190','Stuttgart','papa.foernzler@gmx.de',NULL,'07112865188','01778239801',NULL,NULL,NULL,'m',12,NULL,NULL,NULL,0),(7,'Fürst','Reinhard','rxf','Forststr. 66a','70176','Stuttgart','rexfue@gmail.com',NULL,'07116369409','01713129481',NULL,NULL,'','m',4,'Mo I,Sa C',NULL,'$2b$10$nmpF4s1rgeVF.6o1Nv7nk.OvAlcEJKsrAWeiqgESyBcKtvxw0fZNS',0),(8,'Gertz','Martin','MG','Buhlstr. 39/1','71384','Weinstadt','martin.gertz@gmx.de','martin.gertz@stihl.de','071519459521','015788298545','07151262545','071512682545',NULL,'m',5,'Sa B','HOBS',NULL,0),(9,'Meyer-Hamme','Olaf','MH','Eichenweg 29','73650','Winterbach','olaf.meyer-hamme@gmx.de',NULL,'071814808656','015221962790','07181977050',NULL,NULL,'m',22,'Mi II,Sa C',NULL,NULL,0),(10,'Idler','Rudolf','ID','Stettener Str. 26/1','71394','Kernen','r.idler@freenet.de',NULL,NULL,'01782097963','07119576017',NULL,NULL,'m',11,'Sa A',NULL,NULL,0),(11,'Nikolaizig','Jörg','JN','Grundweinberge 22','71642','Ludwigsburg','joniko@web.de',NULL,'07141257447','015122894226','071316444249',NULL,NULL,'m',10,'Mo II,Sa A',NULL,NULL,0),(15,'Weishaar','Christoph','CW','Leintelstr. 48','71336','Waiblingen-Bittenfeld','erfinderwerkstatt@t-online.de','c.weishaar@pilz.de ','071462840172',NULL,'07113409216','07113409434',NULL,'m',7,'Mi I,Sa B',NULL,'$2b$10$wSc60txkGL8cvNEZeF8IS.Yzfm8xvM1yJ/EbbRJRI5GkK3ERpkesW',0),(16,'Zoller','Matthias','Zo','Rosenstr. 49','71063','Sindelfingen','mazoller@gmx.de',NULL,'07031876466','01713752637','071197242618',NULL,NULL,'m',8,'Mo II,Sa A',NULL,NULL,0),(17,'Keller','Hans-Ulrich','HUK','Planetarium','','Stuttgart','hans-ulrich.keller@stuttgart.de','planetarium@stuttgart.de','07114403350',NULL,'07111629226','07112163912',NULL,'m',1,NULL,NULL,NULL,0),(18,'Gräber','Hubert','HHG','Im Brunnengarten 20','73630','Remshalden','hubert.graeber@t-online.de',NULL,'0718141612',NULL,NULL,'0718146145',NULL,'m',6,'Mo I,Sa C',NULL,NULL,0),(19,'Mitterhuber','Markus','MM','Robert-Koch-Str. 132','70565','Stuttgart','st155087@stud.uni-stuttgart.de','markusmitterhuber@outlook.de',NULL,'016092976568',NULL,NULL,NULL,'m',14,'Sa B',NULL,NULL,0),(20,'Schneider','Eva','ES','Baumblüte 20','73642','Welzheim','schneider-welzheim@t-online.de',NULL,'07182935424','01727168353',NULL,NULL,NULL,'w',NULL,'Sa B',NULL,NULL,0),(21,'Güssmann','Marc','GM','Spreeweg 8','71522','Backnang','marcguessmann@aol.com',NULL,' 071911873059',NULL,'0711951341200',NULL,NULL,'m',18,'Mo I,Sa A',NULL,NULL,0),(22,'Recknagel','Malin','MR','Stöcklestr. 36','72070','Tübingen ','malin.recknagel@freenet.de',NULL,NULL,'015776638250',NULL,NULL,NULL,'w',9,'','hat sich aus der Gruppe abgemeldet',NULL,0),(23,'Schuler','Bernd','SC','','','','bkschuler@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL,'m',NULL,'Mo I,Sa C',NULL,NULL,0),(24,'Riedl','Christoph','RC','Schillerstr. 30','73773','Aichwald','wp.riedl@my-steuerberatung.com',NULL,'',NULL,'0711 4116772','0711 4116773',NULL,'m',NULL,NULL,NULL,NULL,0),(25,'Nastos','Xeno','XN','','','','XNastos@t-online.de',NULL,NULL,NULL,NULL,NULL,NULL,'m',NULL,'Mi II,Sa B',NULL,NULL,0),(26,'Bernhard','Ralf','RB','Alpenrosenstr. 22','70563','Stuttgart','ralf_bernhard@web.de',NULL,'0711 4204151',NULL,NULL,NULL,NULL,'m',11,'Mo II,Sa A',NULL,NULL,0); +INSERT INTO `beos` VALUES (1,'Brückner','Steffen','Brü','Hegelstr. 10','71093','Weil im Schönbuch','brueckner@ccdastro.de',NULL,'070312627550',NULL,NULL,'070312627551',NULL,'m',2,'Mi II,Sa A',NULL,NULL,0,'guide, key'),(2,'Dschida','Hans','HD','Rain 5','73660','Urbach','hansdschida1@gmail.com',NULL,'0718184322','015575359828','07195142599',NULL,NULL,'m',21,'Mi I,Sa C',NULL,'$2b$10$AvNL4FSmTrD6.TfC3D5Y7uD8Erl1fShtpxy9FqajohRkwb6h1F1uS',0,'guide, key'),(5,'Ess','Andrea','Ess','Beethovenweg 8','73630','Remshalden','andrea.ess@t-online.de',NULL,'071512703929',NULL,'07151566486',NULL,NULL,'w',NULL,NULL,NULL,NULL,0,'guide'),(6,'Förnzler','Ulrich','Fö','Ober Str. 12','7ß190','Stuttgart','papa.foernzler@gmx.de',NULL,'07112865188','01778239801',NULL,NULL,NULL,'m',12,NULL,NULL,NULL,0,'key'),(7,'Fürst','Reinhard','rxf','Forststr. 66a','70176','Stuttgart','rexfue@gmail.com',NULL,'07116369409','01713129481',NULL,NULL,'','m',4,'Mo I,Sa C',NULL,'$2b$10$nmpF4s1rgeVF.6o1Nv7nk.OvAlcEJKsrAWeiqgESyBcKtvxw0fZNS',0,'guide, key, admin'),(8,'Gertz','Martin','MG','Buhlstr. 39/1','71384','Weinstadt','martin.gertz@gmx.de','martin.gertz@stihl.de','071519459521','015788298545','07151262545','071512682545',NULL,'m',5,'Sa B','HOBS','$2b$10$OWIMz/AFBURTz428C7CvB.NUXo2OuGfAU3nuGl/S.DESYeKcoIugm',0,'guide, key'),(9,'Meyer-Hamme','Olaf','MH','Eichenweg 29','73650','Winterbach','olaf.meyer-hamme@gmx.de',NULL,'071814808656','015221962790','07181977050',NULL,NULL,'m',22,'Mi II,Sa C',NULL,NULL,0,'guide, key'),(10,'Idler','Rudolf','ID','Stettener Str. 26/1','71394','Kernen','r.idler@freenet.de',NULL,NULL,'01782097963','07119576017',NULL,NULL,'m',11,'Sa A',NULL,NULL,0,'key'),(11,'Nikolaizig','Jörg','JN','Grundweinberge 22','71642','Ludwigsburg','joniko@web.de',NULL,'07141257447','015122894226','071316444249',NULL,NULL,'m',10,'Mo II,Sa A',NULL,'$2b$10$issn3Zd2Jp959ujM61S5gewaQPZzmEb7jSDyqVAMsCTYvCdNpNdkq',0,'guide, key'),(15,'Weishaar','Christoph','CW','Leintelstr. 48','71336','Waiblingen-Bittenfeld','erfinderwerkstatt@t-online.de','c.weishaar@pilz.de ','071462840172',NULL,'07113409216','07113409434',NULL,'m',7,'Mi I,Sa B',NULL,'$2b$10$wSc60txkGL8cvNEZeF8IS.Yzfm8xvM1yJ/EbbRJRI5GkK3ERpkesW',0,'guide, key'),(16,'Zoller','Matthias','Zo','Rosenstr. 49','71063','Sindelfingen','mazoller@gmx.de',NULL,'07031876466','01713752637','071197242618',NULL,NULL,'m',8,'Mo II,Sa A',NULL,NULL,0,'guide, key'),(17,'Keller','Hans-Ulrich','HUK','Planetarium','','Stuttgart','hans-ulrich.keller@stuttgart.de','planetarium@stuttgart.de','07114403350',NULL,'07111629226','07112163912',NULL,'m',1,NULL,NULL,'$2b$10$tyMkggLaVOwZMsetcFExK.kTjOATYWg0zBPp/BGVHy84CaCf7hIfa',0,'guide, key'),(18,'Gräber','Hubert','HHG','Im Brunnengarten 20','73630','Remshalden','hubert.graeber@t-online.de',NULL,'0718141612',NULL,NULL,'0718146145',NULL,'m',6,'Mo I,Sa C',NULL,'$2b$10$v.kI/NKI7jnhBGizQlagcOOyp679fBI2vcZ6d/ZF6htn9KAIgY176',0,'guide, key'),(19,'Mitterhuber','Markus','MM','Robert-Koch-Str. 132','70565','Stuttgart','st155087@stud.uni-stuttgart.de','markusmitterhuber@outlook.de',NULL,'016092976568',NULL,NULL,NULL,'m',14,'Sa B',NULL,NULL,0,'deleted'),(20,'Schneider','Eva','ES','Baumblüte 20','73642','Welzheim','schneider-welzheim@t-online.de',NULL,'07182935424','01727168353',NULL,NULL,NULL,'w',NULL,'Sa B',NULL,NULL,0,'guide, key'),(21,'Güssmann','Marc','GM','Spreeweg 8','71522','Backnang','marcguessmann@aol.com',NULL,' 071911873059',NULL,'0711951341200',NULL,NULL,'m',18,'Mo I,Sa A',NULL,'$2b$10$JJ3t80P.Km8FVtZKmiXpYuXEnzGSHLrvln3CGsCGidzJ2BKFMElLy',0,'guide, key'),(22,'Recknagel','Malin','MR','Stöcklestr. 36','72070','Tübingen ','malin.recknagel@freenet.de',NULL,NULL,'015776638250',NULL,NULL,NULL,'w',9,'','hat sich aus der Gruppe abgemeldet',NULL,0,'deleted'),(23,'Schuler','Bernd','SC','','','','bkschuler@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL,'m',NULL,'Mo I,Sa C',NULL,NULL,0,'guide'),(24,'Riedl','Christoph','RC','Schillerstr. 30','73773','Aichwald','wp.riedl@my-steuerberatung.com',NULL,'',NULL,'0711 4116772','0711 4116773',NULL,'m',NULL,NULL,NULL,NULL,0,NULL),(25,'Nastos','Xeno','XN','','','','XNastos@t-online.de',NULL,NULL,NULL,NULL,NULL,NULL,'m',NULL,'Mi II,Sa B',NULL,'$2b$10$wkwvzkZqhLJ8He2jXW9Ttu88I61f3JbghsRRIM0Dm7guxKRIY7EBC',0,'guide'),(26,'Bernhard','Ralf','RB','Alpenrosenstr. 22','70563','Stuttgart','ralf_bernhard@web.de',NULL,'0711 4204151',NULL,NULL,NULL,NULL,'m',11,'Mo II,Sa A',NULL,'$2b$10$n/YFHBS1EJoZP8W1JwT9XOKH9bW6V.UvGNOBHDtKHa/Bq8krtTBla',0,'guide, key'); /*!40000 ALTER TABLE `beos` ENABLE KEYS */; UNLOCK TABLES; @@ -71,7 +72,7 @@ CREATE TABLE `objekte` ( `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`ID`), UNIQUE KEY `Name` (`Name`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -80,7 +81,7 @@ CREATE TABLE `objekte` ( LOCK TABLES `objekte` WRITE; /*!40000 ALTER TABLE `objekte` DISABLE KEYS */; -INSERT INTO `objekte` VALUES (1,'Mond','2026-04-29 08:07:16','2026-04-27 15:44:00'),(2,'Jupiter','2026-04-29 08:07:16','2026-04-27 15:44:00'),(3,'M57','2026-04-28 11:39:17','2026-04-27 15:44:00'),(4,'Abend Stern','2026-04-28 11:35:55','2026-04-27 15:56:24'),(5,'eps Lyr','2026-04-27 18:34:44','2026-04-27 18:17:16'),(6,'beta Cyg','2026-04-28 11:39:17','2026-04-27 18:34:44'),(7,'M31','2026-04-28 11:39:17','2026-04-28 11:39:17'),(8,'M45','2026-04-29 08:07:16','2026-04-29 07:59:50'),(9,'Saturn','2026-04-29 08:07:16','2026-04-29 08:06:16'),(10,'M42','2026-04-29 08:07:16','2026-04-29 08:06:16'),(11,'alp Ori','2026-04-29 08:06:16','2026-04-29 08:06:16'),(12,'alpha Ori','2026-04-29 08:07:16','2026-04-29 08:07:16'); +INSERT INTO `objekte` VALUES (1,'Mond','2026-05-03 19:14:28','2026-04-27 15:44:00'),(2,'Jupiter','2026-05-03 19:27:25','2026-04-27 15:44:00'),(3,'M57','2026-05-03 16:40:23','2026-04-27 15:44:00'),(4,'Abend Stern','2026-04-28 11:35:55','2026-04-27 15:56:24'),(5,'eps Lyr','2026-04-27 18:34:44','2026-04-27 18:17:16'),(6,'beta Cyg','2026-04-28 11:39:17','2026-04-27 18:34:44'),(7,'M31','2026-05-03 16:47:00','2026-04-28 11:39:17'),(8,'M45','2026-05-03 19:27:25','2026-04-29 07:59:50'),(9,'Saturn','2026-05-02 08:07:36','2026-04-29 08:06:16'),(10,'M42','2026-05-03 19:27:25','2026-04-29 08:06:16'),(11,'alp Ori','2026-04-29 08:06:16','2026-04-29 08:06:16'),(12,'alpha Ori','2026-04-29 08:07:16','2026-04-29 08:07:16'),(13,'M44','2026-05-02 07:21:11','2026-05-01 07:29:14'),(14,'M82','2026-05-03 19:27:25','2026-05-01 07:39:27'),(15,'gam Leo','2026-05-03 19:19:41','2026-05-01 07:46:06'),(16,'chi+kap Per','2026-05-02 08:07:36','2026-05-01 07:46:06'),(17,'Sternbilder','2026-05-03 19:27:25','2026-05-01 07:46:06'),(18,'Uranus','2026-05-02 08:01:04','2026-05-02 07:57:26'),(19,'M81','2026-05-03 19:27:25','2026-05-02 07:57:26'),(20,'M37','2026-05-02 08:01:04','2026-05-02 08:01:04'),(21,'ISS','2026-05-02 08:01:04','2026-05-02 08:01:04'),(22,'NGC2392','2026-05-03 19:19:41','2026-05-03 16:34:25'),(23,'M1','2026-05-03 16:40:23','2026-05-03 16:34:25'),(24,'Mars','2026-05-03 16:40:23','2026-05-03 16:34:25'),(25,'Neptun','2026-05-03 19:14:28','2026-05-03 19:14:28'),(26,'Venus','2026-05-03 19:14:28','2026-05-03 19:14:28'),(27,'M97','2026-05-03 19:19:41','2026-05-03 19:16:32'),(28,'M3','2026-05-03 19:19:41','2026-05-03 19:16:32'),(29,'M13','2026-05-03 19:27:25','2026-05-03 19:25:42'),(30,'M35','2026-05-03 19:27:25','2026-05-03 19:25:42'); /*!40000 ALTER TABLE `objekte` ENABLE KEYS */; UNLOCK TABLES; @@ -104,10 +105,11 @@ CREATE TABLE `logbuch` ( `WetterDruck` decimal(7,1) DEFAULT NULL, `created_by` int DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `SonderName` varchar(200) DEFAULT NULL, PRIMARY KEY (`ID`), KEY `created_by` (`created_by`), CONSTRAINT `logbuch_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `beos` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -116,7 +118,7 @@ CREATE TABLE `logbuch` ( LOCK TABLES `logbuch` WRITE; /*!40000 ALTER TABLE `logbuch` DISABLE KEYS */; -INSERT INTO `logbuch` VALUES (1,'West','RF','2026-04-27 20:00:00','2026-04-27 22:00:00',22,'Test\n',15.7,68.6,1006.3,7,'2026-04-27 15:44:00'),(2,'West','RF','2026-04-27 17:44:00','2026-04-27 17:44:00',0,NULL,11.6,89.0,1016.6,7,'2026-04-27 15:45:19'),(3,'West','RF','2026-04-27 17:52:00','2026-04-27 17:52:00',22,NULL,22.8,55.1,993.8,7,'2026-04-27 15:56:24'),(4,'West','RF','2026-04-27 18:06:00','2026-04-27 18:06:00',6,NULL,11.0,67.2,1002.7,7,'2026-04-27 16:06:59'),(5,'West','RF','2026-04-27 20:16:00','2026-04-27 20:16:00',1,NULL,20.3,67.9,1014.8,2,'2026-04-27 18:17:16'),(6,'West','RF','2026-04-28 09:45:00','2026-04-28 09:00:00',0,NULL,12.2,83.1,1017.1,2,'2026-04-28 07:00:01'),(8,'West','RF','2026-04-28 09:15:00','2026-04-28 09:15:00',0,NULL,9.6,56.8,1000.3,2,'2026-04-28 07:02:13'),(9,'West','RF','2026-04-28 09:15:00','2026-04-28 09:15:00',0,NULL,9.6,56.8,1000.3,2,'2026-04-28 07:02:41'),(14,'Pluto','Beob','2024-01-10 18:30:00','2024-01-10 23:00:00',0,NULL,16.4,43.4,1015.3,15,'2026-04-29 07:59:50'),(15,'West','Sonst','2024-01-20 18:00:00','2024-01-20 19:45:00',3,'Private Führung',8.5,53.0,1001.2,2,'2026-04-29 08:06:16'); +INSERT INTO `logbuch` VALUES (16,'West','RF','2026-03-02 19:45:00','2026-03-02 21:45:00',25,NULL,7.0,85.0,1024.0,7,'2026-05-01 07:24:33',NULL),(17,'West','BEOS','2026-03-03 20:00:00','2026-03-03 21:30:00',0,NULL,0.0,0.0,0.0,18,'2026-05-01 07:26:45',NULL),(18,'West','RF','2026-03-04 19:45:00','2026-03-04 21:40:00',15,NULL,7.0,71.0,71.0,15,'2026-05-01 07:29:14',NULL),(19,'West','TD','2026-03-07 14:00:00','2026-03-07 17:00:00',0,'Techniktag - WK\n- Rolladenkasten gereinigt\n- USB- und LAN-Kabel für die Montierung eingezogen\n- Umalufzwischenraum gereinigt\n',16.0,43.0,1022.0,8,'2026-05-01 07:33:38',NULL),(20,'West','RF','2026-03-07 20:00:00','2026-03-07 22:00:00',21,NULL,8.0,66.0,1023.0,26,'2026-05-01 07:39:27',NULL),(21,'West','SF','2026-03-08 19:00:00','2026-03-08 21:00:00',4,NULL,10.0,68.0,1023.0,2,'2026-05-01 07:46:06',NULL),(23,'West','Beob','2026-03-12 22:30:00','2026-03-12 23:20:00',0,'Aufnahme Jupiter',6.0,77.0,1020.0,25,'2026-05-01 08:57:31',NULL),(26,'West','SF','2026-03-17 20:00:00','2026-03-17 21:30:00',25,'Vortrag und Einrichtung gezeigt',5.0,90.0,1023.0,8,'2026-05-02 07:48:27','Landfrauen'),(27,'West','RF','2026-03-18 19:30:00','2026-03-18 22:10:00',24,NULL,7.0,77.0,1023.0,15,'2026-05-02 07:57:26',NULL),(28,'West','SF','2026-03-19 19:30:00','2026-03-19 22:00:00',9,NULL,6.0,61.0,1021.0,2,'2026-05-02 08:07:36','Rene Leucht'),(32,'West','SF','2026-03-22 19:30:00','2026-03-22 22:20:00',4,NULL,6.0,64.0,1014.0,2,'2026-05-03 16:34:25','Kroboth'),(33,'West','TD','2026-03-23 19:30:00','2026-03-23 21:50:00',0,'Gespräch mit Installateuren der Fa. Günther für Splitgeräte, Spendenkasse und Schlüssel mitgenommen',9.0,69.0,1018.0,18,'2026-05-03 16:37:01',NULL),(34,'West','TD','2026-03-24 13:00:00','2026-03-24 14:00:00',0,'Lichtprojekt mit Fa. Helmer und Wölftl (Stadt. Welzheim)',16.0,49.0,1020.0,18,'2026-05-03 16:38:54',NULL),(35,'West','TD','2026-03-25 18:00:00','2026-03-25 19:00:00',0,'Kühlschrank und Drucker gekennzeichnet. Div. Aufräumarbeiten',2.0,92.0,1006.0,18,'2026-05-03 16:42:51',NULL),(36,'West','TD','2026-03-27 10:00:00','2026-03-27 12:00:00',0,'Splitgeräte ans WLAN. Account eingerichtet. Allsky lässt sich nicht betreiben, hängt.NAS in der OK funktioniert nicht. Unterstützung durch die Herren Wölfl und Scheibner',1.0,78.0,1024.0,18,'2026-05-03 16:45:05',NULL),(37,'West','RF','2026-03-23 19:30:00','2026-03-23 21:50:00',4,NULL,8.0,51.0,1022.0,2,'2026-05-03 16:47:00',NULL),(38,'West','Sonst','2026-03-28 15:30:00','2026-03-28 15:40:00',0,'Reinigungsmittel zur Sternwarte gebracht',0.0,0.0,0.0,8,'2026-05-03 16:48:32',NULL),(39,'West','ToT','2026-03-28 15:45:00','2026-03-28 17:00:00',0,NULL,1.0,92.0,1020.0,11,'2026-05-03 16:50:38',NULL),(40,'West','TD','2026-03-29 14:30:00','2026-03-29 16:00:00',1,'Inspektion',7.0,60.0,1026.0,17,'2026-05-03 18:23:39',NULL),(41,'West','TD','2026-03-29 16:30:00','2026-03-29 18:00:00',0,'NAS wieder gestarte, allg. Inspektion. Besprechung HUK Büro. Wetterstaion abgebaut. AllSky wieder funktionfähig gemcht, Spendekasse an e.Schneider übergebn',0.0,0.0,0.0,7,'2026-05-03 18:30:14',NULL),(43,'West','TD','2026-04-01 09:30:00','2026-04-01 12:30:00',0,'Weitere BEO: Sh (Silvia Schidhuber) WK-Steuerraum und Seminarraum gereinigt und ausgemistet',22.1,0.0,1010.0,2,'2026-05-03 18:35:47',NULL),(44,'West','RF','2026-03-01 21:00:00','2026-03-01 22:40:00',0,'Keine Besucher eingetragen !',22.2,0.0,1010.0,2,'2026-05-03 19:14:28',NULL),(45,'West','RF','2026-03-04 22:00:00','2026-03-04 23:35:00',2,NULL,22.2,0.0,1010.0,2,'2026-05-03 19:16:32',NULL),(46,'West','RF','2026-04-04 22:00:00','2026-04-04 23:35:00',2,NULL,10.1,0.0,994.0,2,'2026-05-03 19:19:41',NULL),(47,'West','SF','2026-04-07 21:00:00','2026-04-07 23:00:00',0,'keine Besucher eingetragen !',8.2,0.0,996.0,21,'2026-05-03 19:25:42','eigene Schüler'),(48,'West','RF','2026-04-08 21:00:00','2026-04-08 22:30:00',0,'Keine Besucher eingetragen',15.6,0.0,1014.0,15,'2026-05-03 19:27:04',NULL); /*!40000 ALTER TABLE `logbuch` ENABLE KEYS */; UNLOCK TABLES; @@ -136,7 +138,7 @@ CREATE TABLE `logbuch_beos` ( KEY `BeoID` (`BeoID`), CONSTRAINT `logbuch_beos_ibfk_1` FOREIGN KEY (`LogbuchID`) REFERENCES `logbuch` (`ID`) ON DELETE CASCADE, CONSTRAINT `logbuch_beos_ibfk_2` FOREIGN KEY (`BeoID`) REFERENCES `beos` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=139 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -145,7 +147,7 @@ CREATE TABLE `logbuch_beos` ( LOCK TABLES `logbuch_beos` WRITE; /*!40000 ALTER TABLE `logbuch_beos` DISABLE KEYS */; -INSERT INTO `logbuch_beos` VALUES (1,1,7),(2,1,2),(3,1,23),(4,2,7),(5,2,21),(6,3,7),(7,3,9),(8,4,7),(9,4,15),(11,5,2),(12,6,2),(14,8,2),(15,9,2),(38,14,15),(40,15,2); +INSERT INTO `logbuch_beos` VALUES (76,16,23),(77,16,7),(78,17,23),(79,17,24),(80,17,17),(81,17,18),(82,17,8),(83,17,9),(84,17,26),(85,17,25),(87,18,15),(88,18,25),(89,19,5),(90,19,8),(91,19,26),(92,19,25),(93,20,26),(94,20,25),(95,21,2),(96,23,25),(105,27,15),(106,27,9),(107,26,5),(108,26,8),(109,28,2),(115,34,18),(116,33,18),(117,32,2),(118,35,18),(119,36,18),(120,37,2),(122,39,11),(123,40,17),(124,41,7),(125,41,2),(126,41,18),(127,38,8),(129,43,2),(130,43,18),(131,44,2),(132,44,25),(133,45,2),(134,46,2),(136,48,15),(137,48,25),(138,47,21); /*!40000 ALTER TABLE `logbuch_beos` ENABLE KEYS */; UNLOCK TABLES; @@ -166,7 +168,7 @@ CREATE TABLE `logbuch_objekte` ( KEY `ObjektID` (`ObjektID`), CONSTRAINT `logbuch_objekte_ibfk_1` FOREIGN KEY (`LogbuchID`) REFERENCES `logbuch` (`ID`) ON DELETE CASCADE, CONSTRAINT `logbuch_objekte_ibfk_2` FOREIGN KEY (`ObjektID`) REFERENCES `objekte` (`ID`) -) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=175 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -175,7 +177,7 @@ CREATE TABLE `logbuch_objekte` ( LOCK TABLES `logbuch_objekte` WRITE; /*!40000 ALTER TABLE `logbuch_objekte` DISABLE KEYS */; -INSERT INTO `logbuch_objekte` VALUES (1,1,1,'Mond'),(2,1,2,'Jupiter'),(3,1,3,'M57'),(4,2,2,'Jupiter'),(5,3,4,'Abend Stern'),(6,4,4,'Abend Stern'),(7,4,3,'M57'),(10,5,4,'Abend Stern'),(11,5,5,'eps Lyr'),(12,5,1,'Mond'),(13,5,6,'beta Cyg'),(19,14,8,'M45'),(26,15,2,'Jupiter'),(27,15,10,'M42'),(28,15,8,'M45'),(29,15,1,'Mond'),(30,15,9,'Saturn'),(31,15,12,'alpha Ori'); +INSERT INTO `logbuch_objekte` VALUES (55,16,2,'Jupiter'),(56,16,10,'M42'),(57,16,8,'M45'),(58,16,1,'Mond'),(59,18,2,'Jupiter'),(60,18,10,'M42'),(61,18,13,'M44'),(62,20,2,'Jupiter'),(63,20,10,'M42'),(64,20,8,'M45'),(65,20,14,'M82'),(66,21,16,'chi+kap Per'),(67,21,15,'gam Leo'),(68,21,2,'Jupiter'),(69,21,7,'M31'),(70,21,10,'M42'),(71,21,8,'M45'),(72,21,14,'M82'),(73,21,17,'Sternbilder'),(74,23,2,'Jupiter'),(85,27,2,'Jupiter'),(86,27,7,'M31'),(87,27,10,'M42'),(88,27,8,'M45'),(89,27,17,'Sternbilder'),(90,27,18,'Uranus'),(91,27,20,'M37'),(92,27,21,'ISS'),(93,28,15,'gam Leo'),(94,28,8,'M45'),(95,28,10,'M42'),(96,28,7,'M31'),(97,28,19,'M81'),(98,28,14,'M82'),(99,28,9,'Saturn'),(100,28,16,'chi+kap Per'),(101,28,17,'Sternbilder'),(112,32,15,'gam Leo'),(113,32,2,'Jupiter'),(114,32,23,'M1'),(115,32,10,'M42'),(116,32,8,'M45'),(117,32,3,'M57'),(118,32,24,'Mars'),(119,32,1,'Mond'),(120,32,22,'NGC2392'),(121,32,17,'Sternbilder'),(122,37,2,'Jupiter'),(123,37,1,'Mond'),(124,37,15,'gam Leo'),(125,37,8,'M45'),(126,37,10,'M42'),(127,37,7,'M31'),(128,37,19,'M81'),(129,37,14,'M82'),(130,37,17,'Sternbilder'),(131,44,8,'M45'),(132,44,10,'M42'),(133,44,25,'Neptun'),(134,44,2,'Jupiter'),(135,44,1,'Mond'),(136,44,26,'Venus'),(137,44,15,'gam Leo'),(138,45,2,'Jupiter'),(139,45,10,'M42'),(140,45,8,'M45'),(141,45,15,'gam Leo'),(142,45,19,'M81'),(143,45,14,'M82'),(144,45,22,'NGC2392'),(145,45,27,'M97'),(146,45,28,'M3'),(147,46,2,'Jupiter'),(148,46,10,'M42'),(149,46,8,'M45'),(150,46,28,'M3'),(151,46,15,'gam Leo'),(152,46,19,'M81'),(153,46,14,'M82'),(154,46,22,'NGC2392'),(155,46,27,'M97'),(164,48,10,'M42'),(165,48,2,'Jupiter'),(166,48,17,'Sternbilder'),(167,47,2,'Jupiter'),(168,47,29,'M13'),(169,47,30,'M35'),(170,47,10,'M42'),(171,47,8,'M45'),(172,47,19,'M81'),(173,47,14,'M82'),(174,47,17,'Sternbilder'); /*!40000 ALTER TABLE `logbuch_objekte` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -188,4 +190,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2026-04-30 5:31:48 +-- Dump completed on 2026-05-08 17:43:48 diff --git a/package.json b/package.json index ba35dfb..d8bc62e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "logbuch", - "version": "1.3.0", + "version": "1.4.0", "private": true, "scripts": { "dev": "next dev",