Bugfixes, Dating angefangen
Some checks failed
Host-Based Deploy (Java 21 Fix) / build-and-run (push) Has been cancelled

This commit is contained in:
2026-04-01 22:06:46 +02:00
parent 912718fc40
commit 87c85b1b17
123 changed files with 28977 additions and 462 deletions

View File

@@ -422,7 +422,7 @@ public class AdminController {
@GetMapping("/subscriptions/user/{userId}")
public ResponseEntity<SubscriptionStatusDto> getSubscriptionStatus(
@PathVariable UUID userId, Principal principal) {
@PathVariable("userId") UUID userId, Principal principal) {
requireSuperAdmin(principal);
UserEntity user = userRepository.findById(userId).orElse(null);
if (user == null) return ResponseEntity.notFound().build();

View File

@@ -153,8 +153,8 @@ public class FeedController {
// ── GET /feed/mine ──
@GetMapping("/mine")
public ResponseEntity<FeedPage> getMyFeed(@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
public ResponseEntity<FeedPage> getMyFeed(@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -202,8 +202,8 @@ public class FeedController {
// ── GET /feed/public ──
@GetMapping("/public")
public ResponseEntity<FeedPage> getPublicFeed(@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
public ResponseEntity<FeedPage> getPublicFeed(@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -221,9 +221,9 @@ public class FeedController {
// ── GET /feed/user/{userId} ──
@GetMapping("/user/{userId}")
public ResponseEntity<FeedPage> getUserPosts(@PathVariable UUID userId,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
public ResponseEntity<FeedPage> getUserPosts(@PathVariable("userId") UUID userId,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -255,7 +255,7 @@ public class FeedController {
// ── POST /feed/posts/{id}/like ──
@PostMapping("/posts/{id}/like")
public ResponseEntity<Void> toggleLike(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> toggleLike(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
if (feedPostRepository.findById(id).isEmpty()) return ResponseEntity.notFound().build();
@@ -267,7 +267,7 @@ public class FeedController {
// ── POST /feed/posts/{id}/vote ──
@PostMapping("/posts/{id}/vote")
public ResponseEntity<Void> vote(@PathVariable UUID id,
public ResponseEntity<Void> vote(@PathVariable("id") UUID id,
@RequestBody VoteRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -307,7 +307,7 @@ public class FeedController {
// ── DELETE /feed/posts/{id} ──
@DeleteMapping("/posts/{id}")
public ResponseEntity<Void> deletePost(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> deletePost(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();

View File

@@ -51,8 +51,8 @@ public class AboController {
@GetMapping("/list")
public ResponseEntity<AufgabenGruppePage> listSubscribed(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
@@ -71,8 +71,8 @@ public class AboController {
@GetMapping("/discover")
public ResponseEntity<AufgabenGruppePage> discover(
@RequestParam(required = false) String name,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DISCOVER_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DISCOVER_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
@@ -91,7 +91,7 @@ public class AboController {
// ── Abonnieren ──
@PostMapping("/{gruppenId}")
public ResponseEntity<Void> subscribe(@PathVariable UUID gruppenId, Principal principal) {
public ResponseEntity<Void> subscribe(@PathVariable("gruppenId") UUID gruppenId, Principal principal) {
UserEntity user = userService.requireUser(principal);
AufgabenGruppeEntity gruppe = gruppeRepository.findById(gruppenId).orElse(null);
@@ -113,7 +113,7 @@ public class AboController {
// ── Abonnement kündigen ──
@DeleteMapping("/{gruppenId}")
public ResponseEntity<Void> unsubscribe(@PathVariable UUID gruppenId, Principal principal) {
public ResponseEntity<Void> unsubscribe(@PathVariable("gruppenId") UUID gruppenId, Principal principal) {
UserEntity user = userService.requireUser(principal);
AufgabenGruppeEntity gruppe = gruppeRepository.findById(gruppenId).orElse(null);

View File

@@ -55,7 +55,7 @@ public class AufgabeController {
}
@GetMapping("/{aufgabeId}")
public ResponseEntity<Aufgabe> get(@PathVariable UUID aufgabeId) {
public ResponseEntity<Aufgabe> get(@PathVariable("aufgabeId") UUID aufgabeId) {
return aufgabeRepository.findById(aufgabeId)
.map(entity -> ResponseEntity.ok(entity.toAufgabe()))
.orElse(ResponseEntity.noContent().build());
@@ -84,7 +84,7 @@ public class AufgabeController {
}
@PutMapping("/{aufgabeId}")
public ResponseEntity<Void> update(@PathVariable UUID aufgabeId, @RequestBody Aufgabe aufgabe) {
public ResponseEntity<Void> update(@PathVariable("aufgabeId") UUID aufgabeId, @RequestBody Aufgabe aufgabe) {
if (aufgabe.getKurzText() == null || aufgabe.getText() == null || aufgabe.getLevel() == null) {
return ResponseEntity.badRequest().build();
}

View File

@@ -79,8 +79,8 @@ public class AufgabenGruppeController {
@GetMapping("/list/user")
public ResponseEntity<AufgabenGruppePage> listUser(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();
@@ -91,8 +91,8 @@ public class AufgabenGruppeController {
@GetMapping("/list/system")
public ResponseEntity<AufgabenGruppePage> listSystem(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
Page<AufgabenGruppeEntity> result = gruppeRepository.findByUserIdIsNull(
PageRequest.of(page, size, Sort.by("name")));
return ResponseEntity.ok(toGruppePage(result));
@@ -111,7 +111,7 @@ public class AufgabenGruppeController {
}
@GetMapping("/own")
public ResponseEntity<AufgabenGruppeList> getOwn(@RequestParam UUID userId) {
public ResponseEntity<AufgabenGruppeList> getOwn(@RequestParam("userId") UUID userId) {
AufgabenGruppeList list = new AufgabenGruppeList();
list.setGruppen(gruppeRepository.findByUserId(userId)
.stream().map(AufgabenGruppeEntity::toAufgabenGruppeDisplay).toList());
@@ -119,7 +119,7 @@ public class AufgabenGruppeController {
}
@GetMapping("/{gruppeId}")
public ResponseEntity<AufgabenGruppe> get(@PathVariable UUID gruppeId) {
public ResponseEntity<AufgabenGruppe> get(@PathVariable("gruppeId") UUID gruppeId) {
return gruppeRepository.findById(gruppeId)
.map(entity -> ResponseEntity.ok(entity.toAufgabenGruppe()))
.orElse(ResponseEntity.noContent().build());
@@ -152,7 +152,7 @@ public class AufgabenGruppeController {
// ── Bearbeiten ──
@PutMapping("/{gruppeId}")
public ResponseEntity<Void> update(@PathVariable UUID gruppeId,
public ResponseEntity<Void> update(@PathVariable("gruppeId") UUID gruppeId,
@RequestBody AufgabenGruppe gruppe,
Principal principal) {
if (gruppe.getName() == null || gruppe.getName().isBlank()) {
@@ -180,7 +180,7 @@ public class AufgabenGruppeController {
// ── Kopieren (Systemgruppe → eigene) ──
@PostMapping("/copy/{gruppeId}")
public ResponseEntity<Void> copy(@PathVariable UUID gruppeId, Principal principal) {
public ResponseEntity<Void> copy(@PathVariable("gruppeId") UUID gruppeId, Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();
try {
@@ -198,7 +198,7 @@ public class AufgabenGruppeController {
// ── Löschen ──
@DeleteMapping("/{gruppeId}")
public ResponseEntity<Void> deleteById(@PathVariable UUID gruppeId, Principal principal) {
public ResponseEntity<Void> deleteById(@PathVariable("gruppeId") UUID gruppeId, Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();

View File

@@ -104,7 +104,7 @@ public class BdsmEinladungController {
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> cancelEinladung(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> cancelEinladung(@PathVariable("id") UUID id, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
BdsmEinladungEntity e = einladungRepository.findById(id).orElse(null);
@@ -116,7 +116,7 @@ public class BdsmEinladungController {
}
@GetMapping
public ResponseEntity<List<Map<String, Object>>> getBySetupId(@RequestParam UUID setupId, Principal principal) {
public ResponseEntity<List<Map<String, Object>>> getBySetupId(@RequestParam("setupId") UUID setupId, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
List<Map<String, Object>> list = einladungRepository.findBySetupId(setupId).stream()
@@ -191,7 +191,7 @@ public class BdsmEinladungController {
}
@PutMapping("/{id}/spielerdaten")
public ResponseEntity<Void> spielerDatenEinreichen(@PathVariable UUID id, @RequestBody SpielerDatenRequest req, Principal principal) {
public ResponseEntity<Void> spielerDatenEinreichen(@PathVariable("id") UUID id, @RequestBody SpielerDatenRequest req, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
BdsmEinladungEntity e = einladungRepository.findById(id).orElse(null);
@@ -204,7 +204,7 @@ public class BdsmEinladungController {
}
@PutMapping("/{id}/antwort")
public ResponseEntity<Void> antwort(@PathVariable UUID id, @RequestBody AntwortRequest req, Principal principal) {
public ResponseEntity<Void> antwort(@PathVariable("id") UUID id, @RequestBody AntwortRequest req, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
BdsmEinladungEntity e = einladungRepository.findById(id).orElse(null);

View File

@@ -97,14 +97,14 @@ public class BdsmGameController {
}
@GetMapping("/{sessionId}")
public ResponseEntity<BdsmGame> getBySessionId(@PathVariable UUID sessionId) {
public ResponseEntity<BdsmGame> getBySessionId(@PathVariable("sessionId") UUID sessionId) {
return sessionRepository.findById(sessionId)
.map(entity -> ResponseEntity.ok(toSession(entity)))
.orElse(ResponseEntity.noContent().build());
}
@GetMapping
public ResponseEntity<BdsmGame> getByUserId(@RequestParam UUID userId) {
public ResponseEntity<BdsmGame> getByUserId(@RequestParam("userId") UUID userId) {
return sessionRepository.findByUserId(userId)
.map(entity -> ResponseEntity.ok(toSession(entity)))
.orElse(ResponseEntity.noContent().build());
@@ -158,7 +158,7 @@ public class BdsmGameController {
}
@PostMapping("/{sessionId}/abgeschlossen")
public ResponseEntity<Void> spielAbgeschlossen(@PathVariable UUID sessionId) {
public ResponseEntity<Void> spielAbgeschlossen(@PathVariable("sessionId") UUID sessionId) {
BdsmGameEntity entity = sessionRepository.findById(sessionId).orElse(null);
if (entity == null) return ResponseEntity.notFound().build();
ORDENTLICH_BEENDET.add(sessionId);
@@ -168,13 +168,13 @@ public class BdsmGameController {
/** Prüft ob eine Session ordentlich (nicht abgebrochen) beendet wurde. */
@GetMapping("/{sessionId}/beendet")
public ResponseEntity<Void> istBeendet(@PathVariable UUID sessionId) {
public ResponseEntity<Void> istBeendet(@PathVariable("sessionId") UUID sessionId) {
if (ORDENTLICH_BEENDET.remove(sessionId)) return ResponseEntity.ok().build();
return ResponseEntity.notFound().build();
}
@DeleteMapping("/{sessionId}/verlassen")
public ResponseEntity<Void> verlasseSpiel(@PathVariable UUID sessionId, Principal principal) {
public ResponseEntity<Void> verlasseSpiel(@PathVariable("sessionId") UUID sessionId, Principal principal) {
UUID userId = userService.requireUser(principal).getUserId();
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
@@ -200,7 +200,7 @@ public class BdsmGameController {
}
@PostMapping("/{sessionId}/aufgaben")
public ResponseEntity<Void> setAufgaben(@RequestBody AufgabenList list, @PathVariable UUID sessionId) {
public ResponseEntity<Void> setAufgaben(@RequestBody AufgabenList list, @PathVariable("sessionId") UUID sessionId) {
try {
if (list.size() > 1000) {
return ResponseEntity.badRequest().build();
@@ -227,7 +227,7 @@ public class BdsmGameController {
}
@GetMapping("/{sessionId}/aufgaben/next")
public ResponseEntity<AufgabeAnzeige> getNextAufgabe(@PathVariable UUID sessionId) {
public ResponseEntity<AufgabeAnzeige> getNextAufgabe(@PathVariable("sessionId") UUID sessionId) {
try {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null || session.getAufgaben() == null) {
@@ -258,7 +258,7 @@ public class BdsmGameController {
}
@PostMapping("/{sessionId}/mitspieler")
public ResponseEntity<Void> addMitspieler(@RequestBody BdsmMitspieler mitspieler, @PathVariable UUID sessionId) {
public ResponseEntity<Void> addMitspieler(@RequestBody BdsmMitspieler mitspieler, @PathVariable("sessionId") UUID sessionId) {
if (mitspieler.getName() == null || mitspieler.getGeschlecht() == null || mitspieler.getRollen() == null
|| mitspieler.getRollen().isEmpty() || mitspieler.getSpieltMit() == null || mitspieler.getSpieltMit().isEmpty()
|| mitspieler.getVerfuegbareWerkzeuge() == null || mitspieler.getVerfuegbareWerkzeuge().isEmpty()) {
@@ -313,7 +313,7 @@ public class BdsmGameController {
}
@GetMapping("/{sessionId}/finisher")
public ResponseEntity<List<AufgabeAnzeige>> getFinisher(@PathVariable UUID sessionId) {
public ResponseEntity<List<AufgabeAnzeige>> getFinisher(@PathVariable("sessionId") UUID sessionId) {
try {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.badRequest().build();
@@ -326,7 +326,7 @@ public class BdsmGameController {
}
@PostMapping("/{sessionId}/backToLevel5")
public ResponseEntity<Void> backToLevel5(@PathVariable UUID sessionId) {
public ResponseEntity<Void> backToLevel5(@PathVariable("sessionId") UUID sessionId) {
try {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.badRequest().build();
@@ -343,7 +343,7 @@ public class BdsmGameController {
}
@GetMapping("/{sessionId}/mitspieler/me")
public ResponseEntity<Map<String, Object>> getMeinMitspieler(@PathVariable UUID sessionId, Principal principal) {
public ResponseEntity<Map<String, Object>> getMeinMitspieler(@PathVariable("sessionId") UUID sessionId, Principal principal) {
UUID userId = userService.requireUser(principal).getUserId();
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
@@ -366,7 +366,7 @@ public class BdsmGameController {
@PostMapping("/{sessionId}/active-task/abschliessen")
public ResponseEntity<AbschliessenResponse> activeTaskAbschliessen(
@PathVariable UUID sessionId, @RequestBody AbschliessenRequest req) {
@PathVariable("sessionId") UUID sessionId, @RequestBody AbschliessenRequest req) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
@@ -413,7 +413,7 @@ public class BdsmGameController {
record ActiveTaskResponse(String taskJson, Long elapsedSeconds) {}
@PutMapping("/{sessionId}/active-task")
public ResponseEntity<Void> setActiveTask(@PathVariable UUID sessionId, @RequestBody ActiveTaskRequest req) {
public ResponseEntity<Void> setActiveTask(@PathVariable("sessionId") UUID sessionId, @RequestBody ActiveTaskRequest req) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
session.setActiveTaskJson(req.taskJson());
@@ -423,7 +423,7 @@ public class BdsmGameController {
}
@DeleteMapping("/{sessionId}/active-task")
public ResponseEntity<Void> clearActiveTask(@PathVariable UUID sessionId) {
public ResponseEntity<Void> clearActiveTask(@PathVariable("sessionId") UUID sessionId) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
session.setActiveTaskJson(null);
@@ -433,7 +433,7 @@ public class BdsmGameController {
}
@GetMapping("/{sessionId}/active-task")
public ResponseEntity<ActiveTaskResponse> getActiveTask(@PathVariable UUID sessionId) {
public ResponseEntity<ActiveTaskResponse> getActiveTask(@PathVariable("sessionId") UUID sessionId) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
if (session.getActiveTaskJson() == null) return ResponseEntity.noContent().build();
@@ -446,7 +446,7 @@ public class BdsmGameController {
// ── Keyholder-Angebot: prüft ob am Ende eine VAGINA/PENIS-Sperre vorliegt ──
@GetMapping("/{sessionId}/keyholder-angebot")
public ResponseEntity<Map<String, Object>> keyholderAngebot(@PathVariable UUID sessionId) {
public ResponseEntity<Map<String, Object>> keyholderAngebot(@PathVariable("sessionId") UUID sessionId) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
@@ -484,7 +484,7 @@ public class BdsmGameController {
@GetMapping("/{sessionId}/keyholder-locks")
public ResponseEntity<List<Map<String, Object>>> keyholderLocks(
@PathVariable UUID sessionId, @RequestParam UUID keyholderUserId) {
@PathVariable("sessionId") UUID sessionId, @RequestParam("keyholderUserId") UUID keyholderUserId) {
BdsmGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
@@ -508,7 +508,7 @@ public class BdsmGameController {
@PostMapping("/{sessionId}/zu-chastity")
public ResponseEntity<Map<String, Object>> zuChastity(
@PathVariable UUID sessionId, @RequestBody ZuChastityRequest req) {
@PathVariable("sessionId") UUID sessionId, @RequestBody ZuChastityRequest req) {
try {
CardLockEntity newLock = bdsmGameService.zuChastity(
sessionId, req.lockId(), req.lockeeUserId(), req.keyholderUserId());
@@ -527,7 +527,7 @@ public class BdsmGameController {
/** Gibt zurück welches Werkzeug für einen User durch ein aktives Chastity-Lock blockiert ist. */
@GetMapping("/chastity-constraint")
public ResponseEntity<Map<String, Object>> chastityConstraint(@RequestParam UUID userId) {
public ResponseEntity<Map<String, Object>> chastityConstraint(@RequestParam("userId") UUID userId) {
Map<String, Object> result = new LinkedHashMap<>();
if (!cardlockRepository.existsByLockeeAndStartTimeIsNotNullAndUnlockTimeIsNull(userId)) {
result.put("lockedWerkzeug", null);
@@ -552,7 +552,7 @@ public class BdsmGameController {
// ── Debug-Endpoint: vollständiger Entity-Zustand ──
@GetMapping("/{sessionId}/debug")
public ResponseEntity<Map<String, Object>> debug(@PathVariable UUID sessionId) {
public ResponseEntity<Map<String, Object>> debug(@PathVariable("sessionId") UUID sessionId) {
BdsmGameEntity entity = sessionRepository.findById(sessionId).orElse(null);
if (entity == null) return ResponseEntity.notFound().build();

View File

@@ -39,7 +39,7 @@ public class FavoritController {
}
@GetMapping("/{favoritId}")
public ResponseEntity<Favorit> get(@PathVariable UUID favoritId) {
public ResponseEntity<Favorit> get(@PathVariable("favoritId") UUID favoritId) {
return favoritRepository.findById(favoritId)
.map(entity -> ResponseEntity.ok(entity.toFavorit()))
.orElse(ResponseEntity.noContent().build());

View File

@@ -47,7 +47,7 @@ public class FinisherController {
}
@GetMapping("/{finisherId}")
public ResponseEntity<Finisher> get(@PathVariable UUID finisherId) {
public ResponseEntity<Finisher> get(@PathVariable("finisherId") UUID finisherId) {
return finisherRepository.findById(finisherId)
.map(entity -> ResponseEntity.ok(entity.toFinisher()))
.orElse(ResponseEntity.noContent().build());
@@ -76,7 +76,7 @@ public class FinisherController {
}
@PutMapping("/{finisherId}")
public ResponseEntity<Void> update(@PathVariable UUID finisherId, @RequestBody Finisher finisher) {
public ResponseEntity<Void> update(@PathVariable("finisherId") UUID finisherId, @RequestBody Finisher finisher) {
if (finisher.getKurzText() == null || finisher.getText() == null || finisher.getGeschlecht() == null) {
return ResponseEntity.badRequest().build();
}

View File

@@ -47,7 +47,7 @@ public class SperreController {
}
@GetMapping("/{sperreId}")
public ResponseEntity<Sperre> get(@PathVariable UUID sperreId) {
public ResponseEntity<Sperre> get(@PathVariable("sperreId") UUID sperreId) {
return sperreRepository.findById(sperreId)
.map(entity -> ResponseEntity.ok(entity.toSperre()))
.orElse(ResponseEntity.noContent().build());
@@ -76,7 +76,7 @@ public class SperreController {
}
@PutMapping("/{sperreId}")
public ResponseEntity<Void> update(@PathVariable UUID sperreId, @RequestBody Sperre sperre) {
public ResponseEntity<Void> update(@PathVariable("sperreId") UUID sperreId, @RequestBody Sperre sperre) {
if (sperre.getKurzText() == null || sperre.getText() == null || sperre.getMinutenVon() == null
|| sperre.getSperreFuer() == null || sperre.getSperreFuer().isEmpty()) {
return ResponseEntity.badRequest().build();

View File

@@ -47,7 +47,7 @@ public class StrafeController {
}
@GetMapping("/{strafeId}")
public ResponseEntity<Strafe> get(@PathVariable UUID strafeId) {
public ResponseEntity<Strafe> get(@PathVariable("strafeId") UUID strafeId) {
return strafeRepository.findById(strafeId)
.map(entity -> ResponseEntity.ok(entity.toStrafe()))
.orElse(ResponseEntity.noContent().build());
@@ -75,7 +75,7 @@ public class StrafeController {
}
@PutMapping("/{strafeId}")
public ResponseEntity<Void> update(@PathVariable UUID strafeId, @RequestBody Strafe strafe) {
public ResponseEntity<Void> update(@PathVariable("strafeId") UUID strafeId, @RequestBody Strafe strafe) {
if (strafe.getKurzText() == null || strafe.getText() == null || strafe.getLevel() == null) {
return ResponseEntity.badRequest().build();
}

View File

@@ -61,8 +61,8 @@ public class ToyController {
@GetMapping("/list/user")
public ResponseEntity<ToyPage> listUser(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
Page<ToyEntity> result = toyRepository.findByUserId(
@@ -72,8 +72,8 @@ public class ToyController {
@GetMapping("/list/system")
public ResponseEntity<ToyPage> listSystem(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
Page<ToyEntity> result = toyRepository.findByUserIdIsNull(
PageRequest.of(page, size, Sort.by("name")));
return ResponseEntity.ok(toToyPage(result));
@@ -121,7 +121,7 @@ public class ToyController {
}
@GetMapping("/{toyId}")
public ResponseEntity<Toy> get(@PathVariable UUID toyId) {
public ResponseEntity<Toy> get(@PathVariable("toyId") UUID toyId) {
return toyRepository.findById(toyId)
.map(entity -> ResponseEntity.ok(entity.toToy()))
.orElse(ResponseEntity.noContent().build());
@@ -154,7 +154,7 @@ public class ToyController {
}
@PostMapping("/copy/{toyId}")
public ResponseEntity<Void> copy(@PathVariable UUID toyId, Principal principal) {
public ResponseEntity<Void> copy(@PathVariable("toyId") UUID toyId, Principal principal) {
UserEntity user = userService.requireUser(principal);
ToyEntity source = toyRepository.findById(toyId).orElse(null);
if (source == null) {
@@ -180,7 +180,7 @@ public class ToyController {
}
@PutMapping("/{toyId}")
public ResponseEntity<Void> update(@PathVariable UUID toyId, @RequestBody Toy toy, Principal principal) {
public ResponseEntity<Void> update(@PathVariable("toyId") UUID toyId, @RequestBody Toy toy, Principal principal) {
if (toy.getName() == null || toy.getName().isBlank()) {
return ResponseEntity.badRequest().build();
}
@@ -209,7 +209,7 @@ public class ToyController {
}
@DeleteMapping("/{toyId}")
public ResponseEntity<Void> delete(@PathVariable UUID toyId, Principal principal) {
public ResponseEntity<Void> delete(@PathVariable("toyId") UUID toyId, Principal principal) {
UserEntity user = userService.requireUser(principal);
ToyEntity toy = toyRepository.findById(toyId).orElse(null);
if (toy == null) {

View File

@@ -270,7 +270,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/draw")
@Transactional
public ResponseEntity<Map<String, Object>> drawCard(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> drawCard(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -309,7 +309,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/hygiene/start")
@Transactional
public ResponseEntity<Map<String, Object>> startHygieneOpening(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> startHygieneOpening(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -326,7 +326,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/hygiene/end")
@Transactional
public ResponseEntity<Map<String, Object>> endHygieneOpening(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> endHygieneOpening(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -342,7 +342,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/task/complete")
@Transactional
public ResponseEntity<Void> completeTask(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> completeTask(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -359,7 +359,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/relock")
@Transactional
public ResponseEntity<Void> relock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> relock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -375,7 +375,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/green/keep")
@Transactional
public ResponseEntity<Void> greenKeep(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> greenKeep(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -409,7 +409,7 @@ public class CardLockController {
}
@GetMapping("/cardlock/{lockId}")
public ResponseEntity<Map<String, Object>> getLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> getLock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -587,7 +587,7 @@ public class CardLockController {
@PostMapping("/cardlock/{lockId}/verification/start")
@Transactional
public ResponseEntity<Map<String, Object>> startVerification(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> startVerification(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -629,7 +629,7 @@ public class CardLockController {
@PostMapping(value = "/cardlock/{lockId}/verification/{verificationId}/complete", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Transactional
public ResponseEntity<Void> completeVerification(@PathVariable UUID lockId, @PathVariable UUID verificationId,
public ResponseEntity<Void> completeVerification(@PathVariable("lockId") UUID lockId, @PathVariable("verificationId") UUID verificationId,
@RequestParam MultipartFile image, Principal principal) throws IOException {
UUID myId = userService.requireUser(principal).getUserId();
@@ -683,7 +683,7 @@ public class CardLockController {
@DeleteMapping("/cardlock/{lockId}/verification/today")
@Transactional
public ResponseEntity<Void> renewVerification(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> renewVerification(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -852,7 +852,7 @@ public class CardLockController {
}
@GetMapping("/as-keyholder/{lockId}")
public ResponseEntity<Map<String, Object>> getLockAsKeyholder(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> getLockAsKeyholder(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -1009,7 +1009,7 @@ public class CardLockController {
@Transactional
@DeleteMapping("/cardlock/{lockId}")
public ResponseEntity<Void> deleteLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> deleteLock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -1037,7 +1037,7 @@ public class CardLockController {
@PostMapping("/as-keyholder/{lockId}/cards/add")
@Transactional
public ResponseEntity<Void> addCards(@PathVariable UUID lockId, @RequestBody ModifyCardsRequest req,
public ResponseEntity<Void> addCards(@PathVariable("lockId") UUID lockId, @RequestBody ModifyCardsRequest req,
Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -1084,7 +1084,7 @@ public class CardLockController {
@PostMapping("/as-keyholder/{lockId}/cards/remove")
@Transactional
public ResponseEntity<Map<String, String>> removeCards(@PathVariable UUID lockId,
public ResponseEntity<Map<String, String>> removeCards(@PathVariable("lockId") UUID lockId,
@RequestBody ModifyCardsRequest req, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -1176,7 +1176,7 @@ public class CardLockController {
@Transactional
@PostMapping("/as-keyholder/{lockId}/assign-task")
public ResponseEntity<?> assignTask(@PathVariable UUID lockId, @RequestBody AssignTaskRequest req,
public ResponseEntity<?> assignTask(@PathVariable("lockId") UUID lockId, @RequestBody AssignTaskRequest req,
Principal principal) {
var me = userService.requireUser(principal);
@@ -1228,7 +1228,7 @@ public class CardLockController {
@Transactional
@PostMapping("/cardlock/{lockId}/assigned-tasks/{taskId}/accept")
public ResponseEntity<?> acceptAssignedTask(@PathVariable UUID lockId, @PathVariable UUID taskId,
public ResponseEntity<?> acceptAssignedTask(@PathVariable("lockId") UUID lockId, @PathVariable("taskId") UUID taskId,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -1287,7 +1287,7 @@ public class CardLockController {
@Transactional
@PostMapping("/cardlock/{lockId}/assigned-tasks/{taskId}/decline")
public ResponseEntity<?> declineAssignedTask(@PathVariable UUID lockId, @PathVariable UUID taskId,
public ResponseEntity<?> declineAssignedTask(@PathVariable("lockId") UUID lockId, @PathVariable("taskId") UUID taskId,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -1320,7 +1320,7 @@ public class CardLockController {
@Transactional
@DeleteMapping("/as-keyholder/{lockId}/assigned-tasks/{taskId}")
public ResponseEntity<?> cancelAssignedTask(@PathVariable UUID lockId, @PathVariable UUID taskId,
public ResponseEntity<?> cancelAssignedTask(@PathVariable("lockId") UUID lockId, @PathVariable("taskId") UUID taskId,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -1347,7 +1347,7 @@ public class CardLockController {
@Transactional
@PostMapping("/as-keyholder/{lockId}/freeze")
public ResponseEntity<?> freezeLock(@PathVariable UUID lockId, @RequestBody FreezeRequest req,
public ResponseEntity<?> freezeLock(@PathVariable("lockId") UUID lockId, @RequestBody FreezeRequest req,
Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -1388,7 +1388,7 @@ public class CardLockController {
@Transactional
@DeleteMapping("/as-keyholder/{lockId}/freeze")
public ResponseEntity<?> unfreezeLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<?> unfreezeLock(@PathVariable("lockId") UUID lockId, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -1414,7 +1414,7 @@ public class CardLockController {
@Transactional
@PostMapping("/as-keyholder/{lockId}/request-unlock")
public ResponseEntity<?> requestUnlock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<?> requestUnlock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = cardlockRepository.findById(lockId);
@@ -1436,7 +1436,7 @@ public class CardLockController {
@Transactional
@PostMapping("/cardlock/{lockId}/emergency-unlock")
public ResponseEntity<?> requestEmergencyUnlock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<?> requestEmergencyUnlock(@PathVariable("lockId") UUID lockId, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();

View File

@@ -93,7 +93,7 @@ public class CardlockTemplateController {
}
@PutMapping("/{id}")
public ResponseEntity<Map<String, Object>> update(@PathVariable UUID id,
public ResponseEntity<Map<String, Object>> update(@PathVariable("id") UUID id,
@RequestBody TemplateRequest req,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -114,7 +114,7 @@ public class CardlockTemplateController {
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> delete(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var opt = templateRepository.findById(id);

View File

@@ -26,8 +26,8 @@ public class BaseLockTemplateController {
@GetMapping
public ResponseEntity<Map<String, Object>> list(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "20") int size,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -57,7 +57,7 @@ public class BaseLockTemplateController {
}
@GetMapping("/{id}")
public ResponseEntity<Map<String, Object>> getById(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Map<String, Object>> getById(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var opt = templateRepository.findById(id);

View File

@@ -48,8 +48,8 @@ public class TemplateExploreController {
@GetMapping("/public")
public ResponseEntity<Map<String, Object>> getPublicTemplates(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
@RequestParam(defaultValue = "") String q,
Principal principal) {
@@ -80,7 +80,7 @@ public class TemplateExploreController {
@GetMapping("/{id}/public")
public ResponseEntity<Map<String, Object>> getTemplate(
@PathVariable UUID id, Principal principal) {
@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var tOpt = templateRepository.findById(id);
@@ -131,7 +131,7 @@ public class TemplateExploreController {
@PostMapping("/{id}/subscribe")
@Transactional
public ResponseEntity<Void> subscribe(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> subscribe(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var tOpt = templateRepository.findById(id);
@@ -157,7 +157,7 @@ public class TemplateExploreController {
@DeleteMapping("/{id}/subscribe")
@Transactional
public ResponseEntity<Void> unsubscribe(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> unsubscribe(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var subOpt = subscriptionRepository.findByUserIdAndTemplateId(myId, id);
@@ -177,7 +177,7 @@ public class TemplateExploreController {
@PostMapping("/{id}/fork")
@Transactional
public ResponseEntity<Map<String, Object>> fork(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Map<String, Object>> fork(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var tOpt = templateRepository.findById(id);
@@ -233,7 +233,7 @@ public class TemplateExploreController {
@PatchMapping("/{id}/publish")
@Transactional
public ResponseEntity<Void> publish(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> publish(@PathVariable("id") UUID id, Principal principal) {
var me = userService.requireUser(principal);
var tOpt = templateRepository.findById(id);
@@ -251,7 +251,7 @@ public class TemplateExploreController {
@DeleteMapping("/{id}/publish")
@Transactional
public ResponseEntity<Void> unpublish(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> unpublish(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var tOpt = templateRepository.findById(id);

View File

@@ -20,7 +20,7 @@ public class CommunityPilloryController {
}
@GetMapping("/{id}")
public ResponseEntity<CommunityPilloryDTO> getPillory(@PathVariable UUID id) {
public ResponseEntity<CommunityPilloryDTO> getPillory(@PathVariable("id") UUID id) {
var pillory = repo.findById(id);
if (pillory.isPresent()) {
return ResponseEntity.ok(pillory.get().toPillory());

View File

@@ -36,7 +36,7 @@ public class CommunityTaskVoteController {
}
@GetMapping("/{displayId}")
public ResponseEntity<CommunityTaskVoteDisplayDTO> getVote(@PathVariable UUID displayId, Principal principal) {
public ResponseEntity<CommunityTaskVoteDisplayDTO> getVote(@PathVariable("displayId") UUID displayId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var voteOpt = taskVoteRepository.findById(displayId);
@@ -69,7 +69,7 @@ public class CommunityTaskVoteController {
@PostMapping("/{displayId}/vote/{taskIndex}")
@Transactional
public ResponseEntity<Void> castVote(@PathVariable UUID displayId, @PathVariable int taskIndex,
public ResponseEntity<Void> castVote(@PathVariable("displayId") UUID displayId, @PathVariable("taskIndex") int taskIndex,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();

View File

@@ -40,7 +40,7 @@ public class CommunityVerificationController {
}
@GetMapping("/{displayId}")
public ResponseEntity<CommunityVerificationDTO> get(@PathVariable UUID displayId, Principal principal) {
public ResponseEntity<CommunityVerificationDTO> get(@PathVariable("displayId") UUID displayId, Principal principal) {
var optional = verificationRepository.findById(displayId);
if (optional.isEmpty()) {
return ResponseEntity.noContent().build();
@@ -81,7 +81,7 @@ public class CommunityVerificationController {
}
@PutMapping("/{displayId}")
public ResponseEntity<Void> update(@PathVariable UUID displayId, @RequestBody CommunityVerificationDTO dto,
public ResponseEntity<Void> update(@PathVariable("displayId") UUID displayId, @RequestBody CommunityVerificationDTO dto,
Principal principal) {
userService.requireUser(principal);
var entity = verificationRepository.findById(displayId).orElse(null);
@@ -99,7 +99,7 @@ public class CommunityVerificationController {
}
@PostMapping("/{verificationId}/vote/")
public ResponseEntity<Void> addVote(@PathVariable UUID verificationId, @RequestBody CommunityVerificationVoteDTO dto,
public ResponseEntity<Void> addVote(@PathVariable("verificationId") UUID verificationId, @RequestBody CommunityVerificationVoteDTO dto,
Principal principal) {
var user = userService.requireUser(principal);
if (!verificationRepository.existsById(verificationId)) return ResponseEntity.notFound().build();

View File

@@ -144,7 +144,7 @@ public class KeyholderOfferController {
@PatchMapping("/{id}")
@Transactional
public ResponseEntity<Map<String, Object>> updateOffer(
@PathVariable UUID id,
@PathVariable("id") UUID id,
@RequestBody CreateOfferRequest req,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -177,7 +177,7 @@ public class KeyholderOfferController {
@DeleteMapping("/{id}")
@Transactional
public ResponseEntity<Void> deleteOffer(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> deleteOffer(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var offerOpt = offerRepository.findById(id);
@@ -192,7 +192,7 @@ public class KeyholderOfferController {
@GetMapping("/user/{userId}")
public ResponseEntity<List<Map<String, Object>>> getOffersForUser(
@PathVariable UUID userId, Principal principal) {
@PathVariable("userId") UUID userId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
List<Map<String, Object>> result = offerRepository.findByOffererId(userId).stream()
@@ -231,7 +231,7 @@ public class KeyholderOfferController {
@PostMapping("/{id}/join")
@Transactional
public ResponseEntity<Map<String, Object>> joinOffer(
@PathVariable UUID id,
@PathVariable("id") UUID id,
@RequestBody JoinOfferRequest req,
Principal principal) {

View File

@@ -84,8 +84,8 @@ public class KeyholderTaskChoiceController {
@PostMapping("/{choiceId}/choose/{taskIndex}")
@Transactional
public ResponseEntity<Void> chooseTask(@PathVariable UUID choiceId,
@PathVariable int taskIndex,
public ResponseEntity<Void> chooseTask(@PathVariable("choiceId") UUID choiceId,
@PathVariable("taskIndex") int taskIndex,
@org.springframework.web.bind.annotation.RequestBody(required = false) PenaltyRequest penalty,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();

View File

@@ -191,7 +191,7 @@ public class TimeLockController {
@GetMapping("/timelock/{lockId}")
@Transactional
public ResponseEntity<Map<String, Object>> getTimeLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> getTimeLock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -374,7 +374,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/spin")
@Transactional
public ResponseEntity<Map<String, Object>> spin(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> spin(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -424,7 +424,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/relock")
@Transactional
public ResponseEntity<Void> relock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> relock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -440,7 +440,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/task/done")
@Transactional
public ResponseEntity<Void> taskDone(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> taskDone(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -462,7 +462,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/hygiene/start")
@Transactional
public ResponseEntity<Map<String, Object>> startHygiene(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> startHygiene(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -485,7 +485,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/hygiene/end")
@Transactional
public ResponseEntity<Map<String, Object>> endHygiene(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> endHygiene(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -507,7 +507,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/verification/start")
@Transactional
public ResponseEntity<Map<String, Object>> startVerification(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Map<String, Object>> startVerification(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -525,8 +525,8 @@ public class TimeLockController {
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Transactional
public ResponseEntity<Void> completeVerification(
@PathVariable UUID lockId,
@PathVariable UUID verificationId,
@PathVariable("lockId") UUID lockId,
@PathVariable("verificationId") UUID verificationId,
@RequestParam MultipartFile image,
Principal principal) throws IOException {
@@ -553,7 +553,7 @@ public class TimeLockController {
@DeleteMapping("/timelock/{lockId}")
@Transactional
public ResponseEntity<Void> endLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> endLock(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -594,7 +594,7 @@ public class TimeLockController {
@PatchMapping("/timelock/{lockId}/unlock-time")
@Transactional
public ResponseEntity<Void> setActualUnlockTime(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<Void> setActualUnlockTime(@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -644,7 +644,7 @@ public class TimeLockController {
@GetMapping("/timelock/as-keyholder/{lockId}")
public ResponseEntity<Map<String, Object>> getTimeLockAsKeyholder(
@PathVariable UUID lockId, Principal principal) {
@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -710,7 +710,7 @@ public class TimeLockController {
@PostMapping("/timelock/as-keyholder/{lockId}/request-unlock")
@Transactional
public ResponseEntity<?> requestUnlockAsKeyholder(
@PathVariable UUID lockId, Principal principal) {
@PathVariable("lockId") UUID lockId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var lockOpt = timeLockRepository.findById(lockId);
@@ -729,7 +729,7 @@ public class TimeLockController {
@PostMapping("/timelock/as-keyholder/{lockId}/freeze")
@Transactional
public ResponseEntity<?> freezeTimeLock(@PathVariable UUID lockId,
public ResponseEntity<?> freezeTimeLock(@PathVariable("lockId") UUID lockId,
@RequestBody FreezeRequest req, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -764,7 +764,7 @@ public class TimeLockController {
@DeleteMapping("/timelock/as-keyholder/{lockId}/freeze")
@Transactional
public ResponseEntity<?> unfreezeTimeLock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<?> unfreezeTimeLock(@PathVariable("lockId") UUID lockId, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();
@@ -790,7 +790,7 @@ public class TimeLockController {
@PostMapping("/timelock/{lockId}/emergency-unlock")
@Transactional
public ResponseEntity<?> requestEmergencyUnlock(@PathVariable UUID lockId, Principal principal) {
public ResponseEntity<?> requestEmergencyUnlock(@PathVariable("lockId") UUID lockId, Principal principal) {
var me = userService.requireUser(principal);
UUID myId = me.getUserId();

View File

@@ -102,7 +102,7 @@ public class TimeLockTemplateController {
}
@PutMapping("/{id}")
public ResponseEntity<Map<String, Object>> update(@PathVariable UUID id,
public ResponseEntity<Map<String, Object>> update(@PathVariable("id") UUID id,
@RequestBody TemplateRequest req,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -121,7 +121,7 @@ public class TimeLockTemplateController {
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> delete(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var opt = templateRepository.findById(id);

View File

@@ -31,7 +31,7 @@ public class GameHistoryController {
@GetMapping
@Transactional(readOnly = true)
public ResponseEntity<List<Map<String, Object>>> get(@RequestParam UUID userId, Principal principal) {
public ResponseEntity<List<Map<String, Object>>> get(@RequestParam("userId") UUID userId, Principal principal) {
userService.requireUser(principal);
var result = gameHistoryRepository.findByParticipantUserId(userId).stream()

View File

@@ -53,8 +53,8 @@ public class VanillaAboController {
@GetMapping("/list")
public ResponseEntity<AufgabenGruppePage> listSubscribed(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
@@ -76,8 +76,8 @@ public class VanillaAboController {
@GetMapping("/discover")
public ResponseEntity<AufgabenGruppePage> discover(
@RequestParam(required = false) String name,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DISCOVER_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DISCOVER_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
@@ -104,7 +104,7 @@ public class VanillaAboController {
// ── Abonnieren (nur vanilla-safe) ──
@PostMapping("/{gruppenId}")
public ResponseEntity<Void> subscribe(@PathVariable UUID gruppenId, Principal principal) {
public ResponseEntity<Void> subscribe(@PathVariable("gruppenId") UUID gruppenId, Principal principal) {
UserEntity user = userService.requireUser(principal);
AufgabenGruppeEntity gruppe = gruppeRepository.findById(gruppenId).orElse(null);
@@ -130,7 +130,7 @@ public class VanillaAboController {
// ── Abonnement kündigen ──
@DeleteMapping("/{gruppenId}")
public ResponseEntity<Void> unsubscribe(@PathVariable UUID gruppenId, Principal principal) {
public ResponseEntity<Void> unsubscribe(@PathVariable("gruppenId") UUID gruppenId, Principal principal) {
UserEntity user = userService.requireUser(principal);
AufgabenGruppeEntity gruppe = gruppeRepository.findById(gruppenId).orElse(null);

View File

@@ -55,7 +55,7 @@ public class VanillaAufgabeController {
}
@GetMapping("/{aufgabeId}")
public ResponseEntity<Aufgabe> get(@PathVariable UUID aufgabeId) {
public ResponseEntity<Aufgabe> get(@PathVariable("aufgabeId") UUID aufgabeId) {
return aufgabeRepository.findById(aufgabeId)
.map(entity -> ResponseEntity.ok(entity.toAufgabe()))
.orElse(ResponseEntity.noContent().build());
@@ -84,7 +84,7 @@ public class VanillaAufgabeController {
}
@PutMapping("/{aufgabeId}")
public ResponseEntity<Void> update(@PathVariable UUID aufgabeId, @RequestBody Aufgabe aufgabe) {
public ResponseEntity<Void> update(@PathVariable("aufgabeId") UUID aufgabeId, @RequestBody Aufgabe aufgabe) {
if (aufgabe.getKurzText() == null || aufgabe.getText() == null || aufgabe.getLevel() == null) {
return ResponseEntity.badRequest().build();
}

View File

@@ -79,8 +79,8 @@ public class VanillaAufgabenGruppeController {
@GetMapping("/list/user")
public ResponseEntity<AufgabenGruppePage> listUser(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();
@@ -100,8 +100,8 @@ public class VanillaAufgabenGruppeController {
@GetMapping("/list/system")
public ResponseEntity<AufgabenGruppePage> listSystem(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
Page<AufgabenGruppeEntity> dbPage = gruppeRepository.findSystemGroupsWithContent(
PageRequest.of(page, size, Sort.by("name")));
AufgabenGruppePage r = new AufgabenGruppePage();
@@ -126,7 +126,7 @@ public class VanillaAufgabenGruppeController {
}
@GetMapping("/own")
public ResponseEntity<AufgabenGruppeList> getOwn(@RequestParam UUID userId) {
public ResponseEntity<AufgabenGruppeList> getOwn(@RequestParam("userId") UUID userId) {
AufgabenGruppeList list = new AufgabenGruppeList();
list.setGruppen(gruppeRepository.findByUserId(userId).stream()
.filter(g -> g.getStrafen().isEmpty() && g.getSperren().isEmpty())
@@ -135,7 +135,7 @@ public class VanillaAufgabenGruppeController {
}
@GetMapping("/{gruppeId}")
public ResponseEntity<AufgabenGruppe> get(@PathVariable UUID gruppeId) {
public ResponseEntity<AufgabenGruppe> get(@PathVariable("gruppeId") UUID gruppeId) {
return gruppeRepository.findById(gruppeId)
.filter(g -> g.getStrafen().isEmpty() && g.getSperren().isEmpty())
.map(entity -> ResponseEntity.ok(entity.toAufgabenGruppe()))
@@ -169,7 +169,7 @@ public class VanillaAufgabenGruppeController {
// ── Bearbeiten ──
@PutMapping("/{gruppeId}")
public ResponseEntity<Void> update(@PathVariable UUID gruppeId,
public ResponseEntity<Void> update(@PathVariable("gruppeId") UUID gruppeId,
@RequestBody AufgabenGruppe gruppe,
Principal principal) {
if (gruppe.getName() == null || gruppe.getName().isBlank()) {
@@ -199,7 +199,7 @@ public class VanillaAufgabenGruppeController {
// ── Kopieren (Systemgruppe → eigene) ──
@PostMapping("/copy/{gruppeId}")
public ResponseEntity<Void> copy(@PathVariable UUID gruppeId, Principal principal) {
public ResponseEntity<Void> copy(@PathVariable("gruppeId") UUID gruppeId, Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();
// Only allow copying vanilla-safe groups
@@ -221,7 +221,7 @@ public class VanillaAufgabenGruppeController {
// ── Löschen ──
@DeleteMapping("/{gruppeId}")
public ResponseEntity<Void> deleteById(@PathVariable UUID gruppeId, Principal principal) {
public ResponseEntity<Void> deleteById(@PathVariable("gruppeId") UUID gruppeId, Principal principal) {
UserEntity user = resolveUser(principal);
if (user == null) return ResponseEntity.status(401).build();

View File

@@ -113,7 +113,7 @@ public class VanillaEinladungController {
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> cancelEinladung(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> cancelEinladung(@PathVariable("id") UUID id, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
VanillaEinladungEntity e = einladungRepository.findById(id).orElse(null);
@@ -125,7 +125,7 @@ public class VanillaEinladungController {
}
@GetMapping
public ResponseEntity<List<Map<String, Object>>> getBySetupId(@RequestParam UUID setupId, Principal principal) {
public ResponseEntity<List<Map<String, Object>>> getBySetupId(@RequestParam("setupId") UUID setupId, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
List<Map<String, Object>> list = einladungRepository.findBySetupId(setupId).stream()
@@ -200,7 +200,7 @@ public class VanillaEinladungController {
}
@PutMapping("/{id}/spielerdaten")
public ResponseEntity<Void> spielerDatenEinreichen(@PathVariable UUID id, @RequestBody SpielerDatenRequest req, Principal principal) {
public ResponseEntity<Void> spielerDatenEinreichen(@PathVariable("id") UUID id, @RequestBody SpielerDatenRequest req, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
VanillaEinladungEntity e = einladungRepository.findById(id).orElse(null);
@@ -213,7 +213,7 @@ public class VanillaEinladungController {
}
@PutMapping("/{id}/antwort")
public ResponseEntity<Void> antwort(@PathVariable UUID id, @RequestBody AntwortRequest req, Principal principal) {
public ResponseEntity<Void> antwort(@PathVariable("id") UUID id, @RequestBody AntwortRequest req, Principal principal) {
UUID userId = currentUserId(principal);
if (userId == null) return ResponseEntity.status(401).build();
VanillaEinladungEntity e = einladungRepository.findById(id).orElse(null);

View File

@@ -44,7 +44,7 @@ public class VanillaFavoritController {
}
@GetMapping("/{favoritId}")
public ResponseEntity<Favorit> get(@PathVariable UUID favoritId) {
public ResponseEntity<Favorit> get(@PathVariable("favoritId") UUID favoritId) {
return favoritRepository.findById(favoritId)
.map(entity -> ResponseEntity.ok(entity.toFavorit()))
.orElse(ResponseEntity.noContent().build());

View File

@@ -47,7 +47,7 @@ public class VanillaFinisherController {
}
@GetMapping("/{finisherId}")
public ResponseEntity<Finisher> get(@PathVariable UUID finisherId) {
public ResponseEntity<Finisher> get(@PathVariable("finisherId") UUID finisherId) {
return finisherRepository.findById(finisherId)
.map(entity -> ResponseEntity.ok(entity.toFinisher()))
.orElse(ResponseEntity.noContent().build());
@@ -76,7 +76,7 @@ public class VanillaFinisherController {
}
@PutMapping("/{finisherId}")
public ResponseEntity<Void> update(@PathVariable UUID finisherId, @RequestBody Finisher finisher) {
public ResponseEntity<Void> update(@PathVariable("finisherId") UUID finisherId, @RequestBody Finisher finisher) {
if (finisher.getKurzText() == null || finisher.getText() == null || finisher.getGeschlecht() == null) {
return ResponseEntity.badRequest().build();
}

View File

@@ -78,7 +78,7 @@ public class VanillaGameController {
}
@GetMapping("/{sessionId}")
public ResponseEntity<VanillaGame> getBySessionId(@PathVariable UUID sessionId) {
public ResponseEntity<VanillaGame> getBySessionId(@PathVariable("sessionId") UUID sessionId) {
return sessionRepository.findById(sessionId)
.map(entity -> ResponseEntity.ok(toSession(entity)))
.orElse(ResponseEntity.noContent().build());
@@ -132,7 +132,7 @@ public class VanillaGameController {
}
@PostMapping("/{sessionId}/abgeschlossen")
public ResponseEntity<Void> spielAbgeschlossen(@PathVariable UUID sessionId) {
public ResponseEntity<Void> spielAbgeschlossen(@PathVariable("sessionId") UUID sessionId) {
VanillaGameEntity entity = sessionRepository.findById(sessionId).orElse(null);
if (entity == null) return ResponseEntity.notFound().build();
ORDENTLICH_BEENDET.add(sessionId);
@@ -143,13 +143,13 @@ public class VanillaGameController {
/** Prüft ob eine Session ordentlich (nicht abgebrochen) beendet wurde. */
@GetMapping("/{sessionId}/beendet")
public ResponseEntity<Void> istBeendet(@PathVariable UUID sessionId) {
public ResponseEntity<Void> istBeendet(@PathVariable("sessionId") UUID sessionId) {
if (ORDENTLICH_BEENDET.remove(sessionId)) return ResponseEntity.ok().build();
return ResponseEntity.notFound().build();
}
@DeleteMapping("/{sessionId}/verlassen")
public ResponseEntity<Void> verlasseSpiel(@PathVariable UUID sessionId, Principal principal) {
public ResponseEntity<Void> verlasseSpiel(@PathVariable("sessionId") UUID sessionId, Principal principal) {
UUID userId = userService.requireUser(principal).getUserId();
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
@@ -174,7 +174,7 @@ public class VanillaGameController {
}
@PostMapping("/{sessionId}/aufgaben")
public ResponseEntity<Void> setAufgaben(@RequestBody AufgabenList list, @PathVariable UUID sessionId) {
public ResponseEntity<Void> setAufgaben(@RequestBody AufgabenList list, @PathVariable("sessionId") UUID sessionId) {
try {
if (list.size() > 1000) {
return ResponseEntity.badRequest().build();
@@ -201,7 +201,7 @@ public class VanillaGameController {
}
@GetMapping("/{sessionId}/aufgaben/next")
public ResponseEntity<VanillaAufgabeAnzeige> getNextAufgabe(@PathVariable UUID sessionId) {
public ResponseEntity<VanillaAufgabeAnzeige> getNextAufgabe(@PathVariable("sessionId") UUID sessionId) {
try {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null || session.getAufgaben() == null) {
@@ -229,7 +229,7 @@ public class VanillaGameController {
}
@PostMapping("/{sessionId}/mitspieler")
public ResponseEntity<Void> addMitspieler(@RequestBody VanillaMitspieler mitspieler, @PathVariable UUID sessionId) {
public ResponseEntity<Void> addMitspieler(@RequestBody VanillaMitspieler mitspieler, @PathVariable("sessionId") UUID sessionId) {
if (mitspieler.getName() == null || mitspieler.getVerfuegbareWerkzeuge() == null || mitspieler.getVerfuegbareWerkzeuge().isEmpty()) {
return ResponseEntity.badRequest().build();
}
@@ -253,7 +253,7 @@ public class VanillaGameController {
}
@GetMapping("/{sessionId}/finisher")
public ResponseEntity<List<VanillaAufgabeAnzeige>> getFinisher(@PathVariable UUID sessionId) {
public ResponseEntity<List<VanillaAufgabeAnzeige>> getFinisher(@PathVariable("sessionId") UUID sessionId) {
try {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.badRequest().build();
@@ -266,7 +266,7 @@ public class VanillaGameController {
}
@PostMapping("/{sessionId}/backToLevel5")
public ResponseEntity<Void> backToLevel5(@PathVariable UUID sessionId) {
public ResponseEntity<Void> backToLevel5(@PathVariable("sessionId") UUID sessionId) {
try {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.badRequest().build();
@@ -283,7 +283,7 @@ public class VanillaGameController {
}
@GetMapping("/{sessionId}/mitspieler/me")
public ResponseEntity<Map<String, Object>> getMeinMitspieler(@PathVariable UUID sessionId, Principal principal) {
public ResponseEntity<Map<String, Object>> getMeinMitspieler(@PathVariable("sessionId") UUID sessionId, Principal principal) {
UUID userId = userService.requireUser(principal).getUserId();
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
@@ -305,7 +305,7 @@ public class VanillaGameController {
@PostMapping("/{sessionId}/active-task/abschliessen")
public ResponseEntity<AbschliessenResponse> activeTaskAbschliessen(
@PathVariable UUID sessionId, @RequestBody AbschliessenRequest req) {
@PathVariable("sessionId") UUID sessionId, @RequestBody AbschliessenRequest req) {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
// Vanilla: keine Sperren/Strafen einfach activeTask löschen
@@ -319,7 +319,7 @@ public class VanillaGameController {
record ActiveTaskResponse(String taskJson, Long elapsedSeconds) {}
@PutMapping("/{sessionId}/active-task")
public ResponseEntity<Void> setActiveTask(@PathVariable UUID sessionId, @RequestBody ActiveTaskRequest req) {
public ResponseEntity<Void> setActiveTask(@PathVariable("sessionId") UUID sessionId, @RequestBody ActiveTaskRequest req) {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
session.setActiveTaskJson(req.taskJson());
@@ -329,7 +329,7 @@ public class VanillaGameController {
}
@DeleteMapping("/{sessionId}/active-task")
public ResponseEntity<Void> clearActiveTask(@PathVariable UUID sessionId) {
public ResponseEntity<Void> clearActiveTask(@PathVariable("sessionId") UUID sessionId) {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
session.setActiveTaskJson(null);
@@ -339,7 +339,7 @@ public class VanillaGameController {
}
@GetMapping("/{sessionId}/active-task")
public ResponseEntity<ActiveTaskResponse> getActiveTask(@PathVariable UUID sessionId) {
public ResponseEntity<ActiveTaskResponse> getActiveTask(@PathVariable("sessionId") UUID sessionId) {
VanillaGameEntity session = sessionRepository.findById(sessionId).orElse(null);
if (session == null) return ResponseEntity.notFound().build();
if (session.getActiveTaskJson() == null) return ResponseEntity.noContent().build();
@@ -352,7 +352,7 @@ public class VanillaGameController {
// ── Debug-Endpoint: vollständiger Entity-Zustand ──
@GetMapping("/{sessionId}/debug")
public ResponseEntity<Map<String, Object>> debug(@PathVariable UUID sessionId) {
public ResponseEntity<Map<String, Object>> debug(@PathVariable("sessionId") UUID sessionId) {
VanillaGameEntity entity = sessionRepository.findById(sessionId).orElse(null);
if (entity == null) return ResponseEntity.notFound().build();

View File

@@ -66,8 +66,8 @@ public class VanillaToyController {
@GetMapping("/list/user")
public ResponseEntity<ToyPage> listUser(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size,
Principal principal) {
UserEntity user = userService.requireUser(principal);
Page<ToyEntity> result = toyRepository.findByUserId(
@@ -77,8 +77,8 @@ public class VanillaToyController {
@GetMapping("/list/system")
public ResponseEntity<ToyPage> listSystem(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "" + DEFAULT_PAGE_SIZE) int size) {
Page<ToyEntity> result = toyRepository.findByUserIdIsNull(
PageRequest.of(page, size, Sort.by("name")));
return ResponseEntity.ok(toToyPage(result));
@@ -144,7 +144,7 @@ public class VanillaToyController {
}
@GetMapping("/{toyId}")
public ResponseEntity<Toy> get(@PathVariable UUID toyId) {
public ResponseEntity<Toy> get(@PathVariable("toyId") UUID toyId) {
return toyRepository.findById(toyId)
.map(entity -> ResponseEntity.ok(entity.toToy()))
.orElse(ResponseEntity.noContent().build());
@@ -177,7 +177,7 @@ public class VanillaToyController {
}
@PostMapping("/copy/{toyId}")
public ResponseEntity<Void> copy(@PathVariable UUID toyId, Principal principal) {
public ResponseEntity<Void> copy(@PathVariable("toyId") UUID toyId, Principal principal) {
UserEntity user = userService.requireUser(principal);
ToyEntity source = toyRepository.findById(toyId).orElse(null);
if (source == null) {
@@ -203,7 +203,7 @@ public class VanillaToyController {
}
@PutMapping("/{toyId}")
public ResponseEntity<Void> update(@PathVariable UUID toyId, @RequestBody Toy toy, Principal principal) {
public ResponseEntity<Void> update(@PathVariable("toyId") UUID toyId, @RequestBody Toy toy, Principal principal) {
if (toy.getName() == null || toy.getName().isBlank()) {
return ResponseEntity.badRequest().build();
}
@@ -232,7 +232,7 @@ public class VanillaToyController {
}
@DeleteMapping("/{toyId}")
public ResponseEntity<Void> delete(@PathVariable UUID toyId, Principal principal) {
public ResponseEntity<Void> delete(@PathVariable("toyId") UUID toyId, Principal principal) {
UserEntity user = userService.requireUser(principal);
ToyEntity toy = toyRepository.findById(toyId).orElse(null);
if (toy == null) {

View File

@@ -113,7 +113,7 @@ public class GruppeController {
// ── GET /gruppe/{id} ──
@GetMapping("/{id}")
public ResponseEntity<GruppeDto> getGruppe(@PathVariable UUID id, Principal principal) {
public ResponseEntity<GruppeDto> getGruppe(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -155,7 +155,7 @@ public class GruppeController {
// ── PUT /gruppe/{id} ──
@PutMapping("/{id}")
public ResponseEntity<GruppeDto> updateGruppe(@PathVariable UUID id,
public ResponseEntity<GruppeDto> updateGruppe(@PathVariable("id") UUID id,
@RequestBody UpdateGruppeRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -180,7 +180,7 @@ public class GruppeController {
// ── DELETE /gruppe/{id} ──
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteGruppe(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> deleteGruppe(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -215,7 +215,7 @@ public class GruppeController {
// ── POST /gruppe/{id}/join ──
@PostMapping("/{id}/join")
public ResponseEntity<Void> join(@PathVariable UUID id,
public ResponseEntity<Void> join(@PathVariable("id") UUID id,
@RequestBody(required = false) JoinRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -260,7 +260,7 @@ public class GruppeController {
// ── DELETE /gruppe/{id}/leave ──
@DeleteMapping("/{id}/leave")
public ResponseEntity<Void> leave(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> leave(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -272,7 +272,7 @@ public class GruppeController {
// ── GET /gruppe/{id}/members ──
@GetMapping("/{id}/members")
public ResponseEntity<List<Map<String, Object>>> getMembers(@PathVariable UUID id, Principal principal) {
public ResponseEntity<List<Map<String, Object>>> getMembers(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
if (mitgliedRepository.findFirstByGruppeIdAndUserId(id, myId).isEmpty())
@@ -298,8 +298,8 @@ public class GruppeController {
// ── DELETE /gruppe/{id}/members/{userId} ──
@DeleteMapping("/{id}/members/{userId}")
public ResponseEntity<Void> removeMember(@PathVariable UUID id,
@PathVariable UUID userId,
public ResponseEntity<Void> removeMember(@PathVariable("id") UUID id,
@PathVariable("userId") UUID userId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -313,8 +313,8 @@ public class GruppeController {
// ── POST /gruppe/{id}/members/{userId}/promote ──
@PostMapping("/{id}/members/{userId}/promote")
public ResponseEntity<Void> promote(@PathVariable UUID id,
@PathVariable UUID userId,
public ResponseEntity<Void> promote(@PathVariable("id") UUID id,
@PathVariable("userId") UUID userId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -331,7 +331,7 @@ public class GruppeController {
// ── GET /gruppe/{id}/requests ──
@GetMapping("/{id}/requests")
public ResponseEntity<List<BeitrittsanfrageDto>> getRequests(@PathVariable UUID id, Principal principal) {
public ResponseEntity<List<BeitrittsanfrageDto>> getRequests(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
if (!isAdmin(id, myId)) return ResponseEntity.status(403).build();
@@ -353,8 +353,8 @@ public class GruppeController {
// ── POST /gruppe/{id}/requests/{reqId}/approve ──
@PostMapping("/{id}/requests/{reqId}/approve")
public ResponseEntity<Void> approveRequest(@PathVariable UUID id,
@PathVariable UUID reqId,
public ResponseEntity<Void> approveRequest(@PathVariable("id") UUID id,
@PathVariable("reqId") UUID reqId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -383,8 +383,8 @@ public class GruppeController {
// ── DELETE /gruppe/{id}/requests/{reqId} ──
@DeleteMapping("/{id}/requests/{reqId}")
public ResponseEntity<Void> rejectRequest(@PathVariable UUID id,
@PathVariable UUID reqId,
public ResponseEntity<Void> rejectRequest(@PathVariable("id") UUID id,
@PathVariable("reqId") UUID reqId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -456,7 +456,7 @@ public class GruppeController {
// ── DELETE /gruppe/{id}/requests/mine (withdraw own request) ──
@DeleteMapping("/{id}/requests/mine")
public ResponseEntity<Void> withdrawRequest(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> withdrawRequest(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();

View File

@@ -68,8 +68,8 @@ public class GruppenbeitragController {
// ── GET /gruppen/{id}/posts/{postId} ──
@GetMapping("/gruppen/{id}/posts/{postId}")
public ResponseEntity<GruppenbeitragDto> getPost(@PathVariable UUID id,
@PathVariable UUID postId,
public ResponseEntity<GruppenbeitragDto> getPost(@PathVariable("id") UUID id,
@PathVariable("postId") UUID postId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -83,9 +83,9 @@ public class GruppenbeitragController {
// ── GET /gruppen/{id}/posts ──
@GetMapping("/gruppen/{id}/posts")
public ResponseEntity<PostsPage> getPosts(@PathVariable UUID id,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size,
public ResponseEntity<PostsPage> getPosts(@PathVariable("id") UUID id,
@RequestParam(name = "page", defaultValue = "0") int page,
@RequestParam(name = "size", defaultValue = "10") int size,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -103,7 +103,7 @@ public class GruppenbeitragController {
// ── POST /gruppen/{id}/posts ──
@PostMapping("/gruppen/{id}/posts")
public ResponseEntity<GruppenbeitragDto> createPost(@PathVariable UUID id,
public ResponseEntity<GruppenbeitragDto> createPost(@PathVariable("id") UUID id,
@RequestBody CreateBeitragRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -151,8 +151,8 @@ public class GruppenbeitragController {
// ── DELETE /gruppen/{id}/posts/{postId} ──
@DeleteMapping("/gruppen/{id}/posts/{postId}")
public ResponseEntity<Void> deletePost(@PathVariable UUID id,
@PathVariable UUID postId,
public ResponseEntity<Void> deletePost(@PathVariable("id") UUID id,
@PathVariable("postId") UUID postId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -175,8 +175,8 @@ public class GruppenbeitragController {
// ── POST /gruppen/{id}/posts/{postId}/like ──
@PostMapping("/gruppen/{id}/posts/{postId}/like")
public ResponseEntity<Void> toggleLike(@PathVariable UUID id,
@PathVariable UUID postId,
public ResponseEntity<Void> toggleLike(@PathVariable("id") UUID id,
@PathVariable("postId") UUID postId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
@@ -190,8 +190,8 @@ public class GruppenbeitragController {
// ── POST /gruppen/{id}/posts/{postId}/vote ──
@PostMapping("/gruppen/{id}/posts/{postId}/vote")
public ResponseEntity<Void> vote(@PathVariable UUID id,
@PathVariable UUID postId,
public ResponseEntity<Void> vote(@PathVariable("id") UUID id,
@PathVariable("postId") UUID postId,
@RequestBody VoteRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -235,8 +235,8 @@ public class GruppenbeitragController {
// ── POST /gruppen/{id}/posts/{postId}/report ──
@PostMapping("/gruppen/{id}/posts/{postId}/report")
public ResponseEntity<Void> report(@PathVariable UUID id,
@PathVariable UUID postId,
public ResponseEntity<Void> report(@PathVariable("id") UUID id,
@PathVariable("postId") UUID postId,
@RequestBody ReportRequest req,
Principal principal) {
UUID myId = resolveMyId(principal);
@@ -263,7 +263,7 @@ public class GruppenbeitragController {
// ── GET /gruppen/{id}/reports ──
@GetMapping("/gruppen/{id}/reports")
public ResponseEntity<List<BeitragMeldungDto>> getReports(@PathVariable UUID id, Principal principal) {
public ResponseEntity<List<BeitragMeldungDto>> getReports(@PathVariable("id") UUID id, Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();
if (mitgliedRepository.findFirstByGruppeIdAndUserId(id, myId)
@@ -288,8 +288,8 @@ public class GruppenbeitragController {
// ── DELETE /gruppen/{id}/reports/{meldungId} ──
@DeleteMapping("/gruppen/{id}/reports/{meldungId}")
public ResponseEntity<Void> dismissReport(@PathVariable UUID id,
@PathVariable UUID meldungId,
public ResponseEntity<Void> dismissReport(@PathVariable("id") UUID id,
@PathVariable("meldungId") UUID meldungId,
Principal principal) {
UUID myId = resolveMyId(principal);
if (myId == null) return ResponseEntity.status(401).build();

View File

@@ -46,7 +46,7 @@ public class KommentarController {
@GetMapping
public ResponseEntity<List<KommentarDto>> getKommentare(
@RequestParam String targetType,
@RequestParam UUID targetId,
@RequestParam("targetId") UUID targetId,
Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
@@ -82,7 +82,7 @@ public class KommentarController {
}
@DeleteMapping("/{kommentarId}")
public ResponseEntity<Void> deleteKommentar(@PathVariable UUID kommentarId, Principal principal) {
public ResponseEntity<Void> deleteKommentar(@PathVariable("kommentarId") UUID kommentarId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var kOpt = kommentarRepository.findById(kommentarId);
@@ -103,7 +103,7 @@ public class KommentarController {
}
@PostMapping("/{kommentarId}/like")
public ResponseEntity<Void> toggleLike(@PathVariable UUID kommentarId, Principal principal) {
public ResponseEntity<Void> toggleLike(@PathVariable("kommentarId") UUID kommentarId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
if (kommentarRepository.findById(kommentarId).isEmpty()) return ResponseEntity.notFound().build();

View File

@@ -61,7 +61,7 @@ public class NotificationController {
@Transactional
@PostMapping("/{id}/read")
public ResponseEntity<Void> markOneRead(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> markOneRead(@PathVariable("id") UUID id, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
messageRepository.markNotificationAsRead(id, myId, LocalDateTime.now());
return ResponseEntity.noContent().build();

View File

@@ -48,7 +48,7 @@ public class PinnwandController {
record CreateEintragRequest(UUID profilUserId, String text) {}
@GetMapping
public ResponseEntity<List<PinnwandEintragDto>> getEintraege(@RequestParam UUID userId, Principal principal) {
public ResponseEntity<List<PinnwandEintragDto>> getEintraege(@RequestParam("userId") UUID userId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
List<PinnwandEintragDto> dtos = eintragRepository
@@ -79,7 +79,7 @@ public class PinnwandController {
}
@DeleteMapping("/{eintragId}")
public ResponseEntity<Void> deleteEintrag(@PathVariable UUID eintragId, Principal principal) {
public ResponseEntity<Void> deleteEintrag(@PathVariable("eintragId") UUID eintragId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var eintragOpt = eintragRepository.findById(eintragId);
@@ -101,7 +101,7 @@ public class PinnwandController {
}
@PostMapping("/{eintragId}/like")
public ResponseEntity<Void> toggleLike(@PathVariable UUID eintragId, Principal principal) {
public ResponseEntity<Void> toggleLike(@PathVariable("eintragId") UUID eintragId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
if (eintragRepository.findById(eintragId).isEmpty()) return ResponseEntity.notFound().build();

View File

@@ -62,7 +62,7 @@ public class ProfileImageController {
}
@GetMapping
public ResponseEntity<List<ProfileImageDto>> getImages(@RequestParam UUID userId, Principal principal) {
public ResponseEntity<List<ProfileImageDto>> getImages(@RequestParam("userId") UUID userId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
List<ProfileImageEntity> images = profileImageRepository.findByUserIdOrderByUploadedAtDesc(userId);
@@ -71,7 +71,7 @@ public class ProfileImageController {
}
@DeleteMapping("/{imageId}")
public ResponseEntity<Void> deleteImage(@PathVariable UUID imageId, Principal principal) {
public ResponseEntity<Void> deleteImage(@PathVariable("imageId") UUID imageId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
var imgOpt = profileImageRepository.findById(imageId);
@@ -85,7 +85,7 @@ public class ProfileImageController {
}
@PostMapping("/{imageId}/like")
public ResponseEntity<Void> toggleLike(@PathVariable UUID imageId, Principal principal) {
public ResponseEntity<Void> toggleLike(@PathVariable("imageId") UUID imageId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
if (profileImageRepository.findById(imageId).isEmpty()) return ResponseEntity.notFound().build();

View File

@@ -0,0 +1,78 @@
package de.oaa.xxx.social;
import de.oaa.xxx.social.entity.ProfileVisitEntity;
import de.oaa.xxx.social.repository.ProfileVisitRepository;
import de.oaa.xxx.user.UserEntity;
import de.oaa.xxx.user.UserRepository;
import de.oaa.xxx.user.UserService;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.security.Principal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
@RestController
@RequestMapping("/social/profile-visits")
public class ProfileVisitController {
private final ProfileVisitRepository profileVisitRepository;
private final UserRepository userRepository;
private final UserService userService;
public ProfileVisitController(ProfileVisitRepository profileVisitRepository,
UserRepository userRepository,
UserService userService) {
this.profileVisitRepository = profileVisitRepository;
this.userRepository = userRepository;
this.userService = userService;
}
record VisitorDto(UUID userId, String name, String profilePicture, LocalDateTime visitedAt) {}
@PostMapping("/{profileId}")
public ResponseEntity<Void> recordVisit(@PathVariable("profileId") UUID profileId, Principal principal) {
if (principal == null) return ResponseEntity.ok().build();
UUID visitorId = userService.requireUser(principal).getUserId();
// Eigenes Profil nicht tracken
if (visitorId.equals(profileId)) return ResponseEntity.ok().build();
// 1-Stunden-Deduplication
LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1);
if (profileVisitRepository.findByProfileIdAndVisitorIdAndVisitedAtAfter(profileId, visitorId, oneHourAgo).isPresent()) {
return ResponseEntity.ok().build();
}
ProfileVisitEntity visit = new ProfileVisitEntity();
visit.setVisitId(UUID.randomUUID());
visit.setProfileId(profileId);
visit.setVisitorId(visitorId);
visit.setVisitedAt(LocalDateTime.now());
profileVisitRepository.save(visit);
return ResponseEntity.ok().build();
}
@GetMapping("/my-visitors")
public ResponseEntity<List<VisitorDto>> getMyVisitors(Principal principal) {
UUID profileId = userService.requireUser(principal).getUserId();
List<ProfileVisitEntity> visits = profileVisitRepository.findRecentByProfileId(
profileId, PageRequest.of(0, 10));
List<VisitorDto> result = visits.stream()
.map(v -> {
Optional<UserEntity> visitor = userRepository.findById(v.getVisitorId());
return visitor.map(u -> new VisitorDto(
u.getUserId(), u.getName(), u.getProfilePicture(), v.getVisitedAt()
)).orElse(null);
})
.filter(Objects::nonNull)
.toList();
return ResponseEntity.ok(result);
}
}

View File

@@ -58,7 +58,7 @@ public class SocialController {
// ── User Profile ──
@GetMapping("/users/{userId}")
public ResponseEntity<UserProfile> getUserProfile(@PathVariable UUID userId, Principal principal) {
public ResponseEntity<UserProfile> getUserProfile(@PathVariable("userId") UUID userId, Principal principal) {
UUID myId = userService.requireUser(principal).getUserId();
return userRepository.findById(userId)
.map(u -> ResponseEntity.ok(toUserProfileWithStatus(u, myId)))
@@ -142,7 +142,7 @@ public class SocialController {
}
@GetMapping("/friends/user/{userId}")
public ResponseEntity<List<UserProfile>> getFriendsOfUser(@PathVariable UUID userId, Principal principal) {
public ResponseEntity<List<UserProfile>> getFriendsOfUser(@PathVariable("userId") UUID userId, Principal principal) {
userService.requireUser(principal);
List<UserProfile> profiles = friendshipRepository.findFriends(userId, Status.ACCEPTED).stream()
.map(f -> {
@@ -267,7 +267,7 @@ public class SocialController {
@GetMapping("/messages/{partnerId}")
public ResponseEntity<?> getConversation(
@PathVariable UUID partnerId,
@PathVariable("partnerId") UUID partnerId,
@RequestParam(required = false) String before,
@RequestParam(required = false) String after,
Principal principal) {

View File

@@ -0,0 +1,28 @@
package de.oaa.xxx.social.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.UUID;
@Getter
@Setter
@Entity
@Table(name = "profile_visit")
public class ProfileVisitEntity {
@Id
@Column
private UUID visitId;
@Column(nullable = false)
private UUID profileId;
@Column(nullable = false)
private UUID visitorId;
@Column(nullable = false)
private LocalDateTime visitedAt;
}

View File

@@ -0,0 +1,25 @@
package de.oaa.xxx.social.repository;
import de.oaa.xxx.social.entity.ProfileVisitEntity;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public interface ProfileVisitRepository extends JpaRepository<ProfileVisitEntity, UUID> {
Optional<ProfileVisitEntity> findByProfileIdAndVisitorIdAndVisitedAtAfter(
UUID profileId, UUID visitorId, LocalDateTime after);
@Query("SELECT v FROM ProfileVisitEntity v WHERE v.profileId = :profileId ORDER BY v.visitedAt DESC")
List<ProfileVisitEntity> findRecentByProfileId(@Param("profileId") UUID profileId, Pageable pageable);
void deleteByProfileId(UUID profileId);
void deleteByVisitorId(UUID visitorId);
}

View File

@@ -88,7 +88,7 @@ public class LoginController {
}
@GetMapping("/{userId}")
public ResponseEntity<User> get(@PathVariable UUID userId) {
public ResponseEntity<User> get(@PathVariable("userId") UUID userId) {
return userRepository.findById(userId)
.map(entity -> ResponseEntity.ok(entity.toUser()))
.orElse(ResponseEntity.noContent().build());

View File

@@ -24,6 +24,10 @@ public class User {
private Neigung neigung;
private Beziehungsstatus beziehungsstatus;
private String beschreibung;
private boolean datingAktiv;
private String datingStadt;
private Double datingLat;
private Double datingLon;
public Integer getAlter() {
return geburtsdatum != null ? Period.between(geburtsdatum, LocalDate.now()).getYears() : null;

View File

@@ -91,6 +91,7 @@ public class UserController {
record TtlockUserConfigRequest(String username, String password, Integer lockId) {}
record ProfileRequest(Integer groesse, Integer gewicht,
Geschlecht geschlecht, Neigung neigung, Beziehungsstatus beziehungsstatus, String beschreibung) {}
record DatingRequest(boolean datingAktiv, String datingStadt, Double datingLat, Double datingLon) {}
record PrivacyRequest(
Sichtbarkeit sichtbarkeitGrunddaten,
Sichtbarkeit sichtbarkeitGalerie,
@@ -102,6 +103,21 @@ public class UserController {
Sichtbarkeit sichtbarkeitVorlieben,
Boolean profilBeiVeroeffentlichungenSichtbar) {}
@PutMapping("/me/dating")
public ResponseEntity<Void> updateDating(@RequestBody DatingRequest request, Principal principal) {
if (request.datingAktiv() && (request.datingStadt() == null || request.datingStadt().isBlank())) {
return ResponseEntity.badRequest().build();
}
var user = userService.requireUser(principal);
user.setDatingAktiv(request.datingAktiv());
user.setDatingStadt(request.datingAktiv() ? request.datingStadt().trim() : null);
user.setDatingLat(request.datingAktiv() ? request.datingLat() : null);
user.setDatingLon(request.datingAktiv() ? request.datingLon() : null);
userRepository.save(user);
LOGGER.info("User {} hat Dating-Einstellungen aktualisiert: aktiv={}", user.getUserId(), request.datingAktiv());
return ResponseEntity.ok().build();
}
@PutMapping("/me/picture")
public ResponseEntity<Void> updateProfilePicture(@RequestBody ProfilePictureRequest request, Principal principal) {
var user = userService.requireUser(principal);
@@ -220,7 +236,7 @@ public class UserController {
}
@GetMapping("/{userId}/bdsm-defaults")
public ResponseEntity<Map<String, Object>> getBdsmDefaultsForUser(@PathVariable UUID userId) {
public ResponseEntity<Map<String, Object>> getBdsmDefaultsForUser(@PathVariable("userId") UUID userId) {
var userOpt = userRepository.findById(userId);
if (userOpt.isEmpty()) return ResponseEntity.notFound().build();
UserEntity user = userOpt.get();
@@ -408,7 +424,7 @@ public class UserController {
}
@DeleteMapping("/me/ttlock/open/{keyboardPwdId}")
public ResponseEntity<Void> ttlockCloseOpen(@PathVariable int keyboardPwdId, Principal principal) {
public ResponseEntity<Void> ttlockCloseOpen(@PathVariable("keyboardPwdId") int keyboardPwdId, Principal principal) {
UUID userId = userService.requireUser(principal).getUserId();
var userCfg = ttLockUserConfigRepository.findById(userId).orElse(null);

View File

@@ -99,6 +99,19 @@ public class UserEntity {
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
private boolean profilBeiVeroeffentlichungenSichtbar = false;
// ── Dating ──
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
private boolean datingAktiv = false;
@Column(length = 200)
private String datingStadt;
@Column
private Double datingLat;
@Column
private Double datingLon;
public Integer getAlter() {
return geburtsdatum != null ? Period.between(geburtsdatum, LocalDate.now()).getYears() : null;
}
@@ -121,6 +134,10 @@ public class UserEntity {
user.setNeigung(neigung);
user.setBeziehungsstatus(beziehungsstatus);
user.setBeschreibung(beschreibung);
user.setDatingAktiv(datingAktiv);
user.setDatingStadt(datingStadt);
user.setDatingLat(datingLat);
user.setDatingLon(datingLon);
return user;
}
}

View File

@@ -71,7 +71,7 @@ public class VorliebenAdminController {
}
@PutMapping("/kategorien/{id}")
public ResponseEntity<Void> updateKategorie(@PathVariable UUID id,
public ResponseEntity<Void> updateKategorie(@PathVariable("id") UUID id,
@RequestBody KategorieRequest req,
Principal principal) {
requireAdmin(principal);
@@ -85,7 +85,7 @@ public class VorliebenAdminController {
}
@DeleteMapping("/kategorien/{id}")
public ResponseEntity<Void> deleteKategorie(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> deleteKategorie(@PathVariable("id") UUID id, Principal principal) {
requireAdmin(principal);
if (!kategorieRepository.existsById(id)) return ResponseEntity.notFound().build();
if (itemRepository.existsByKategorieId(id)) {
@@ -126,7 +126,7 @@ public class VorliebenAdminController {
}
@PutMapping("/items/{id}")
public ResponseEntity<Void> updateItem(@PathVariable UUID id,
public ResponseEntity<Void> updateItem(@PathVariable("id") UUID id,
@RequestBody ItemRequest req,
Principal principal) {
requireAdmin(principal);
@@ -143,7 +143,7 @@ public class VorliebenAdminController {
}
@DeleteMapping("/items/{id}")
public ResponseEntity<Void> deleteItem(@PathVariable UUID id, Principal principal) {
public ResponseEntity<Void> deleteItem(@PathVariable("id") UUID id, Principal principal) {
requireAdmin(principal);
VorliebeItemEntity entity = itemRepository.findById(id).orElse(null);
if (entity == null) return ResponseEntity.notFound().build();

View File

@@ -110,7 +110,7 @@ public class VorliebenController {
/** Returns another user's ratings, respecting their privacy setting. */
@GetMapping("/user/{userId}")
public ResponseEntity<Map<String, Object>> getUserVorlieben(
@PathVariable UUID userId, Principal principal) {
@PathVariable("userId") UUID userId, Principal principal) {
UserEntity targetUser = userRepository.findById(userId).orElse(null);
if (targetUser == null) return ResponseEntity.notFound().build();