Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
cc15296
chore: Deps
SvenFinn Feb 7, 2026
2a124cc
feat: Rework log parsing
SvenFinn Feb 7, 2026
ad333a3
feat: Switch to typed streams
SvenFinn Feb 8, 2026
c244d23
fix: Correct hit id magic in log
SvenFinn Feb 10, 2026
3b516f3
fix: Frontend now correctly handles holes in hit data
SvenFinn Feb 16, 2026
61c6c3a
chore: Dependencies
SvenFinn Feb 16, 2026
7219f36
fix: Typo in multicast address
SvenFinn Feb 16, 2026
6aaa712
fix: ranges-log ssh no longer crashing on file change
SvenFinn Feb 16, 2026
2696dd1
feat: Initial refactor of the multicast interface
SvenFinn Mar 4, 2026
7d38236
fix: New volume path
SvenFinn Mar 7, 2026
5529dc5
fix: make lastIp non-unique
SvenFinn Mar 7, 2026
db2018b
chore: Dependencies
SvenFinn Mar 7, 2026
4870f83
Remove unnecessary dependency
SvenFinn Mar 8, 2026
5ba99bb
feat: Change range protocol to explicitly represent shooter ambiguity
SvenFinn Mar 8, 2026
211a487
feat: Add (dormant) extrapolation code
SvenFinn Mar 8, 2026
f5c9099
fix: Database unhealthy detection
SvenFinn Mar 8, 2026
ddf60bb
fix: Dropping range state updates
SvenFinn Mar 14, 2026
cd8052b
fix: Log not working on free ranges
SvenFinn Mar 14, 2026
02334dc
fix: SSMDB2 Stabilizer
SvenFinn Mar 14, 2026
00b3b25
fix: Height of the range grid
SvenFinn Mar 14, 2026
ac3191b
fix: AhoCorasick returns the end position, not the start
SvenFinn Mar 14, 2026
1874523
feat: Switch to more sophisticated constraint solver for multicast
SvenFinn Mar 14, 2026
b5c9901
chore: Dependencies
SvenFinn Mar 14, 2026
df3f7cc
Initial plan
Copilot Mar 19, 2026
b853347
fix: security issues - path traversal, filename sanitization, input v…
Copilot Mar 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Meyton Message Protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Meyton Message Protocol

Target IP: 224.0.0.3 UDP, Port:49497

| Start Address | Type | Size (Bytes) | Description |
| ------------- | -------- | -------------- | ----------------------------------------------------------------------------------------------------------- |
| 0x00 | bytes | 36 | 00 00 03 01 06 08 53 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 51 00 00 00 00 00 00 00 01 00 00 00 |
| 0x24 | uint32 | 4 | Message ID, 0x35 for Message, 0xFB is for a simulated button press |
| 0x28 | Bitfield | 52 / 53 | Target RangeNo (1-416), lsb of 0x28 gets ignored |
| 0x5D | Unknown | 79 | Padding? Always 0x00 |
| 0xAC | uint32 | 4 | Message Length |
| 0xB0 | char[] | Message Length | ASCII (HTML) Message Content |
2 changes: 1 addition & 1 deletion database/local/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ services:
timeout: 5s
retries: 5
volumes:
- postgres_data:/var/lib/postgresql/data
- postgres_data:/var/lib/postgresql
dc-db-migrate:
container_name: dc-db-migrate
image: ghcr.io/svenfinn/dc-db-migrate:${APP_VERSION}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,3 @@ CREATE TABLE "public"."KnownRanges" (

-- CreateIndex
CREATE UNIQUE INDEX "KnownRanges_rangeId_key" ON "public"."KnownRanges"("rangeId");

-- CreateIndex
CREATE UNIQUE INDEX "KnownRanges_lastIp_key" ON "public"."KnownRanges"("lastIp");
322 changes: 204 additions & 118 deletions database/local/package-lock.json

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions database/local/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
"license": "ISC",
"description": "",
"dependencies": {
"@prisma/adapter-pg": "^7.3.0",
"@prisma/client": "^7.3.0",
"dotenv": "^17.2.3",
"pg": "^8.17.2"
"@prisma/adapter-pg": "^7.5.0",
"@prisma/client": "^7.5.0",
"dotenv": "^17.3.1",
"pg": "^8.20.0"
},
"devDependencies": {
"@types/node": "^25.0.9",
"@types/pg": "^8.16.0",
"prisma": "^7.3.0",
"@types/node": "^25.5.0",
"@types/pg": "^8.18.0",
"prisma": "^7.5.0",
"typescript": "^5.9.3"
},
"files": [
Expand Down
2 changes: 0 additions & 2 deletions database/local/pgadmin/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,3 @@ services:
depends_on:
dc-database:
condition: service_healthy
dc-db-migrate:
condition: service_completed_successfully
2 changes: 1 addition & 1 deletion database/local/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ enum CacheTypes {
model KnownRanges {
macAddress String @id
rangeId Int? @unique
lastIp String? @unique @db.Inet
lastIp String? @db.Inet
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
}
213 changes: 113 additions & 100 deletions database/smdb/package-lock.json

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions database/smdb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@
"generate": "npx prisma generate --no-hints"
},
"devDependencies": {
"@types/node": "^25.0.9",
"prisma": "^7.3.0",
"@types/node": "^25.5.0",
"prisma": "^7.5.0",
"typescript": "^5.9.3"
},
"dependencies": {
"@prisma/adapter-mariadb": "^7.3.0",
"@prisma/client": "^7.3.0",
"@prisma/adapter-mariadb": "^7.5.0",
"@prisma/client": "^7.5.0",
"dc-db-local": "file:../local",
"dotenv": "^17.2.3"
"dotenv": "^17.3.1"
},
"files": [
"dist",
Expand Down
17 changes: 7 additions & 10 deletions database/smdb/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -660,11 +660,11 @@ model Shooter {
image Bytes? @map("SchuetzenFoto") @db.MediumBlob

shooterFilters FilterShooter[]
club Club @relation(fields: [clubId], references: [id], map: "Schuetze_ibfk_1")
nation Country @relation(fields: [nationShort], references: [short], map: "Schuetze_ibfk_2")
club Club @relation(fields: [clubId], references: [id], map: "Schuetze_ibfk_1")
nation Country @relation(fields: [nationShort], references: [short], map: "Schuetze_ibfk_2")
seedingLists SeedingList[]
startListEntry StartListEntry[]
clubShooters Vereinszuordnung[]
clubShooters ClubAssoc[]

@@index([nationShort], map: "LandesKuerzel")
@@index([lastName], map: "Nachname")
Expand Down Expand Up @@ -804,14 +804,14 @@ model Club {
teams Team[]
shooters Shooter[]
startListEntries StartListEntry[]
union Union @relation(fields: [unionId], references: [id], map: "Verein_ibfk_1")
clubShooter Vereinszuordnung[]
union Union @relation(fields: [unionId], references: [id], map: "Verein_ibfk_1")
clubShooter ClubAssoc[]

@@index([unionId], map: "VerbandsID")
@@map("Verein")
}

model Vereinszuordnung {
model ClubAssoc {
shooterId BigInt @map("SportpassID")
clubId Int @map("VereinsID")

Expand All @@ -823,11 +823,8 @@ model Vereinszuordnung {
@@map("Vereinszuordnung")
}

// Contains version numbers of the database
model Version {
Versionsnummer Int

@@ignore
version Int @unique @map("Versionsnummer") @db.Int
}

model Zeit {
Expand Down
Loading