diff --git a/bin/main/application.properties b/bin/main/application.properties index 5432f20..af966fe 100644 --- a/bin/main/application.properties +++ b/bin/main/application.properties @@ -55,6 +55,7 @@ server.port=8080 server.servlet.context-path=/ server.shutdown=graceful spring.lifecycle.timeout-per-shutdown-phase=5s +server.tomcat.max-http-header-size=65536 # Jackson – Datumsformat als ISO-8601 String statt numerischem Array spring.jackson.serialization.write-dates-as-timestamps=false diff --git a/bin/main/de/oaa/xxx/XxxThegameApplication.class b/bin/main/de/oaa/xxx/XxxThegameApplication.class index 4d56647..ce5bdb0 100644 Binary files a/bin/main/de/oaa/xxx/XxxThegameApplication.class and b/bin/main/de/oaa/xxx/XxxThegameApplication.class differ diff --git a/bin/main/de/oaa/xxx/admin/AdminController.class b/bin/main/de/oaa/xxx/admin/AdminController.class index b89cad0..ac8efa6 100644 Binary files a/bin/main/de/oaa/xxx/admin/AdminController.class and b/bin/main/de/oaa/xxx/admin/AdminController.class differ diff --git a/bin/main/de/oaa/xxx/admin/AdminEntity.class b/bin/main/de/oaa/xxx/admin/AdminEntity.class index ad90fce..17cc9c1 100644 Binary files a/bin/main/de/oaa/xxx/admin/AdminEntity.class and b/bin/main/de/oaa/xxx/admin/AdminEntity.class differ diff --git a/bin/main/de/oaa/xxx/admin/AdminRepository.class b/bin/main/de/oaa/xxx/admin/AdminRepository.class index 910ae7a..a8c964b 100644 Binary files a/bin/main/de/oaa/xxx/admin/AdminRepository.class and b/bin/main/de/oaa/xxx/admin/AdminRepository.class differ diff --git a/bin/main/de/oaa/xxx/admin/AdminRolle.class b/bin/main/de/oaa/xxx/admin/AdminRolle.class index 4f28ec9..f9ac4fc 100644 Binary files a/bin/main/de/oaa/xxx/admin/AdminRolle.class and b/bin/main/de/oaa/xxx/admin/AdminRolle.class differ diff --git a/bin/main/de/oaa/xxx/config/JwtFilter.class b/bin/main/de/oaa/xxx/config/JwtFilter.class index a872735..8bc0e48 100644 Binary files a/bin/main/de/oaa/xxx/config/JwtFilter.class and b/bin/main/de/oaa/xxx/config/JwtFilter.class differ diff --git a/bin/main/de/oaa/xxx/config/JwtService.class b/bin/main/de/oaa/xxx/config/JwtService.class index eb742ca..c2b4a84 100644 Binary files a/bin/main/de/oaa/xxx/config/JwtService.class and b/bin/main/de/oaa/xxx/config/JwtService.class differ diff --git a/bin/main/de/oaa/xxx/config/SchemaMigration.class b/bin/main/de/oaa/xxx/config/SchemaMigration.class index 522247b..ac22288 100644 Binary files a/bin/main/de/oaa/xxx/config/SchemaMigration.class and b/bin/main/de/oaa/xxx/config/SchemaMigration.class differ diff --git a/bin/main/de/oaa/xxx/config/SecurityConfig.class b/bin/main/de/oaa/xxx/config/SecurityConfig.class index 06c219f..6235a30 100644 Binary files a/bin/main/de/oaa/xxx/config/SecurityConfig.class and b/bin/main/de/oaa/xxx/config/SecurityConfig.class differ diff --git a/bin/main/de/oaa/xxx/config/StringListConverter$1.class b/bin/main/de/oaa/xxx/config/StringListConverter$1.class index 0560e72..08a8f27 100644 Binary files a/bin/main/de/oaa/xxx/config/StringListConverter$1.class and b/bin/main/de/oaa/xxx/config/StringListConverter$1.class differ diff --git a/bin/main/de/oaa/xxx/config/StringListConverter.class b/bin/main/de/oaa/xxx/config/StringListConverter.class index c909d3d..2ca449c 100644 Binary files a/bin/main/de/oaa/xxx/config/StringListConverter.class and b/bin/main/de/oaa/xxx/config/StringListConverter.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingController$VorliebeChipDto.class b/bin/main/de/oaa/xxx/dating/DatingController$VorliebeChipDto.class new file mode 100644 index 0000000..5920573 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingController$VorliebeChipDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingController.class b/bin/main/de/oaa/xxx/dating/DatingController.class index 58680e0..462a8ad 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingController.class and b/bin/main/de/oaa/xxx/dating/DatingController.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateCleanupTask.class b/bin/main/de/oaa/xxx/dating/DatingDateCleanupTask.class new file mode 100644 index 0000000..b32e993 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateCleanupTask.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController$CreateDateRequest.class b/bin/main/de/oaa/xxx/dating/DatingDateController$CreateDateRequest.class new file mode 100644 index 0000000..16d9c65 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController$CreateDateRequest.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController$DateInterestDto.class b/bin/main/de/oaa/xxx/dating/DatingDateController$DateInterestDto.class new file mode 100644 index 0000000..9d2ead0 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController$DateInterestDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController$DatesResult.class b/bin/main/de/oaa/xxx/dating/DatingDateController$DatesResult.class new file mode 100644 index 0000000..171735c Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController$DatesResult.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController$DatingDateDto.class b/bin/main/de/oaa/xxx/dating/DatingDateController$DatingDateDto.class new file mode 100644 index 0000000..28ccc0c Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController$DatingDateDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController$InterestResult.class b/bin/main/de/oaa/xxx/dating/DatingDateController$InterestResult.class new file mode 100644 index 0000000..2343c68 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController$InterestResult.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateController.class b/bin/main/de/oaa/xxx/dating/DatingDateController.class new file mode 100644 index 0000000..c8b1e68 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateController.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateEntity.class b/bin/main/de/oaa/xxx/dating/DatingDateEntity.class new file mode 100644 index 0000000..f717698 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateEntity.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateInterestEntity.class b/bin/main/de/oaa/xxx/dating/DatingDateInterestEntity.class new file mode 100644 index 0000000..615524b Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateInterestEntity.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateInterestRepository.class b/bin/main/de/oaa/xxx/dating/DatingDateInterestRepository.class new file mode 100644 index 0000000..48d99e8 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateInterestRepository.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingDateRepository.class b/bin/main/de/oaa/xxx/dating/DatingDateRepository.class new file mode 100644 index 0000000..9bf2324 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingDateRepository.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingLikeEntity.class b/bin/main/de/oaa/xxx/dating/DatingLikeEntity.class index 660071e..26eb99a 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingLikeEntity.class and b/bin/main/de/oaa/xxx/dating/DatingLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingLikeRepository.class b/bin/main/de/oaa/xxx/dating/DatingLikeRepository.class index adb5647..17736fb 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingLikeRepository.class and b/bin/main/de/oaa/xxx/dating/DatingLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingMatchEntity.class b/bin/main/de/oaa/xxx/dating/DatingMatchEntity.class index 9abfeee..19ab0a8 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingMatchEntity.class and b/bin/main/de/oaa/xxx/dating/DatingMatchEntity.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingMatchRepository.class b/bin/main/de/oaa/xxx/dating/DatingMatchRepository.class index 3a17d49..02fb74f 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingMatchRepository.class and b/bin/main/de/oaa/xxx/dating/DatingMatchRepository.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingPassEntity.class b/bin/main/de/oaa/xxx/dating/DatingPassEntity.class new file mode 100644 index 0000000..f915c8e Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingPassEntity.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingPassRepository.class b/bin/main/de/oaa/xxx/dating/DatingPassRepository.class new file mode 100644 index 0000000..6b9c449 Binary files /dev/null and b/bin/main/de/oaa/xxx/dating/DatingPassRepository.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$DatingFilter.class b/bin/main/de/oaa/xxx/dating/DatingService$DatingFilter.class index 7d55eaf..d32153b 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$DatingFilter.class and b/bin/main/de/oaa/xxx/dating/DatingService$DatingFilter.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$DatingProfileDto.class b/bin/main/de/oaa/xxx/dating/DatingService$DatingProfileDto.class index ae283ff..71185cb 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$DatingProfileDto.class and b/bin/main/de/oaa/xxx/dating/DatingService$DatingProfileDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$IdsResult.class b/bin/main/de/oaa/xxx/dating/DatingService$IdsResult.class index f447355..9d59fe8 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$IdsResult.class and b/bin/main/de/oaa/xxx/dating/DatingService$IdsResult.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$LikeResult.class b/bin/main/de/oaa/xxx/dating/DatingService$LikeResult.class index c503876..6893a92 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$LikeResult.class and b/bin/main/de/oaa/xxx/dating/DatingService$LikeResult.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$LikerDto.class b/bin/main/de/oaa/xxx/dating/DatingService$LikerDto.class index f1c87a8..f5693a3 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$LikerDto.class and b/bin/main/de/oaa/xxx/dating/DatingService$LikerDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$MatchDto.class b/bin/main/de/oaa/xxx/dating/DatingService$MatchDto.class index 9c9f9e3..9e46547 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$MatchDto.class and b/bin/main/de/oaa/xxx/dating/DatingService$MatchDto.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService$WhoLikesMeResult.class b/bin/main/de/oaa/xxx/dating/DatingService$WhoLikesMeResult.class index d5df204..5702f53 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService$WhoLikesMeResult.class and b/bin/main/de/oaa/xxx/dating/DatingService$WhoLikesMeResult.class differ diff --git a/bin/main/de/oaa/xxx/dating/DatingService.class b/bin/main/de/oaa/xxx/dating/DatingService.class index d0c121c..ad63748 100644 Binary files a/bin/main/de/oaa/xxx/dating/DatingService.class and b/bin/main/de/oaa/xxx/dating/DatingService.class differ diff --git a/bin/main/de/oaa/xxx/emailchange/EmailChangeController.class b/bin/main/de/oaa/xxx/emailchange/EmailChangeController.class index 25978e2..3acc18f 100644 Binary files a/bin/main/de/oaa/xxx/emailchange/EmailChangeController.class and b/bin/main/de/oaa/xxx/emailchange/EmailChangeController.class differ diff --git a/bin/main/de/oaa/xxx/emailchange/EmailChangeEntity.class b/bin/main/de/oaa/xxx/emailchange/EmailChangeEntity.class index 0c1fe3c..512da06 100644 Binary files a/bin/main/de/oaa/xxx/emailchange/EmailChangeEntity.class and b/bin/main/de/oaa/xxx/emailchange/EmailChangeEntity.class differ diff --git a/bin/main/de/oaa/xxx/emailchange/EmailChangeRepository.class b/bin/main/de/oaa/xxx/emailchange/EmailChangeRepository.class index ba3eabf..12f6146 100644 Binary files a/bin/main/de/oaa/xxx/emailchange/EmailChangeRepository.class and b/bin/main/de/oaa/xxx/emailchange/EmailChangeRepository.class differ diff --git a/bin/main/de/oaa/xxx/feed/FeedController.class b/bin/main/de/oaa/xxx/feed/FeedController.class index 7766542..26cd24d 100644 Binary files a/bin/main/de/oaa/xxx/feed/FeedController.class and b/bin/main/de/oaa/xxx/feed/FeedController.class differ diff --git a/bin/main/de/oaa/xxx/feed/entity/FeedPostEntity.class b/bin/main/de/oaa/xxx/feed/entity/FeedPostEntity.class index 0fced62..61dc820 100644 Binary files a/bin/main/de/oaa/xxx/feed/entity/FeedPostEntity.class and b/bin/main/de/oaa/xxx/feed/entity/FeedPostEntity.class differ diff --git a/bin/main/de/oaa/xxx/feed/entity/FeedPostLikeEntity.class b/bin/main/de/oaa/xxx/feed/entity/FeedPostLikeEntity.class index 0e50a44..a186e3b 100644 Binary files a/bin/main/de/oaa/xxx/feed/entity/FeedPostLikeEntity.class and b/bin/main/de/oaa/xxx/feed/entity/FeedPostLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/feed/entity/FeedPostOptionEntity.class b/bin/main/de/oaa/xxx/feed/entity/FeedPostOptionEntity.class index e1c95ef..7aaaee7 100644 Binary files a/bin/main/de/oaa/xxx/feed/entity/FeedPostOptionEntity.class and b/bin/main/de/oaa/xxx/feed/entity/FeedPostOptionEntity.class differ diff --git a/bin/main/de/oaa/xxx/feed/entity/FeedPostVoteEntity.class b/bin/main/de/oaa/xxx/feed/entity/FeedPostVoteEntity.class index d34b795..63ccdc4 100644 Binary files a/bin/main/de/oaa/xxx/feed/entity/FeedPostVoteEntity.class and b/bin/main/de/oaa/xxx/feed/entity/FeedPostVoteEntity.class differ diff --git a/bin/main/de/oaa/xxx/feed/repository/FeedPostLikeRepository.class b/bin/main/de/oaa/xxx/feed/repository/FeedPostLikeRepository.class index 884509d..1c15590 100644 Binary files a/bin/main/de/oaa/xxx/feed/repository/FeedPostLikeRepository.class and b/bin/main/de/oaa/xxx/feed/repository/FeedPostLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/feed/repository/FeedPostOptionRepository.class b/bin/main/de/oaa/xxx/feed/repository/FeedPostOptionRepository.class index abbd7e9..5c24e62 100644 Binary files a/bin/main/de/oaa/xxx/feed/repository/FeedPostOptionRepository.class and b/bin/main/de/oaa/xxx/feed/repository/FeedPostOptionRepository.class differ diff --git a/bin/main/de/oaa/xxx/feed/repository/FeedPostRepository.class b/bin/main/de/oaa/xxx/feed/repository/FeedPostRepository.class index 1af5cfb..f52cab9 100644 Binary files a/bin/main/de/oaa/xxx/feed/repository/FeedPostRepository.class and b/bin/main/de/oaa/xxx/feed/repository/FeedPostRepository.class differ diff --git a/bin/main/de/oaa/xxx/feed/repository/FeedPostVoteRepository.class b/bin/main/de/oaa/xxx/feed/repository/FeedPostVoteRepository.class index ba6ac0c..a24eff9 100644 Binary files a/bin/main/de/oaa/xxx/feed/repository/FeedPostVoteRepository.class and b/bin/main/de/oaa/xxx/feed/repository/FeedPostVoteRepository.class differ diff --git a/bin/main/de/oaa/xxx/feedback/FeedbackController.class b/bin/main/de/oaa/xxx/feedback/FeedbackController.class index a0d2bc6..3f13c06 100644 Binary files a/bin/main/de/oaa/xxx/feedback/FeedbackController.class and b/bin/main/de/oaa/xxx/feedback/FeedbackController.class differ diff --git a/bin/main/de/oaa/xxx/feedback/FeedbackEntity.class b/bin/main/de/oaa/xxx/feedback/FeedbackEntity.class index 6369017..153de22 100644 Binary files a/bin/main/de/oaa/xxx/feedback/FeedbackEntity.class and b/bin/main/de/oaa/xxx/feedback/FeedbackEntity.class differ diff --git a/bin/main/de/oaa/xxx/feedback/FeedbackRepository.class b/bin/main/de/oaa/xxx/feedback/FeedbackRepository.class index 8d16ab6..5f9f435 100644 Binary files a/bin/main/de/oaa/xxx/feedback/FeedbackRepository.class and b/bin/main/de/oaa/xxx/feedback/FeedbackRepository.class differ diff --git a/bin/main/de/oaa/xxx/feedback/FeedbackStatus.class b/bin/main/de/oaa/xxx/feedback/FeedbackStatus.class index 1307490..8b12c02 100644 Binary files a/bin/main/de/oaa/xxx/feedback/FeedbackStatus.class and b/bin/main/de/oaa/xxx/feedback/FeedbackStatus.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/AktiveSperre.class b/bin/main/de/oaa/xxx/games/bdsm/AktiveSperre.class index c316b6e..afa50b5 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/AktiveSperre.class and b/bin/main/de/oaa/xxx/games/bdsm/AktiveSperre.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/AufgabeAnzeige.class b/bin/main/de/oaa/xxx/games/bdsm/AufgabeAnzeige.class index b975e69..2c6c444 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/AufgabeAnzeige.class and b/bin/main/de/oaa/xxx/games/bdsm/AufgabeAnzeige.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/AufgabeArt.class b/bin/main/de/oaa/xxx/games/bdsm/AufgabeArt.class index 45cecc9..7ccffee 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/AufgabeArt.class and b/bin/main/de/oaa/xxx/games/bdsm/AufgabeArt.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/BdsmGame.class b/bin/main/de/oaa/xxx/games/bdsm/BdsmGame.class index c0da2af..505244c 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/BdsmGame.class and b/bin/main/de/oaa/xxx/games/bdsm/BdsmGame.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/BdsmGameDurchfuehren.class b/bin/main/de/oaa/xxx/games/bdsm/BdsmGameDurchfuehren.class index 86e7cf5..f18c40b 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/BdsmGameDurchfuehren.class and b/bin/main/de/oaa/xxx/games/bdsm/BdsmGameDurchfuehren.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/BdsmGameService.class b/bin/main/de/oaa/xxx/games/bdsm/BdsmGameService.class index aba1887..6d74e30 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/BdsmGameService.class and b/bin/main/de/oaa/xxx/games/bdsm/BdsmGameService.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/BdsmMitspieler.class b/bin/main/de/oaa/xxx/games/bdsm/BdsmMitspieler.class index cb4146c..cb1a802 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/BdsmMitspieler.class and b/bin/main/de/oaa/xxx/games/bdsm/BdsmMitspieler.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/Callback.class b/bin/main/de/oaa/xxx/games/bdsm/Callback.class index 55f5157..c748fd5 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/Callback.class and b/bin/main/de/oaa/xxx/games/bdsm/Callback.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/GeschlechtEnum.class b/bin/main/de/oaa/xxx/games/bdsm/GeschlechtEnum.class index b3ce90c..ea30f4f 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/GeschlechtEnum.class and b/bin/main/de/oaa/xxx/games/bdsm/GeschlechtEnum.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/RolleEnum.class b/bin/main/de/oaa/xxx/games/bdsm/RolleEnum.class index aae3b2c..05c2a57 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/RolleEnum.class and b/bin/main/de/oaa/xxx/games/bdsm/RolleEnum.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/AboController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/AboController.class index ba51ded..81268fd 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/AboController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/AboController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabeController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabeController.class index 046f2d0..6ee5090 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabeController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabeController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabenGruppeController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabenGruppeController.class index 3ce1d5c..0a7ab6d 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabenGruppeController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/AufgabenGruppeController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmEinladungController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmEinladungController.class index 5a08855..b1c40dd 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmEinladungController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmEinladungController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmGameController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmGameController.class index 30f4be3..5234f44 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmGameController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmGameController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmSetupDraftController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmSetupDraftController.class index eaf036d..406797b 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmSetupDraftController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/BdsmSetupDraftController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/FavoritController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/FavoritController.class index 64fec39..f761519 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/FavoritController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/FavoritController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/FillerController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/FillerController.class index bcd3dc1..dfc7a47 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/FillerController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/FillerController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/FinisherController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/FinisherController.class index c0be302..41de71e 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/FinisherController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/FinisherController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/SperreController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/SperreController.class index 716fbf5..fb60e89 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/SperreController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/SperreController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/StrafeController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/StrafeController.class index 6d97a49..2bf396f 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/StrafeController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/StrafeController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/controller/ToyController.class b/bin/main/de/oaa/xxx/games/bdsm/controller/ToyController.class index dbb1dfa..4dd07c0 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/controller/ToyController.class and b/bin/main/de/oaa/xxx/games/bdsm/controller/ToyController.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/AktiveSperreEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/AktiveSperreEntity.class index 8b8697f..6f52475 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/AktiveSperreEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/AktiveSperreEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmDefaultsEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmDefaultsEntity.class index 5eedc34..c3828e1 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmDefaultsEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmDefaultsEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity$Status.class b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity$Status.class index ba696d1..1ed0999 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity$Status.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity$Status.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity.class index e291e9f..8d74318 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmEinladungEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmGameEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmGameEntity.class index b814b58..995bf23 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmGameEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmGameEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmSetupDraftEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmSetupDraftEntity.class index c54c614..2fc3f95 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmSetupDraftEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/BdsmSetupDraftEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/entity/MitspielerEntity.class b/bin/main/de/oaa/xxx/games/bdsm/entity/MitspielerEntity.class index 77514ba..fcc2c5f 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/entity/MitspielerEntity.class and b/bin/main/de/oaa/xxx/games/bdsm/entity/MitspielerEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/repository/AktiveSperreRepository.class b/bin/main/de/oaa/xxx/games/bdsm/repository/AktiveSperreRepository.class index 794965d..8ba0cc1 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/repository/AktiveSperreRepository.class and b/bin/main/de/oaa/xxx/games/bdsm/repository/AktiveSperreRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmDefaultsRepository.class b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmDefaultsRepository.class index 24b65b9..df8c67f 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmDefaultsRepository.class and b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmDefaultsRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmEinladungRepository.class b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmEinladungRepository.class index a308a0d..58f85d0 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmEinladungRepository.class and b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmEinladungRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmGameRepository.class b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmGameRepository.class index e0dcf05..54bdbb8 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmGameRepository.class and b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmGameRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmSetupDraftRepository.class b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmSetupDraftRepository.class index e9bb5ad..c5c9203 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmSetupDraftRepository.class and b/bin/main/de/oaa/xxx/games/bdsm/repository/BdsmSetupDraftRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreCallback.class b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreCallback.class index 43d84d0..3dec9e4 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreCallback.class and b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreCallback.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreVerarbeiten.class b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreVerarbeiten.class index e480d51..83d70ea 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreVerarbeiten.class and b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperreVerarbeiten.class differ diff --git a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperrenVerlaengernCallback.class b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperrenVerlaengernCallback.class index 9f4f1d9..56a3f55 100644 Binary files a/bin/main/de/oaa/xxx/games/bdsm/sperre/SperrenVerlaengernCallback.class and b/bin/main/de/oaa/xxx/games/bdsm/sperre/SperrenVerlaengernCallback.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/Card.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/Card.class index 0219569..2a30c88 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/Card.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/Card.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter$1.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter$1.class index 5818ee8..ea41b23 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter$1.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter.class index f3beb20..d2b1d19 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardCountMapConverter.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$1.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$1.class index 47a2468..4e303f9 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$1.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$2.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$2.class index 85b96fe..eb18d37 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$2.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$2.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$3.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$3.class index 9b4d91d..e3080ec 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$3.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$3.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$4.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$4.class index 1612b35..e1049a4 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$4.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$4.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$5.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$5.class index 6256af8..d8089ea 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$5.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$5.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$6.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$6.class index fc19d52..32adc01 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$6.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$6.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$7.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$7.class index 28ab8d4..e47f5c2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$7.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$7.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$8.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$8.class index 9702c56..6736e2b 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$8.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$8.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$9.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$9.class index 47a07fe..ace93b1 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$9.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum$9.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum.class index 414188e..bbc46c2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnum.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter$1.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter$1.class index d700d6e..997a4e5 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter$1.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter.class index 806c630..aff2fd2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardEnumListConverter.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockController.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockController.class index 92397e1..4c42648 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockController.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockEntity.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockEntity.class index 83d5349..c05654d 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockEntity.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockRepository.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockRepository.class index 0562ca2..36f88cf 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockRepository.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockService.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockService.class index cb08044..2b5e949 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockService.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockServiceFactory.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockServiceFactory.class index 9b38845..050faf3 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockServiceFactory.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardLockServiceFactory.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockRepository.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockRepository.class index 1068084..7eace48 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockRepository.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateController.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateController.class index 7d6ab7b..10416fa 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateController.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateEntity.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateEntity.class index f8c1ded..3688e27 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateEntity.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateRepository.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateRepository.class index f5c3ae0..971c9b1 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateRepository.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CardlockTemplateRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CumCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CumCard.class index 65c9b4e..1ae2ed4 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CumCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CumCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/CumInCageCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/CumInCageCard.class index c44a186..b516d99 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/CumInCageCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/CumInCageCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/DoubleUpCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/DoubleUpCard.class index b73e6fa..10194dd 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/DoubleUpCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/DoubleUpCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/FreezeCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/FreezeCard.class index f712901..1ebdb10 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/FreezeCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/FreezeCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/GreenCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/GreenCard.class index f4a9b1c..cb826ed 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/GreenCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/GreenCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/RedCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/RedCard.class index 01ccbc9..53fb9cc 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/RedCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/RedCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/ResetCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/ResetCard.class index 10af186..d3460de 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/ResetCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/ResetCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/TaskCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/TaskCard.class index 4a84fd8..e863c7d 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/TaskCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/TaskCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/cardlock/YellowCard.class b/bin/main/de/oaa/xxx/games/chastity/cardlock/YellowCard.class index bc90ea6..7dbaae2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/cardlock/YellowCard.class and b/bin/main/de/oaa/xxx/games/chastity/cardlock/YellowCard.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockEntity.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockEntity.class index 3bc1bfc..c199663 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockEntity.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockRepository.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockRepository.class index f0c8f21..a75081f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockRepository.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockService.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockService.class index 2d8836d..a699b83 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockService.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateController.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateController.class index 44b3313..d292deb 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateController.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateEntity.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateEntity.class index a4f7277..b91f935 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateEntity.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateRepository.class b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateRepository.class index 330fad6..c05c502 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateRepository.class and b/bin/main/de/oaa/xxx/games/chastity/common/BaseLockTemplateRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/CodeCreator.class b/bin/main/de/oaa/xxx/games/chastity/common/CodeCreator.class index 7c28551..5cd04a3 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/CodeCreator.class and b/bin/main/de/oaa/xxx/games/chastity/common/CodeCreator.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/LockType.class b/bin/main/de/oaa/xxx/games/chastity/common/LockType.class index b9d08bd..187d7f7 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/LockType.class and b/bin/main/de/oaa/xxx/games/chastity/common/LockType.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/PenaltyType.class b/bin/main/de/oaa/xxx/games/chastity/common/PenaltyType.class index 4b269d2..0cff575 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/PenaltyType.class and b/bin/main/de/oaa/xxx/games/chastity/common/PenaltyType.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/TemplateExploreController.class b/bin/main/de/oaa/xxx/games/chastity/common/TemplateExploreController.class index ab8cef7..5d9052b 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/TemplateExploreController.class and b/bin/main/de/oaa/xxx/games/chastity/common/TemplateExploreController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionEntity.class b/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionEntity.class index f380a72..aea2106 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionEntity.class and b/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionRepository.class b/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionRepository.class index 5a4aa73..7fdb7ba 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionRepository.class and b/bin/main/de/oaa/xxx/games/chastity/common/TemplateSubscriptionRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/common/Verification.class b/bin/main/de/oaa/xxx/games/chastity/common/Verification.class index e4c2612..a1df40a 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/common/Verification.class and b/bin/main/de/oaa/xxx/games/chastity/common/Verification.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayController.class b/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayController.class index 11f28e5..804d9e8 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayController.class and b/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayEntity.class index a78f727..6ee7ce9 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/BaseCommunityDisplayEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryController.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryController.class index 7b67aaa..d639e66 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryController.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryEntity.class index 26e886a..062c593 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryReason.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryReason.class index 794417b..8c1b94e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryReason.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityPilloryReason.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteController.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteController.class index 442d23b..349abf1 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteController.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntity.class index 7a32aaf..d4401b2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryEntity.class index 8e952f2..e79cb54 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryRepository.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryRepository.class index 85c5863..61e9c45 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryRepository.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteEntryRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteRepository.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteRepository.class index dbe5b1b..a4c500d 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteRepository.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteScheduler.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteScheduler.class index f813ea9..a42238c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteScheduler.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityTaskVoteScheduler.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationController.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationController.class index 180c6d1..85165bf 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationController.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationEntity.class index c05bc90..4a3753b 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationRepository.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationRepository.class index b3e2c0d..9a8ff79 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationRepository.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteEntity.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteEntity.class index 1b9f3ad..cf74a15 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteEntity.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteRepository.class b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteRepository.class index 3f15c4d..3c1796f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteRepository.class and b/bin/main/de/oaa/xxx/games/chastity/community/CommunityVerificationVoteRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationEntity.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationEntity.class index 8bcba70..d773a21 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationEntity.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationRepository.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationRepository.class index cd3b154..48ed32c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationRepository.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderInvitationRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationEntity.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationEntity.class index e51264b..22400c9 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationEntity.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationRepository.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationRepository.class index f8ed529..ebca78f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationRepository.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderNotificationRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferController.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferController.class index d20aca8..c5c9c9e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferController.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferEntity.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferEntity.class index af781ef..a4dfff2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferEntity.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferRepository.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferRepository.class index 5dbe824..db7614e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferRepository.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderOfferRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceController.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceController.class index 26f8483..be409bc 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceController.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceEntity.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceEntity.class index 70cb6e6..5864a8d 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceEntity.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceRepository.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceRepository.class index 1db5697..723276f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceRepository.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceScheduler.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceScheduler.class index ef51110..cede554 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceScheduler.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderTaskChoiceScheduler.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationEntity.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationEntity.class index 22bc13e..9b8e1ca 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationEntity.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationRepository.class b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationRepository.class index 6d8a2f0..723f927 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationRepository.class and b/bin/main/de/oaa/xxx/games/chastity/keyholder/KeyholderVerificationRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControl.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControl.class index 9169f80..1bb98a6 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControl.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControl.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlCallback.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlCallback.class index 2281d33..8c0fbbb 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlCallback.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlCallback.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlFactory.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlFactory.class index dc77f70..6589355 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlFactory.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControlFactory.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControllType.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControllType.class index f848b18..a7a55d2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControllType.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/LockControllType.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/NoInteractionCallback.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/NoInteractionCallback.class index f2e1b5b..6b07ed9 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/NoInteractionCallback.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/NoInteractionCallback.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/TTLockControl.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/TTLockControl.class index 36f876d..3915649 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/TTLockControl.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/TTLockControl.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/UnlockcodeLockControl.class b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/UnlockcodeLockControl.class index 30576d2..2681942 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockcontroll/UnlockcodeLockControl.class and b/bin/main/de/oaa/xxx/games/chastity/lockcontroll/UnlockcodeLockControl.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationController.class b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationController.class index a8c0335..de035b1 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationController.class and b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationEntity.class b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationEntity.class index 117fef3..6351fba 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationEntity.class and b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationRepository.class b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationRepository.class index 558f0ac..ae82207 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationRepository.class and b/bin/main/de/oaa/xxx/games/chastity/lockee/LockeeInvitationRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$1.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$1.class index 13c264b..9592a07 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$1.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$2.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$2.class index ba940de..123675e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$2.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$2.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$3.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$3.class index e943b96..a4e8930 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$3.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$3.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$4.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$4.class index 8c5092e..dbedff1 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$4.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$4.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$5.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$5.class index 2c0e18e..7e11389 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$5.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$5.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$6.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$6.class index 48ab838..20bde33 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$6.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$6.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$7.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$7.class index 03de276..ca70c12 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$7.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType$7.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType.class index 7f0d40d..fee8837 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/EntryType.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter$1.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter$1.class index 7e0b5ed..8577e2c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter$1.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter.class index e7dc772..7782ffa 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelConverter.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntity.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntity.class index 5f87d91..48e1339 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntity.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntry.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntry.class index 4fe0575..5cdecd6 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntry.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntry.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntryEntity.class b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntryEntity.class index 0045f36..7a3f808 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntryEntity.class and b/bin/main/de/oaa/xxx/games/chastity/spinningwheel/SpinningWheelEntryEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskEntity.class b/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskEntity.class index 48ba31f..d65ab23 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskEntity.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskRepository.class b/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskRepository.class index bf12fd5..8f270a8 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskRepository.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/AssignedTaskRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/Task.class b/bin/main/de/oaa/xxx/games/chastity/tasks/Task.class index 7548476..a306306 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/Task.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/Task.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter$1.class b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter$1.class index 4635412..ee27ff2 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter$1.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter.class b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter.class index 9e3a38e..d8b7c04 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskListConverter.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskMode.class b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskMode.class index c51a4bd..2fafc8c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/tasks/TaskMode.class and b/bin/main/de/oaa/xxx/games/chastity/tasks/TaskMode.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockController.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockController.class index 2296534..e2ff41d 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockController.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockEntity.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockEntity.class index 11da049..70ec571 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockEntity.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockRepository.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockRepository.class index befaf37..e31a53a 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockRepository.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockService.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockService.class index abdb790..b311aea 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockService.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockServiceFactory.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockServiceFactory.class index d2bc1cd..48532c0 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockServiceFactory.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockServiceFactory.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateController.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateController.class index 02e8126..113196e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateController.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateController.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateEntity.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateEntity.class index 7e505ff..a1763c3 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateEntity.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateRepository.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateRepository.class index bd79ee0..a801ca8 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateRepository.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateService.class b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateService.class index 4d4cd0c..131cb19 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateService.class and b/bin/main/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTAuthService.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTAuthService.class index 536ab61..7b5c92e 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTAuthService.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTAuthService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$1.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$1.class index 416ea82..dc91591 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$1.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$1.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$LockRecord.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$LockRecord.class index 9343627..360625c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$LockRecord.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$LockRecord.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$TTLockCallbackWrapper.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$TTLockCallbackWrapper.class index 5760d81..ebb816b 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$TTLockCallbackWrapper.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback$TTLockCallbackWrapper.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback.class index 6a7647f..261cf01 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockCallback.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockConfigEntity.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockConfigEntity.class index f0a2985..71624c9 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockConfigEntity.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockConfigEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockAddPasscodeResponse.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockAddPasscodeResponse.class index 8747a0b..4fa0871 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockAddPasscodeResponse.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockAddPasscodeResponse.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockDetailResponse.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockDetailResponse.class index 05c2d55..ee2f4f5 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockDetailResponse.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService$TTLockDetailResponse.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService.class index e42eced..c46754f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockService.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockTest.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockTest.class index a42ae14..d87240c 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockTest.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockTest.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigEntity.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigEntity.class index 3b4a6c7..1146f48 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigEntity.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigRepository.class b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigRepository.class index 0a55079..43b852f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigRepository.class and b/bin/main/de/oaa/xxx/games/chastity/ttlock/TTLockUserConfigRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/unlock/TempOpeningReason.class b/bin/main/de/oaa/xxx/games/chastity/unlock/TempOpeningReason.class index d3b2e90..4dcc16b 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/unlock/TempOpeningReason.class and b/bin/main/de/oaa/xxx/games/chastity/unlock/TempOpeningReason.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryEntity.class b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryEntity.class index 20fc129..931c515 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryEntity.class and b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryRepository.class b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryRepository.class index cf01a0f..d9f278f 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryRepository.class and b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryService.class b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryService.class index d7bb9c0..323b309 100644 Binary files a/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryService.class and b/bin/main/de/oaa/xxx/games/chastity/unlock/UnlockCodeHistoryService.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Aufgabe.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Aufgabe.class index 1a7787e..df758cb 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Aufgabe.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Aufgabe.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppe.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppe.class index e6efc36..4e77a24 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppe.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppe.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeDisplay.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeDisplay.class index 05b5eea..0c10e72 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeDisplay.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeDisplay.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeList.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeList.class index 162292b..9bddbfc 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeList.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeList.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppePage.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppePage.class index 7a1b618..14717f9 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppePage.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppePage.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeService.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeService.class index 755e836..6b06d8b 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeService.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenGruppeService.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenList.class b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenList.class index 909c9c7..bdd0776 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenList.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/AufgabenList.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/CommonMitspieler.class b/bin/main/de/oaa/xxx/games/common/aufgaben/CommonMitspieler.class index a4ab86c..b29f966 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/CommonMitspieler.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/CommonMitspieler.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/DefaultFiller.class b/bin/main/de/oaa/xxx/games/common/aufgaben/DefaultFiller.class index de2650b..5d9a5bc 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/DefaultFiller.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/DefaultFiller.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Favorit.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Favorit.class index a52caea..7f812d0 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Favorit.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Favorit.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/FavoritList.class b/bin/main/de/oaa/xxx/games/common/aufgaben/FavoritList.class index d832787..86aca1f 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/FavoritList.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/FavoritList.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Finisher.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Finisher.class index 673f49d..e0a1d1a 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Finisher.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Finisher.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/ImageScaler.class b/bin/main/de/oaa/xxx/games/common/aufgaben/ImageScaler.class index 2343042..b0b6314 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/ImageScaler.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/ImageScaler.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Sperre.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Sperre.class index 51b436a..0d02203 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Sperre.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Sperre.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Strafe.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Strafe.class index 46f0fae..120c181 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Strafe.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Strafe.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Toy.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Toy.class index 9c5b6fd..96b4284 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Toy.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Toy.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/ToyList.class b/bin/main/de/oaa/xxx/games/common/aufgaben/ToyList.class index da35b71..4503684 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/ToyList.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/ToyList.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/ToyPage.class b/bin/main/de/oaa/xxx/games/common/aufgaben/ToyPage.class index d94c6eb..440f492 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/ToyPage.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/ToyPage.class differ diff --git a/bin/main/de/oaa/xxx/games/common/aufgaben/Werkzeug.class b/bin/main/de/oaa/xxx/games/common/aufgaben/Werkzeug.class index 5edcec4..5e84b2a 100644 Binary files a/bin/main/de/oaa/xxx/games/common/aufgaben/Werkzeug.class and b/bin/main/de/oaa/xxx/games/common/aufgaben/Werkzeug.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/AufgabeEntity.class b/bin/main/de/oaa/xxx/games/common/entity/AufgabeEntity.class index 3651846..b37fcc9 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/AufgabeEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/AufgabeEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/AufgabenGruppeEntity.class b/bin/main/de/oaa/xxx/games/common/entity/AufgabenGruppeEntity.class index 6539737..84301f8 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/AufgabenGruppeEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/AufgabenGruppeEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/FavoritEntity.class b/bin/main/de/oaa/xxx/games/common/entity/FavoritEntity.class index 9888783..5d8d5ee 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/FavoritEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/FavoritEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/FinisherEntity.class b/bin/main/de/oaa/xxx/games/common/entity/FinisherEntity.class index 6e4dfdd..7a1a14b 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/FinisherEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/FinisherEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/GruppenAboEntity.class b/bin/main/de/oaa/xxx/games/common/entity/GruppenAboEntity.class index 5a1aa3e..3877eb7 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/GruppenAboEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/GruppenAboEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/SperreEntity.class b/bin/main/de/oaa/xxx/games/common/entity/SperreEntity.class index b96b688..9df1c31 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/SperreEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/SperreEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/StrafeEntity.class b/bin/main/de/oaa/xxx/games/common/entity/StrafeEntity.class index 4675a21..896fc6d 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/StrafeEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/StrafeEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/entity/ToyEntity.class b/bin/main/de/oaa/xxx/games/common/entity/ToyEntity.class index ad856fa..ab4f034 100644 Binary files a/bin/main/de/oaa/xxx/games/common/entity/ToyEntity.class and b/bin/main/de/oaa/xxx/games/common/entity/ToyEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/AufgabeRepository.class b/bin/main/de/oaa/xxx/games/common/repository/AufgabeRepository.class index 5f354fe..4cd1664 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/AufgabeRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/AufgabeRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/AufgabenGruppeRepository.class b/bin/main/de/oaa/xxx/games/common/repository/AufgabenGruppeRepository.class index e830744..b991929 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/AufgabenGruppeRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/AufgabenGruppeRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/FavoritRepository.class b/bin/main/de/oaa/xxx/games/common/repository/FavoritRepository.class index c4b4206..bd52f77 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/FavoritRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/FavoritRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/GruppenAboRepository.class b/bin/main/de/oaa/xxx/games/common/repository/GruppenAboRepository.class index 5290628..879aaa9 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/GruppenAboRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/GruppenAboRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/SperreRepository.class b/bin/main/de/oaa/xxx/games/common/repository/SperreRepository.class index 1b2df30..0139c23 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/SperreRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/SperreRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/StrafeRepository.class b/bin/main/de/oaa/xxx/games/common/repository/StrafeRepository.class index 990bdac..3e1137d 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/StrafeRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/StrafeRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/common/repository/ToyRepository.class b/bin/main/de/oaa/xxx/games/common/repository/ToyRepository.class index da93a4a..00d69b0 100644 Binary files a/bin/main/de/oaa/xxx/games/common/repository/ToyRepository.class and b/bin/main/de/oaa/xxx/games/common/repository/ToyRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameHistoryController.class b/bin/main/de/oaa/xxx/games/history/GameHistoryController.class index 79395ad..058fa9b 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameHistoryController.class and b/bin/main/de/oaa/xxx/games/history/GameHistoryController.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameHistoryEntity.class b/bin/main/de/oaa/xxx/games/history/GameHistoryEntity.class index bc57426..0a53a3a 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameHistoryEntity.class and b/bin/main/de/oaa/xxx/games/history/GameHistoryEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameHistoryParticipantEntity.class b/bin/main/de/oaa/xxx/games/history/GameHistoryParticipantEntity.class index fa30101..7e12937 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameHistoryParticipantEntity.class and b/bin/main/de/oaa/xxx/games/history/GameHistoryParticipantEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameHistoryRepository.class b/bin/main/de/oaa/xxx/games/history/GameHistoryRepository.class index 8b1f025..ded0679 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameHistoryRepository.class and b/bin/main/de/oaa/xxx/games/history/GameHistoryRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameRole.class b/bin/main/de/oaa/xxx/games/history/GameRole.class index 0afe8e3..042dc86 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameRole.class and b/bin/main/de/oaa/xxx/games/history/GameRole.class differ diff --git a/bin/main/de/oaa/xxx/games/history/GameType.class b/bin/main/de/oaa/xxx/games/history/GameType.class index 15885ee..101d8b0 100644 Binary files a/bin/main/de/oaa/xxx/games/history/GameType.class and b/bin/main/de/oaa/xxx/games/history/GameType.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/VanillaAufgabeAnzeige.class b/bin/main/de/oaa/xxx/games/vanilla/VanillaAufgabeAnzeige.class index d4cd2cc..c721042 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/VanillaAufgabeAnzeige.class and b/bin/main/de/oaa/xxx/games/vanilla/VanillaAufgabeAnzeige.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/VanillaGame.class b/bin/main/de/oaa/xxx/games/vanilla/VanillaGame.class index 801ae52..47f4414 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/VanillaGame.class and b/bin/main/de/oaa/xxx/games/vanilla/VanillaGame.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/VanillaGameDurchfuehren.class b/bin/main/de/oaa/xxx/games/vanilla/VanillaGameDurchfuehren.class index 5e298cb..33deb6f 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/VanillaGameDurchfuehren.class and b/bin/main/de/oaa/xxx/games/vanilla/VanillaGameDurchfuehren.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/VanillaMitspieler.class b/bin/main/de/oaa/xxx/games/vanilla/VanillaMitspieler.class index 54f949e..657e2be 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/VanillaMitspieler.class and b/bin/main/de/oaa/xxx/games/vanilla/VanillaMitspieler.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAboController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAboController.class index cc3d21c..d908d9d 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAboController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAboController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabeController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabeController.class index f5168d3..79476fb 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabeController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabeController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabenGruppeController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabenGruppeController.class index fb4a2b1..b247ecf 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabenGruppeController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaAufgabenGruppeController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaEinladungController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaEinladungController.class index d93c732..f35cab2 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaEinladungController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaEinladungController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFavoritController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFavoritController.class index 8b1d1a8..74559e6 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFavoritController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFavoritController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFillerController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFillerController.class index 4880c36..d9d05ee 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFillerController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFillerController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFinisherController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFinisherController.class index 1ee8f12..0751d3c 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFinisherController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaFinisherController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaGameController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaGameController.class index 01474cc..e16b7e7 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaGameController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaGameController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaSetupDraftController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaSetupDraftController.class index 1f4e1b6..8b74ad4 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaSetupDraftController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaSetupDraftController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaToyController.class b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaToyController.class index 848274a..dcfce85 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaToyController.class and b/bin/main/de/oaa/xxx/games/vanilla/controller/VanillaToyController.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity$Status.class b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity$Status.class index 0d001e0..30c2767 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity$Status.class and b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity$Status.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity.class b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity.class index 4f38d11..1a79bda 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity.class and b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaEinladungEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaGameEntity.class b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaGameEntity.class index 3a17dcc..88edf6b 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaGameEntity.class and b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaGameEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaMitspielerEntity.class b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaMitspielerEntity.class index 9636bbc..a42324e 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaMitspielerEntity.class and b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaMitspielerEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaSetupDraftEntity.class b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaSetupDraftEntity.class index c43f660..4ec5e2a 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaSetupDraftEntity.class and b/bin/main/de/oaa/xxx/games/vanilla/entity/VanillaSetupDraftEntity.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaEinladungRepository.class b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaEinladungRepository.class index 5729681..5f2d097 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaEinladungRepository.class and b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaEinladungRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaGameRepository.class b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaGameRepository.class index 78105e2..473f335 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaGameRepository.class and b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaGameRepository.class differ diff --git a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaSetupDraftRepository.class b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaSetupDraftRepository.class index a4be87a..1fd5195 100644 Binary files a/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaSetupDraftRepository.class and b/bin/main/de/oaa/xxx/games/vanilla/repository/VanillaSetupDraftRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/AnfrageStatus.class b/bin/main/de/oaa/xxx/gruppe/AnfrageStatus.class index 5166441..8020587 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/AnfrageStatus.class and b/bin/main/de/oaa/xxx/gruppe/AnfrageStatus.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/BeitragTyp.class b/bin/main/de/oaa/xxx/gruppe/BeitragTyp.class index 62fb2f7..c7b260b 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/BeitragTyp.class and b/bin/main/de/oaa/xxx/gruppe/BeitragTyp.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/GruppeController.class b/bin/main/de/oaa/xxx/gruppe/GruppeController.class index c89b725..b57064f 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/GruppeController.class and b/bin/main/de/oaa/xxx/gruppe/GruppeController.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/GruppenRolle.class b/bin/main/de/oaa/xxx/gruppe/GruppenRolle.class index 6bd7d4c..be08683 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/GruppenRolle.class and b/bin/main/de/oaa/xxx/gruppe/GruppenRolle.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/GruppenbeitragController.class b/bin/main/de/oaa/xxx/gruppe/GruppenbeitragController.class index f23fefe..6106767 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/GruppenbeitragController.class and b/bin/main/de/oaa/xxx/gruppe/GruppenbeitragController.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/BeitragMeldungEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/BeitragMeldungEntity.class index 99a8c9d..c030ba2 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/BeitragMeldungEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/BeitragMeldungEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/BeitrittsanfrageEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/BeitrittsanfrageEntity.class index 725e3bb..a52cd45 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/BeitrittsanfrageEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/BeitrittsanfrageEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/GruppeEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/GruppeEntity.class index 6e2ea04..528eb63 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/GruppeEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/GruppeEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragEntity.class index 465f67a..a3c4209 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragLikeEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragLikeEntity.class index 54c3625..416d08c 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragLikeEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/GruppenbeitragLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/GruppenmitgliedEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/GruppenmitgliedEntity.class index 146cc3e..d8a19f1 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/GruppenmitgliedEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/GruppenmitgliedEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/UmfrageOptionEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/UmfrageOptionEntity.class index 9941e32..bafc202 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/UmfrageOptionEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/UmfrageOptionEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/entity/UmfrageStimmeEntity.class b/bin/main/de/oaa/xxx/gruppe/entity/UmfrageStimmeEntity.class index 87dc5ef..60542d4 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/entity/UmfrageStimmeEntity.class and b/bin/main/de/oaa/xxx/gruppe/entity/UmfrageStimmeEntity.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/BeitragMeldungRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/BeitragMeldungRepository.class index f265c7c..ae88366 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/BeitragMeldungRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/BeitragMeldungRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/BeitrittsanfrageRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/BeitrittsanfrageRepository.class index 2dbf464..dcc8abf 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/BeitrittsanfrageRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/BeitrittsanfrageRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/GruppeRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/GruppeRepository.class index c70a544..1339401 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/GruppeRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/GruppeRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragLikeRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragLikeRepository.class index 6a20dd8..861a143 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragLikeRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragRepository.class index ed2c91a..1defd88 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/GruppenbeitragRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/GruppenmitgliedRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/GruppenmitgliedRepository.class index f33147f..af301f3 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/GruppenmitgliedRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/GruppenmitgliedRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/UmfrageOptionRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/UmfrageOptionRepository.class index 2905c6f..11914a3 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/UmfrageOptionRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/UmfrageOptionRepository.class differ diff --git a/bin/main/de/oaa/xxx/gruppe/repository/UmfrageStimmeRepository.class b/bin/main/de/oaa/xxx/gruppe/repository/UmfrageStimmeRepository.class index cb78474..91de70c 100644 Binary files a/bin/main/de/oaa/xxx/gruppe/repository/UmfrageStimmeRepository.class and b/bin/main/de/oaa/xxx/gruppe/repository/UmfrageStimmeRepository.class differ diff --git a/bin/main/de/oaa/xxx/mail/Email.class b/bin/main/de/oaa/xxx/mail/Email.class index b2c7ac0..a29b916 100644 Binary files a/bin/main/de/oaa/xxx/mail/Email.class and b/bin/main/de/oaa/xxx/mail/Email.class differ diff --git a/bin/main/de/oaa/xxx/mail/MailService.class b/bin/main/de/oaa/xxx/mail/MailService.class index 9042dff..e99e266 100644 Binary files a/bin/main/de/oaa/xxx/mail/MailService.class and b/bin/main/de/oaa/xxx/mail/MailService.class differ diff --git a/bin/main/de/oaa/xxx/mail/MailTemplateService.class b/bin/main/de/oaa/xxx/mail/MailTemplateService.class index d677588..f9cf6cb 100644 Binary files a/bin/main/de/oaa/xxx/mail/MailTemplateService.class and b/bin/main/de/oaa/xxx/mail/MailTemplateService.class differ diff --git a/bin/main/de/oaa/xxx/meldung/MeldungController.class b/bin/main/de/oaa/xxx/meldung/MeldungController.class index b02eb3e..22f8b84 100644 Binary files a/bin/main/de/oaa/xxx/meldung/MeldungController.class and b/bin/main/de/oaa/xxx/meldung/MeldungController.class differ diff --git a/bin/main/de/oaa/xxx/meldung/MeldungEntity.class b/bin/main/de/oaa/xxx/meldung/MeldungEntity.class index fa5413c..04bace4 100644 Binary files a/bin/main/de/oaa/xxx/meldung/MeldungEntity.class and b/bin/main/de/oaa/xxx/meldung/MeldungEntity.class differ diff --git a/bin/main/de/oaa/xxx/meldung/MeldungRepository.class b/bin/main/de/oaa/xxx/meldung/MeldungRepository.class index 15598b1..223a280 100644 Binary files a/bin/main/de/oaa/xxx/meldung/MeldungRepository.class and b/bin/main/de/oaa/xxx/meldung/MeldungRepository.class differ diff --git a/bin/main/de/oaa/xxx/meldung/MeldungStatus.class b/bin/main/de/oaa/xxx/meldung/MeldungStatus.class index 17abe7f..43379dd 100644 Binary files a/bin/main/de/oaa/xxx/meldung/MeldungStatus.class and b/bin/main/de/oaa/xxx/meldung/MeldungStatus.class differ diff --git a/bin/main/de/oaa/xxx/meldung/MeldungZielTyp.class b/bin/main/de/oaa/xxx/meldung/MeldungZielTyp.class index 2078ec1..7d79c0c 100644 Binary files a/bin/main/de/oaa/xxx/meldung/MeldungZielTyp.class and b/bin/main/de/oaa/xxx/meldung/MeldungZielTyp.class differ diff --git a/bin/main/de/oaa/xxx/passwordreset/PasswordResetController.class b/bin/main/de/oaa/xxx/passwordreset/PasswordResetController.class index 181fbf6..c6040da 100644 Binary files a/bin/main/de/oaa/xxx/passwordreset/PasswordResetController.class and b/bin/main/de/oaa/xxx/passwordreset/PasswordResetController.class differ diff --git a/bin/main/de/oaa/xxx/passwordreset/PasswordResetEntity.class b/bin/main/de/oaa/xxx/passwordreset/PasswordResetEntity.class index f7f5c40..daa42e6 100644 Binary files a/bin/main/de/oaa/xxx/passwordreset/PasswordResetEntity.class and b/bin/main/de/oaa/xxx/passwordreset/PasswordResetEntity.class differ diff --git a/bin/main/de/oaa/xxx/passwordreset/PasswordResetRepository.class b/bin/main/de/oaa/xxx/passwordreset/PasswordResetRepository.class index da485ba..40aff39 100644 Binary files a/bin/main/de/oaa/xxx/passwordreset/PasswordResetRepository.class and b/bin/main/de/oaa/xxx/passwordreset/PasswordResetRepository.class differ diff --git a/bin/main/de/oaa/xxx/registration/ActivationController.class b/bin/main/de/oaa/xxx/registration/ActivationController.class index 3a08ab9..c9b165a 100644 Binary files a/bin/main/de/oaa/xxx/registration/ActivationController.class and b/bin/main/de/oaa/xxx/registration/ActivationController.class differ diff --git a/bin/main/de/oaa/xxx/registration/Registration.class b/bin/main/de/oaa/xxx/registration/Registration.class index dbaa2cc..2564f0e 100644 Binary files a/bin/main/de/oaa/xxx/registration/Registration.class and b/bin/main/de/oaa/xxx/registration/Registration.class differ diff --git a/bin/main/de/oaa/xxx/registration/RegistrationController.class b/bin/main/de/oaa/xxx/registration/RegistrationController.class index ec1d3a2..c260efc 100644 Binary files a/bin/main/de/oaa/xxx/registration/RegistrationController.class and b/bin/main/de/oaa/xxx/registration/RegistrationController.class differ diff --git a/bin/main/de/oaa/xxx/registration/RegistrationEntity.class b/bin/main/de/oaa/xxx/registration/RegistrationEntity.class index 244d7f8..29dd65b 100644 Binary files a/bin/main/de/oaa/xxx/registration/RegistrationEntity.class and b/bin/main/de/oaa/xxx/registration/RegistrationEntity.class differ diff --git a/bin/main/de/oaa/xxx/registration/RegistrationRepository.class b/bin/main/de/oaa/xxx/registration/RegistrationRepository.class index 4cd682e..687ff19 100644 Binary files a/bin/main/de/oaa/xxx/registration/RegistrationRepository.class and b/bin/main/de/oaa/xxx/registration/RegistrationRepository.class differ diff --git a/bin/main/de/oaa/xxx/registration/RegistrationService.class b/bin/main/de/oaa/xxx/registration/RegistrationService.class index 442beee..3fb08ea 100644 Binary files a/bin/main/de/oaa/xxx/registration/RegistrationService.class and b/bin/main/de/oaa/xxx/registration/RegistrationService.class differ diff --git a/bin/main/de/oaa/xxx/social/EventController.class b/bin/main/de/oaa/xxx/social/EventController.class index ecb1a27..395bee8 100644 Binary files a/bin/main/de/oaa/xxx/social/EventController.class and b/bin/main/de/oaa/xxx/social/EventController.class differ diff --git a/bin/main/de/oaa/xxx/social/KommentarController.class b/bin/main/de/oaa/xxx/social/KommentarController.class index 64ae24d..0c3a3b7 100644 Binary files a/bin/main/de/oaa/xxx/social/KommentarController.class and b/bin/main/de/oaa/xxx/social/KommentarController.class differ diff --git a/bin/main/de/oaa/xxx/social/LikeService.class b/bin/main/de/oaa/xxx/social/LikeService.class index 19abf13..4112f2f 100644 Binary files a/bin/main/de/oaa/xxx/social/LikeService.class and b/bin/main/de/oaa/xxx/social/LikeService.class differ diff --git a/bin/main/de/oaa/xxx/social/NotificationController.class b/bin/main/de/oaa/xxx/social/NotificationController.class index 9423855..6d15c3d 100644 Binary files a/bin/main/de/oaa/xxx/social/NotificationController.class and b/bin/main/de/oaa/xxx/social/NotificationController.class differ diff --git a/bin/main/de/oaa/xxx/social/PinnwandController$CreateEintragRequest.class b/bin/main/de/oaa/xxx/social/PinnwandController$CreateEintragRequest.class index 28a1a5f..61e4c92 100644 Binary files a/bin/main/de/oaa/xxx/social/PinnwandController$CreateEintragRequest.class and b/bin/main/de/oaa/xxx/social/PinnwandController$CreateEintragRequest.class differ diff --git a/bin/main/de/oaa/xxx/social/PinnwandController.class b/bin/main/de/oaa/xxx/social/PinnwandController.class index 45bbeff..66b63cc 100644 Binary files a/bin/main/de/oaa/xxx/social/PinnwandController.class and b/bin/main/de/oaa/xxx/social/PinnwandController.class differ diff --git a/bin/main/de/oaa/xxx/social/ProfileImageController.class b/bin/main/de/oaa/xxx/social/ProfileImageController.class index cdb3fe9..52a5d47 100644 Binary files a/bin/main/de/oaa/xxx/social/ProfileImageController.class and b/bin/main/de/oaa/xxx/social/ProfileImageController.class differ diff --git a/bin/main/de/oaa/xxx/social/ProfileVisitController.class b/bin/main/de/oaa/xxx/social/ProfileVisitController.class index 8cef20c..821074e 100644 Binary files a/bin/main/de/oaa/xxx/social/ProfileVisitController.class and b/bin/main/de/oaa/xxx/social/ProfileVisitController.class differ diff --git a/bin/main/de/oaa/xxx/social/SocialController$FriendRequestBody.class b/bin/main/de/oaa/xxx/social/SocialController$FriendRequestBody.class index 8fdef2a..343fbe8 100644 Binary files a/bin/main/de/oaa/xxx/social/SocialController$FriendRequestBody.class and b/bin/main/de/oaa/xxx/social/SocialController$FriendRequestBody.class differ diff --git a/bin/main/de/oaa/xxx/social/SocialController$FriendshipActionBody.class b/bin/main/de/oaa/xxx/social/SocialController$FriendshipActionBody.class index 0e52a0e..a7852b8 100644 Binary files a/bin/main/de/oaa/xxx/social/SocialController$FriendshipActionBody.class and b/bin/main/de/oaa/xxx/social/SocialController$FriendshipActionBody.class differ diff --git a/bin/main/de/oaa/xxx/social/SocialController$SendMessageBody.class b/bin/main/de/oaa/xxx/social/SocialController$SendMessageBody.class index 9ce4a4f..81c809c 100644 Binary files a/bin/main/de/oaa/xxx/social/SocialController$SendMessageBody.class and b/bin/main/de/oaa/xxx/social/SocialController$SendMessageBody.class differ diff --git a/bin/main/de/oaa/xxx/social/SocialController.class b/bin/main/de/oaa/xxx/social/SocialController.class index 6c2a666..caea811 100644 Binary files a/bin/main/de/oaa/xxx/social/SocialController.class and b/bin/main/de/oaa/xxx/social/SocialController.class differ diff --git a/bin/main/de/oaa/xxx/social/SseService.class b/bin/main/de/oaa/xxx/social/SseService.class index 4344ee3..13c1fa2 100644 Binary files a/bin/main/de/oaa/xxx/social/SseService.class and b/bin/main/de/oaa/xxx/social/SseService.class differ diff --git a/bin/main/de/oaa/xxx/social/SystemMessageService.class b/bin/main/de/oaa/xxx/social/SystemMessageService.class index 10fcd1d..ea5b96c 100644 Binary files a/bin/main/de/oaa/xxx/social/SystemMessageService.class and b/bin/main/de/oaa/xxx/social/SystemMessageService.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/BlockEntity.class b/bin/main/de/oaa/xxx/social/entity/BlockEntity.class new file mode 100644 index 0000000..9487f51 Binary files /dev/null and b/bin/main/de/oaa/xxx/social/entity/BlockEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/FriendshipEntity$Status.class b/bin/main/de/oaa/xxx/social/entity/FriendshipEntity$Status.class index d94191d..ced61b9 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/FriendshipEntity$Status.class and b/bin/main/de/oaa/xxx/social/entity/FriendshipEntity$Status.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/FriendshipEntity.class b/bin/main/de/oaa/xxx/social/entity/FriendshipEntity.class index b6de84e..b5f4946 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/FriendshipEntity.class and b/bin/main/de/oaa/xxx/social/entity/FriendshipEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/KommentarEntity.class b/bin/main/de/oaa/xxx/social/entity/KommentarEntity.class index 6749005..c72399c 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/KommentarEntity.class and b/bin/main/de/oaa/xxx/social/entity/KommentarEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/KommentarLikeEntity.class b/bin/main/de/oaa/xxx/social/entity/KommentarLikeEntity.class index 3492af3..3ee31ad 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/KommentarLikeEntity.class and b/bin/main/de/oaa/xxx/social/entity/KommentarLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/MessageCause.class b/bin/main/de/oaa/xxx/social/entity/MessageCause.class index 68c31e5..a315a68 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/MessageCause.class and b/bin/main/de/oaa/xxx/social/entity/MessageCause.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/MessageEntity.class b/bin/main/de/oaa/xxx/social/entity/MessageEntity.class index 576c1a3..ce404c5 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/MessageEntity.class and b/bin/main/de/oaa/xxx/social/entity/MessageEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/NotificationPreferenceEntity.class b/bin/main/de/oaa/xxx/social/entity/NotificationPreferenceEntity.class index 5fdf3bc..00d6447 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/NotificationPreferenceEntity.class and b/bin/main/de/oaa/xxx/social/entity/NotificationPreferenceEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/PinnwandEintragEntity.class b/bin/main/de/oaa/xxx/social/entity/PinnwandEintragEntity.class index 6c5ccf9..741afb0 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/PinnwandEintragEntity.class and b/bin/main/de/oaa/xxx/social/entity/PinnwandEintragEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/PinnwandLikeEntity.class b/bin/main/de/oaa/xxx/social/entity/PinnwandLikeEntity.class index c793dd2..bc7bb1a 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/PinnwandLikeEntity.class and b/bin/main/de/oaa/xxx/social/entity/PinnwandLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/ProfileImageEntity.class b/bin/main/de/oaa/xxx/social/entity/ProfileImageEntity.class index 5409b59..3514dd2 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/ProfileImageEntity.class and b/bin/main/de/oaa/xxx/social/entity/ProfileImageEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/ProfileImageLikeEntity.class b/bin/main/de/oaa/xxx/social/entity/ProfileImageLikeEntity.class index 4ebb304..287adff 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/ProfileImageLikeEntity.class and b/bin/main/de/oaa/xxx/social/entity/ProfileImageLikeEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/entity/ProfileVisitEntity.class b/bin/main/de/oaa/xxx/social/entity/ProfileVisitEntity.class index 2f0a878..bc3fd25 100644 Binary files a/bin/main/de/oaa/xxx/social/entity/ProfileVisitEntity.class and b/bin/main/de/oaa/xxx/social/entity/ProfileVisitEntity.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/BlockRepository.class b/bin/main/de/oaa/xxx/social/repository/BlockRepository.class new file mode 100644 index 0000000..68baa37 Binary files /dev/null and b/bin/main/de/oaa/xxx/social/repository/BlockRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/FriendshipRepository.class b/bin/main/de/oaa/xxx/social/repository/FriendshipRepository.class index eb9a7d9..1801065 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/FriendshipRepository.class and b/bin/main/de/oaa/xxx/social/repository/FriendshipRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/KommentarLikeRepository.class b/bin/main/de/oaa/xxx/social/repository/KommentarLikeRepository.class index e72c2c7..6cecc7f 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/KommentarLikeRepository.class and b/bin/main/de/oaa/xxx/social/repository/KommentarLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/KommentarRepository.class b/bin/main/de/oaa/xxx/social/repository/KommentarRepository.class index dc6415c..b8e8c54 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/KommentarRepository.class and b/bin/main/de/oaa/xxx/social/repository/KommentarRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/MessageRepository.class b/bin/main/de/oaa/xxx/social/repository/MessageRepository.class index 6817bae..9334187 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/MessageRepository.class and b/bin/main/de/oaa/xxx/social/repository/MessageRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/NotificationPreferenceRepository.class b/bin/main/de/oaa/xxx/social/repository/NotificationPreferenceRepository.class index 6327d08..e1d35c4 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/NotificationPreferenceRepository.class and b/bin/main/de/oaa/xxx/social/repository/NotificationPreferenceRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/PinnwandEintragRepository.class b/bin/main/de/oaa/xxx/social/repository/PinnwandEintragRepository.class index 2e6c776..741e593 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/PinnwandEintragRepository.class and b/bin/main/de/oaa/xxx/social/repository/PinnwandEintragRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/PinnwandLikeRepository.class b/bin/main/de/oaa/xxx/social/repository/PinnwandLikeRepository.class index c2ab51b..971471f 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/PinnwandLikeRepository.class and b/bin/main/de/oaa/xxx/social/repository/PinnwandLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/ProfileImageLikeRepository.class b/bin/main/de/oaa/xxx/social/repository/ProfileImageLikeRepository.class index 692b8e6..0b571a9 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/ProfileImageLikeRepository.class and b/bin/main/de/oaa/xxx/social/repository/ProfileImageLikeRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/ProfileImageRepository.class b/bin/main/de/oaa/xxx/social/repository/ProfileImageRepository.class index fc80cde..105bdaa 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/ProfileImageRepository.class and b/bin/main/de/oaa/xxx/social/repository/ProfileImageRepository.class differ diff --git a/bin/main/de/oaa/xxx/social/repository/ProfileVisitRepository.class b/bin/main/de/oaa/xxx/social/repository/ProfileVisitRepository.class index b55fd7b..3e04bf0 100644 Binary files a/bin/main/de/oaa/xxx/social/repository/ProfileVisitRepository.class and b/bin/main/de/oaa/xxx/social/repository/ProfileVisitRepository.class differ diff --git a/bin/main/de/oaa/xxx/subscription/SubscriptionController.class b/bin/main/de/oaa/xxx/subscription/SubscriptionController.class index 7af3887..12880d4 100644 Binary files a/bin/main/de/oaa/xxx/subscription/SubscriptionController.class and b/bin/main/de/oaa/xxx/subscription/SubscriptionController.class differ diff --git a/bin/main/de/oaa/xxx/subscription/SubscriptionLimitService.class b/bin/main/de/oaa/xxx/subscription/SubscriptionLimitService.class index a94fa98..c43d9de 100644 Binary files a/bin/main/de/oaa/xxx/subscription/SubscriptionLimitService.class and b/bin/main/de/oaa/xxx/subscription/SubscriptionLimitService.class differ diff --git a/bin/main/de/oaa/xxx/subscription/SubscriptionType.class b/bin/main/de/oaa/xxx/subscription/SubscriptionType.class index 91cbf70..f2d1b6e 100644 Binary files a/bin/main/de/oaa/xxx/subscription/SubscriptionType.class and b/bin/main/de/oaa/xxx/subscription/SubscriptionType.class differ diff --git a/bin/main/de/oaa/xxx/subscription/UserSubscriptionEntity.class b/bin/main/de/oaa/xxx/subscription/UserSubscriptionEntity.class index 2f51f29..bd51076 100644 Binary files a/bin/main/de/oaa/xxx/subscription/UserSubscriptionEntity.class and b/bin/main/de/oaa/xxx/subscription/UserSubscriptionEntity.class differ diff --git a/bin/main/de/oaa/xxx/subscription/UserSubscriptionRepository.class b/bin/main/de/oaa/xxx/subscription/UserSubscriptionRepository.class index d8fbd74..135e45c 100644 Binary files a/bin/main/de/oaa/xxx/subscription/UserSubscriptionRepository.class and b/bin/main/de/oaa/xxx/subscription/UserSubscriptionRepository.class differ diff --git a/bin/main/de/oaa/xxx/support/SupportUserService.class b/bin/main/de/oaa/xxx/support/SupportUserService.class index 121de43..5fb26b2 100644 Binary files a/bin/main/de/oaa/xxx/support/SupportUserService.class and b/bin/main/de/oaa/xxx/support/SupportUserService.class differ diff --git a/bin/main/de/oaa/xxx/user/Beziehungsstatus.class b/bin/main/de/oaa/xxx/user/Beziehungsstatus.class index ecba8b0..b7d6ac1 100644 Binary files a/bin/main/de/oaa/xxx/user/Beziehungsstatus.class and b/bin/main/de/oaa/xxx/user/Beziehungsstatus.class differ diff --git a/bin/main/de/oaa/xxx/user/Geschlecht.class b/bin/main/de/oaa/xxx/user/Geschlecht.class index 8d1a4ca..47ef644 100644 Binary files a/bin/main/de/oaa/xxx/user/Geschlecht.class and b/bin/main/de/oaa/xxx/user/Geschlecht.class differ diff --git a/bin/main/de/oaa/xxx/user/LoginController.class b/bin/main/de/oaa/xxx/user/LoginController.class index 6e63271..80ae818 100644 Binary files a/bin/main/de/oaa/xxx/user/LoginController.class and b/bin/main/de/oaa/xxx/user/LoginController.class differ diff --git a/bin/main/de/oaa/xxx/user/Neigung.class b/bin/main/de/oaa/xxx/user/Neigung.class index 7678bcd..1fcf40f 100644 Binary files a/bin/main/de/oaa/xxx/user/Neigung.class and b/bin/main/de/oaa/xxx/user/Neigung.class differ diff --git a/bin/main/de/oaa/xxx/user/Sichtbarkeit.class b/bin/main/de/oaa/xxx/user/Sichtbarkeit.class index db51ed7..5a79822 100644 Binary files a/bin/main/de/oaa/xxx/user/Sichtbarkeit.class and b/bin/main/de/oaa/xxx/user/Sichtbarkeit.class differ diff --git a/bin/main/de/oaa/xxx/user/User.class b/bin/main/de/oaa/xxx/user/User.class index beb0ee0..bf5650f 100644 Binary files a/bin/main/de/oaa/xxx/user/User.class and b/bin/main/de/oaa/xxx/user/User.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$BdsmDefaultsRequest.class b/bin/main/de/oaa/xxx/user/UserController$BdsmDefaultsRequest.class index a05c0b7..9d01a7d 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$BdsmDefaultsRequest.class and b/bin/main/de/oaa/xxx/user/UserController$BdsmDefaultsRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$DatingFilterRequest.class b/bin/main/de/oaa/xxx/user/UserController$DatingFilterRequest.class new file mode 100644 index 0000000..a57b9d3 Binary files /dev/null and b/bin/main/de/oaa/xxx/user/UserController$DatingFilterRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$DatingRequest.class b/bin/main/de/oaa/xxx/user/UserController$DatingRequest.class index 8e0bed5..4f124bb 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$DatingRequest.class and b/bin/main/de/oaa/xxx/user/UserController$DatingRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$GeburtsdatumChangeRequest.class b/bin/main/de/oaa/xxx/user/UserController$GeburtsdatumChangeRequest.class index e5fe5b3..6777983 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$GeburtsdatumChangeRequest.class and b/bin/main/de/oaa/xxx/user/UserController$GeburtsdatumChangeRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$NameChangeRequest.class b/bin/main/de/oaa/xxx/user/UserController$NameChangeRequest.class index e4b4eac..2c3c89c 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$NameChangeRequest.class and b/bin/main/de/oaa/xxx/user/UserController$NameChangeRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$NotificationPreferenceRequest.class b/bin/main/de/oaa/xxx/user/UserController$NotificationPreferenceRequest.class index 61071f8..d9b778a 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$NotificationPreferenceRequest.class and b/bin/main/de/oaa/xxx/user/UserController$NotificationPreferenceRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$PrivacyRequest.class b/bin/main/de/oaa/xxx/user/UserController$PrivacyRequest.class index 01727af..8bb4a74 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$PrivacyRequest.class and b/bin/main/de/oaa/xxx/user/UserController$PrivacyRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$ProfilePictureRequest.class b/bin/main/de/oaa/xxx/user/UserController$ProfilePictureRequest.class index 32982c5..fa1b10b 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$ProfilePictureRequest.class and b/bin/main/de/oaa/xxx/user/UserController$ProfilePictureRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$ProfileRequest.class b/bin/main/de/oaa/xxx/user/UserController$ProfileRequest.class index 1bfccee..78e399d 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$ProfileRequest.class and b/bin/main/de/oaa/xxx/user/UserController$ProfileRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigDto.class b/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigDto.class index 147ca3c..0cc079d 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigDto.class and b/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigDto.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigRequest.class b/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigRequest.class index 506967b..3f66531 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigRequest.class and b/bin/main/de/oaa/xxx/user/UserController$TtlockUserConfigRequest.class differ diff --git a/bin/main/de/oaa/xxx/user/UserController.class b/bin/main/de/oaa/xxx/user/UserController.class index e7e3a26..50527a9 100644 Binary files a/bin/main/de/oaa/xxx/user/UserController.class and b/bin/main/de/oaa/xxx/user/UserController.class differ diff --git a/bin/main/de/oaa/xxx/user/UserEntity.class b/bin/main/de/oaa/xxx/user/UserEntity.class index 148cbdb..723c568 100644 Binary files a/bin/main/de/oaa/xxx/user/UserEntity.class and b/bin/main/de/oaa/xxx/user/UserEntity.class differ diff --git a/bin/main/de/oaa/xxx/user/UserRepository.class b/bin/main/de/oaa/xxx/user/UserRepository.class index fbc1b69..6caef78 100644 Binary files a/bin/main/de/oaa/xxx/user/UserRepository.class and b/bin/main/de/oaa/xxx/user/UserRepository.class differ diff --git a/bin/main/de/oaa/xxx/user/UserService.class b/bin/main/de/oaa/xxx/user/UserService.class index 3a50862..917a588 100644 Binary files a/bin/main/de/oaa/xxx/user/UserService.class and b/bin/main/de/oaa/xxx/user/UserService.class differ diff --git a/bin/main/de/oaa/xxx/util/ValidationResult.class b/bin/main/de/oaa/xxx/util/ValidationResult.class index ff28a27..4039627 100644 Binary files a/bin/main/de/oaa/xxx/util/ValidationResult.class and b/bin/main/de/oaa/xxx/util/ValidationResult.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/UserVorliebeEntity.class b/bin/main/de/oaa/xxx/vorlieben/UserVorliebeEntity.class index 06ddca9..1d6f47c 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/UserVorliebeEntity.class and b/bin/main/de/oaa/xxx/vorlieben/UserVorliebeEntity.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/UserVorliebeRepository.class b/bin/main/de/oaa/xxx/vorlieben/UserVorliebeRepository.class index ff18173..323f6f8 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/UserVorliebeRepository.class and b/bin/main/de/oaa/xxx/vorlieben/UserVorliebeRepository.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebeBewertung.class b/bin/main/de/oaa/xxx/vorlieben/VorliebeBewertung.class index e947e7a..281d542 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebeBewertung.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebeBewertung.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebeItemEntity.class b/bin/main/de/oaa/xxx/vorlieben/VorliebeItemEntity.class index a3aee96..402c69a 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebeItemEntity.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebeItemEntity.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebeItemRepository.class b/bin/main/de/oaa/xxx/vorlieben/VorliebeItemRepository.class index 8fa68bc..206e6c1 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebeItemRepository.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebeItemRepository.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebeKategorieEntity.class b/bin/main/de/oaa/xxx/vorlieben/VorliebeKategorieEntity.class index f377e6d..7dd6ec6 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebeKategorieEntity.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebeKategorieEntity.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebenAdminController.class b/bin/main/de/oaa/xxx/vorlieben/VorliebenAdminController.class index 9c07338..c1ca8d3 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebenAdminController.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebenAdminController.class differ diff --git a/bin/main/de/oaa/xxx/vorlieben/VorliebenController.class b/bin/main/de/oaa/xxx/vorlieben/VorliebenController.class index 69b4f74..2bf78e3 100644 Binary files a/bin/main/de/oaa/xxx/vorlieben/VorliebenController.class and b/bin/main/de/oaa/xxx/vorlieben/VorliebenController.class differ diff --git a/bin/main/static/community/benutzer.html b/bin/main/static/community/benutzer.html index a85d8f9..b347d13 100644 --- a/bin/main/static/community/benutzer.html +++ b/bin/main/static/community/benutzer.html @@ -74,22 +74,60 @@ .profil-actions { display: flex; gap: 0.5rem; - justify-content: center; - flex-wrap: wrap; + align-items: center; width: 100%; padding: 0.85rem 0; border-top: 1px solid var(--color-secondary); border-bottom: 1px solid var(--color-secondary); margin: 0.5rem 0 0.25rem; } - .profil-actions:empty { display: none; } + .profil-actions-spacer { flex: 1; } + + /* Aktionen-Dropdown */ + .aktionen-wrap { position: relative; } + .aktionen-btn { + background: none; border: 1px solid var(--color-secondary); + color: var(--color-muted); border-radius: 6px; + padding: 0.55rem 1.2rem; cursor: pointer; + display: flex; align-items: center; gap: 0.35rem; margin: 0; width: auto; + } + .aktionen-btn:hover { color: var(--color-text); } + .aktionen-menu { + display: none; position: absolute; right: 0; top: calc(100% + 6px); + background: var(--color-card); border: 1px solid var(--color-secondary); + border-radius: 8px; min-width: 190px; z-index: 200; + box-shadow: 0 6px 24px rgba(0,0,0,0.55); overflow: hidden; + } + .aktionen-menu.open { display: block; } + .aktionen-wrap .aktionen-menu button { + display: block; width: 100%; text-align: left; box-sizing: border-box; + background: none; border: none; + border-bottom: 1px solid var(--color-secondary); + color: var(--color-text); padding: 0.65rem 1rem; + font-size: 0.9rem; cursor: pointer; margin: 0; border-radius: 0; + } + .aktionen-wrap .aktionen-menu button:last-child { border-bottom: none; } + .aktionen-wrap .aktionen-menu button:hover { background: var(--color-secondary); } + .aktionen-wrap .aktionen-menu button.danger { color: #c0392b; } + .aktionen-wrap .aktionen-menu button:disabled { color: var(--color-muted); cursor: default; } + + /* Match-Name */ + .profil-name.is-match { + border: 2px solid var(--color-primary); + border-radius: 8px; padding: 0.15rem 0.75rem; + } .profil-actions button, .profil-actions a.btn { margin-top: 0; width: auto; padding: 0.55rem 1.2rem; + display: inline-flex; + align-items: center; + line-height: 1; + box-sizing: border-box; + font-size: 0.9rem; } /* ── Section labels ── */ @@ -104,6 +142,86 @@ padding-top: 1.5rem; } + /* ── Profil-Dates ── */ + #datesList { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 1rem; + } + .date-card { + background: var(--color-card); + border: 1px solid var(--color-secondary); + border-radius: 12px; + overflow: hidden; + cursor: pointer; + transition: border-color 0.15s, box-shadow 0.15s; + display: flex; + flex-direction: column; + } + .date-card:hover { border-color: var(--color-primary); box-shadow: 0 4px 18px rgba(0,0,0,0.35); } + .date-card-img { + width: 100%; aspect-ratio: 16/9; + background: var(--color-secondary); + display: flex; align-items: center; justify-content: center; + font-size: 2.5rem; color: var(--color-muted); + overflow: hidden; flex-shrink: 0; + } + .date-card-img img { width: 100%; height: 100%; object-fit: cover; } + .date-card-body { padding: 0.75rem; display: flex; flex-direction: column; gap: 0.4rem; flex: 1; } + .date-card-title { font-weight: 700; font-size: 0.95rem; line-height: 1.3; } + .date-card-desc { + font-size: 0.78rem; color: var(--color-muted); line-height: 1.4; + overflow: hidden; display: -webkit-box; + -webkit-line-clamp: 2; -webkit-box-orient: vertical; + } + .date-card-footer { + display: flex; align-items: center; gap: 0.5rem; + padding: 0.5rem 0.75rem; + border-top: 1px solid var(--color-secondary); + font-size: 0.76rem; flex-shrink: 0; + } + .date-card-meta { color: var(--color-muted); white-space: nowrap; } + .date-card-date { color: var(--color-muted); font-size: 0.73rem; } + /* ── Profil-Date-Dialog (gleiche Optik wie auf der Dates-Seite) ── */ + .date-dialog-bg { + display: none; position: fixed; inset: 0; + background: rgba(0,0,0,0.65); z-index: 500; + align-items: center; justify-content: center; padding: 1rem; + } + .date-dialog-bg.open { display: flex; } + .date-dialog { + background: var(--color-card); border-radius: 16px; + width: 100%; max-width: 520px; max-height: 92vh; + overflow-y: auto; position: relative; display: flex; flex-direction: column; + } + .date-dialog-img { + width: 100%; aspect-ratio: 16/9; background: var(--color-secondary); + display: flex; align-items: center; justify-content: center; + font-size: 3rem; color: var(--color-muted); + overflow: hidden; flex-shrink: 0; border-radius: 16px 16px 0 0; + } + .date-dialog-img img { width: 100%; height: 100%; object-fit: cover; } + .date-dialog-body { padding: 1.25rem; display: flex; flex-direction: column; gap: 0.75rem; } + .date-dialog-close { + position: absolute; top: 0.75rem; right: 0.85rem; + background: rgba(0,0,0,0.45); border: none; color: #fff; + width: 2rem; height: 2rem; border-radius: 50%; + font-size: 1rem; cursor: pointer; + display: flex; align-items: center; justify-content: center; + padding: 0; z-index: 1; + } + .date-dialog-close:hover { background: rgba(0,0,0,0.65); } + .date-dialog-title { font-size: 1.2rem; font-weight: 700; line-height: 1.3; } + .date-dialog-when { display: flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; color: var(--color-muted); } + .date-dialog-desc { + background: var(--color-secondary); border-radius: 8px; + padding: 0.85rem 1rem; font-size: 0.9rem; line-height: 1.55; white-space: pre-wrap; + } + .date-dialog-stats { font-size: 0.82rem; color: var(--color-muted); } + .date-dialog-actions { display: flex; gap: 0.6rem; flex-wrap: wrap; } + .date-interest-btn { flex: 1; min-width: 120px; } + .date-interest-btn.active { background: var(--color-primary); color: #fff; } + /* ── Gallery Carousel ── */ .gallery-strip { display: grid; @@ -183,7 +301,8 @@ align-items: center; gap: 0.3rem; cursor: pointer; - flex: 0 0 calc(20% - 0.6rem); + flex: 0 0 76px; + width: 76px; min-width: 0; } @@ -208,7 +327,7 @@ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - max-width: 64px; + width: 76px; } .friend-thumb:hover span { color: var(--color-primary); } @@ -397,7 +516,8 @@ /* ── Post / Bild Lightbox ── */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:400; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -410,7 +530,7 @@ .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } .lb-img-nav { display:flex; gap:0.75rem; align-items:center; justify-content:center; margin-top:0.75rem; flex-wrap:wrap; } .compose-action-btn { background:none; border:1px solid var(--color-secondary); color:var(--color-muted); border-radius:6px; padding:0.35rem 0.6rem; font-size:0.95rem; cursor:pointer; margin:0; width:auto; } - @media (max-width:650px) { .lb-layout { flex-direction:column; max-height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } + @media (max-width:650px) { .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } @@ -450,15 +570,23 @@
+ + + diff --git a/bin/main/static/community/feed.html b/bin/main/static/community/feed.html index 2713d1a..5ebc282 100644 --- a/bin/main/static/community/feed.html +++ b/bin/main/static/community/feed.html @@ -71,7 +71,8 @@ /* Lightbox */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:300; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -82,7 +83,7 @@ .lb-comment-compose textarea:focus { border-color:var(--color-primary); } .lb-comment-compose-actions { display:flex; gap:0.5rem; justify-content:flex-end; } .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } - @media (max-width:650px) { .lb-layout { flex-direction:column; max-height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } + @media (max-width:650px) { .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } /* Comment + Like-Stile kommen aus shared.js */ diff --git a/bin/main/static/community/gruppe.html b/bin/main/static/community/gruppe.html index 7e7fcec..f5c8c01 100644 --- a/bin/main/static/community/gruppe.html +++ b/bin/main/static/community/gruppe.html @@ -114,7 +114,8 @@ /* Post lightbox */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:300; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -125,7 +126,7 @@ .lb-comment-compose-actions { display:flex; gap:0.5rem; justify-content:flex-end; } .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } @media (max-width:650px) { - .lb-layout { flex-direction:column; max-height:95vh; } + .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } diff --git a/bin/main/static/community/nachrichten.html b/bin/main/static/community/nachrichten.html index 4f5f054..6c24306 100644 --- a/bin/main/static/community/nachrichten.html +++ b/bin/main/static/community/nachrichten.html @@ -529,15 +529,41 @@ if (!text) return; input.value = ''; try { - await fetch('/social/messages', { + const res = await fetch('/social/messages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ receiverId: activePartnerId, text }) }); + if (res.status === 403) { + let reason = ''; + try { const body = await res.json(); reason = body.reason; } catch (_) {} + if (reason === 'FIRST_MESSAGE_RESTRICTED') { + showThreadNotice('Du kannst diese Person nur anschreiben, wenn ihr befreundet seid, ein Match habt oder du ein Pro-Abo hast.'); + } else if (reason === 'BLOCKED') { + showThreadNotice('Diese Konversation ist nicht mehr möglich.'); + } else { + showThreadNotice('Nachricht konnte nicht gesendet werden.'); + } + // Text wieder zurücksetzen, damit der User ihn nicht verliert + input.value = text; + return; + } await pollNewMessages(); } catch (e) { console.error(e); } } + function showThreadNotice(msg) { + const existing = document.getElementById('threadNotice'); + if (existing) existing.remove(); + const notice = document.createElement('div'); + notice.id = 'threadNotice'; + notice.style.cssText = 'background:rgba(180,0,60,0.12);border:1px solid rgba(180,0,60,0.35);border-radius:8px;padding:0.75rem 1rem;font-size:0.88rem;color:var(--color-text);margin:0.5rem 0;line-height:1.45;'; + notice.textContent = msg; + const container = document.getElementById('threadMessages'); + container.appendChild(notice); + container.scrollTop = container.scrollHeight; + } + document.getElementById('msgInput').addEventListener('keydown', e => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendMsg(); } }); diff --git a/bin/main/static/dating.html b/bin/main/static/dating.html index 06f2b15..ba95aa9 100644 --- a/bin/main/static/dating.html +++ b/bin/main/static/dating.html @@ -9,31 +9,17 @@ @@ -396,29 +980,237 @@
-

Dating

- -
- - +
+ + + +
+ + +
-
-
+
+ +
+
+
+ +
+
+ + +
+ Wird geladen… +
+ +
+
+ +
+
+ + +
+ +
+

Verfügbare Dates

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

Interessenten

+
+
Wird geladen…
+
+
+
+
+ + +
+
+ +
Date erstellen
+
+ +
+ 📷 Bild hinzufügen + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + +
+
+ +
+
+ 👤 + +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
💕 Match! 💕
+
+
+
+
+
+
+ + Nachricht schreiben +
+ + +
+
+ +
+
+ 👤 + +
+ + +
+
+
+
+
+ + +
+
+ diff --git a/bin/main/static/js/image-viewer.js b/bin/main/static/js/image-viewer.js index 148a4d0..c9226ac 100644 --- a/bin/main/static/js/image-viewer.js +++ b/bin/main/static/js/image-viewer.js @@ -147,8 +147,8 @@ class ImageViewer { s.textContent = ` #imageViewer{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.88);z-index:500;align-items:center;justify-content:center;padding:2rem} #imageViewer.open{display:flex} -#ivLayout{display:flex;flex-direction:row;gap:1rem;height:min(78vh,660px);max-width:calc(100vw - 4rem);align-items:stretch} -#ivImageSide{width:660px;flex-shrink:1;min-width:0;display:flex;flex-direction:column} +#ivLayout{display:flex;flex-direction:row;gap:1rem;height:min(90vh,1024px);max-width:min(1340px,calc(100vw - 4rem));align-items:stretch} +#ivImageSide{width:1024px;flex-shrink:1;min-width:0;display:flex;flex-direction:column} .iv-image-box{flex:1;position:relative;background:var(--color-card);border:1px solid var(--color-secondary);border-radius:12px;overflow:hidden;display:flex;align-items:center;justify-content:center} #ivImg{width:100%;height:100%;object-fit:contain;display:block} .iv-overlay{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,0.6));border-radius:0 0 12px 12px;padding:2rem 0.75rem 0.6rem;display:flex;align-items:center;justify-content:space-between;gap:0.5rem} diff --git a/bin/main/static/js/social-sidebar.js b/bin/main/static/js/social-sidebar.js index 12c6246..d2c5507 100644 --- a/bin/main/static/js/social-sidebar.js +++ b/bin/main/static/js/social-sidebar.js @@ -91,6 +91,13 @@ } catch(ex) {} }); + es.addEventListener('MATCH', e => { + try { + const data = JSON.parse(e.data); + if (typeof window._onSseMatch === 'function') window._onSseMatch(data); + } catch(ex) {} + }); + es.onerror = () => { es.close(); // Vor dem Reconnect prüfen ob noch eingeloggt (verhindert Endlos-Schleife bei abgelaufener Session) diff --git a/bin/main/static/konto/einstellungen.html b/bin/main/static/konto/einstellungen.html index cd0d0d8..7ee3bc1 100644 --- a/bin/main/static/konto/einstellungen.html +++ b/bin/main/static/konto/einstellungen.html @@ -512,6 +512,38 @@
+
+
+
Standard-Umkreis
+
Maximale Entfernung als Standardwert im Dating-Filter.
+
+
+
+ Umkreis50 km +
+ +
+
+
+
+
Standard-Altersbereich
+
Gesuchter Altersbereich als Standardwert im Dating-Filter.
+
+
+
+ Alter18 – 60 +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/bin/test/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateServiceTest.class b/bin/test/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateServiceTest.class index fd6adb5..e352bcb 100644 Binary files a/bin/test/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateServiceTest.class and b/bin/test/de/oaa/xxx/games/chastity/timelock/TimeLockTemplateServiceTest.class differ diff --git a/src/main/java/de/oaa/xxx/dating/DatingController.java b/src/main/java/de/oaa/xxx/dating/DatingController.java index 0818811..f282cf6 100644 --- a/src/main/java/de/oaa/xxx/dating/DatingController.java +++ b/src/main/java/de/oaa/xxx/dating/DatingController.java @@ -7,41 +7,54 @@ import de.oaa.xxx.user.Neigung; import de.oaa.xxx.user.UserEntity; import de.oaa.xxx.user.UserRepository; import de.oaa.xxx.user.UserService; +import de.oaa.xxx.vorlieben.UserVorliebeRepository; +import de.oaa.xxx.vorlieben.VorliebeItemEntity; +import de.oaa.xxx.vorlieben.VorliebeItemRepository; +import de.oaa.xxx.vorlieben.VorliebeBewertung; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import java.security.Principal; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; @RestController @RequestMapping("/dating") public class DatingController { + private static final Set POSITIVE_RATINGS = Set.of( + VorliebeBewertung.MAG_ICH, VorliebeBewertung.UNBEDINGT, VorliebeBewertung.WILL_AUSPROBIEREN); + private final DatingService datingService; private final UserService userService; private final UserRepository userRepository; private final DatingPassRepository passRepository; private final SubscriptionLimitService subscriptionLimitService; private final SseService sseService; + private final UserVorliebeRepository userVorliebeRepository; + private final VorliebeItemRepository vorliebeItemRepository; public DatingController(DatingService datingService, UserService userService, UserRepository userRepository, DatingPassRepository passRepository, SubscriptionLimitService subscriptionLimitService, - SseService sseService) { + SseService sseService, + UserVorliebeRepository userVorliebeRepository, + VorliebeItemRepository vorliebeItemRepository) { this.datingService = datingService; this.userService = userService; this.userRepository = userRepository; this.passRepository = passRepository; this.subscriptionLimitService = subscriptionLimitService; this.sseService = sseService; + this.userVorliebeRepository = userVorliebeRepository; + this.vorliebeItemRepository = vorliebeItemRepository; } + record VorliebeChipDto(String name, String bewertung) {} + // ── Profilsuche ─────────────────────────────────────────────────────────── @GetMapping("/profile-ids") @@ -168,6 +181,61 @@ public class DatingController { return ResponseEntity.ok(datingService.getMatches(me.getUserId())); } + /** + * Prüft ob ein Match mit dem angegebenen User besteht. + */ + @GetMapping("/match/{userId}") + public ResponseEntity> checkMatch( + @PathVariable UUID userId, Principal principal) { + UserEntity me = userService.requireUser(principal); + boolean isMatch = datingService.isMatch(me.getUserId(), userId); + return ResponseEntity.ok(Map.of("isMatch", isMatch)); + } + + /** + * Match mit dem angegebenen User auflösen (beide Likes werden entfernt). + */ + @DeleteMapping("/match/{userId}") + public ResponseEntity unmatch( + @PathVariable UUID userId, Principal principal) { + UserEntity me = userService.requireUser(principal); + datingService.unmatch(me.getUserId(), userId); + return ResponseEntity.noContent().build(); + } + + /** + * Gibt bis zu 5 zufällige positive Vorlieben (MAG_ICH, UNBEDINGT, WILL_AUSPROBIEREN) + * eines Users zurück – für die Profilvorschau im Dating-Bereich. + */ + @GetMapping("/vorlieben/{userId}") + public ResponseEntity> getDatingVorlieben( + @PathVariable UUID userId, Principal principal) { + userService.requireUser(principal); + + var positive = userVorliebeRepository.findByUserId(userId).stream() + .filter(uv -> POSITIVE_RATINGS.contains(uv.getBewertung())) + .collect(Collectors.toList()); + + if (positive.isEmpty()) return ResponseEntity.ok(List.of()); + + Collections.shuffle(positive); + List sampleIds = positive.stream() + .limit(5) + .map(de.oaa.xxx.vorlieben.UserVorliebeEntity::getItemId) + .toList(); + + Map nameById = vorliebeItemRepository.findAllById(sampleIds).stream() + .collect(Collectors.toMap(VorliebeItemEntity::getItemId, VorliebeItemEntity::getName)); + + List result = positive.stream() + .limit(5) + .filter(uv -> nameById.containsKey(uv.getItemId())) + .map(uv -> new VorliebeChipDto(nameById.get(uv.getItemId()), uv.getBewertung().name())) + .toList(); + + return ResponseEntity.ok(result); + } + // ── Helpers ─────────────────────────────────────────────────────────────── private UserEntity requireDatingUser(Principal principal) { diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateCleanupTask.java b/src/main/java/de/oaa/xxx/dating/DatingDateCleanupTask.java new file mode 100644 index 0000000..ab6004b --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateCleanupTask.java @@ -0,0 +1,43 @@ +package de.oaa.xxx.dating; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * Löscht täglich abgelaufene Dates und deren Interessenten-Einträge. + * - Dates mit Termin: laufen nach dem Termin ab (expiresAt = scheduledAt) + * - Dates ohne Termin: laufen 30 Tage nach Erstellung ab (expiresAt = createdAt + 30 Tage) + */ +@Component +public class DatingDateCleanupTask { + + private static final Logger LOGGER = LoggerFactory.getLogger(DatingDateCleanupTask.class); + + private final DatingDateRepository dateRepository; + private final DatingDateInterestRepository interestRepository; + + public DatingDateCleanupTask(DatingDateRepository dateRepository, + DatingDateInterestRepository interestRepository) { + this.dateRepository = dateRepository; + this.interestRepository = interestRepository; + } + + @Scheduled(cron = "0 0 3 * * *") // täglich um 03:00 Uhr + @Transactional + public void deleteExpiredDates() { + List expired = dateRepository.findAllByExpiresAtBefore(LocalDateTime.now()); + if (expired.isEmpty()) return; + + for (DatingDateEntity date : expired) { + interestRepository.deleteByDateId(date.getDateId()); + } + dateRepository.deleteAll(expired); + LOGGER.info("Dating-Cleanup: {} abgelaufene Date(s) gelöscht", expired.size()); + } +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateController.java b/src/main/java/de/oaa/xxx/dating/DatingDateController.java new file mode 100644 index 0000000..7076773 --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateController.java @@ -0,0 +1,396 @@ +package de.oaa.xxx.dating; + +import de.oaa.xxx.social.SystemMessageService; +import de.oaa.xxx.social.entity.MessageCause; +import de.oaa.xxx.social.repository.BlockRepository; +import de.oaa.xxx.subscription.SubscriptionLimitService; +import de.oaa.xxx.user.Geschlecht; +import de.oaa.xxx.user.Neigung; +import de.oaa.xxx.user.UserEntity; +import de.oaa.xxx.user.UserRepository; +import de.oaa.xxx.user.UserService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import java.security.Principal; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/dating/dates") +public class DatingDateController { + + private static final int MAX_DATES_STANDARD = 1; + private static final int MAX_DATES_PRO = 5; + + private final DatingDateRepository dateRepository; + private final DatingDateInterestRepository interestRepository; + private final DatingService datingService; + private final UserService userService; + private final UserRepository userRepository; + private final BlockRepository blockRepository; + private final SubscriptionLimitService subscriptionLimitService; + private final SystemMessageService systemMessageService; + + public DatingDateController(DatingDateRepository dateRepository, + DatingDateInterestRepository interestRepository, + DatingService datingService, + UserService userService, + UserRepository userRepository, + BlockRepository blockRepository, + SubscriptionLimitService subscriptionLimitService, + SystemMessageService systemMessageService) { + this.dateRepository = dateRepository; + this.interestRepository = interestRepository; + this.datingService = datingService; + this.userService = userService; + this.userRepository = userRepository; + this.blockRepository = blockRepository; + this.subscriptionLimitService = subscriptionLimitService; + this.systemMessageService = systemMessageService; + } + + // ── DTOs ────────────────────────────────────────────────────────────────── + + record DatingDateDto( + UUID dateId, + UUID creatorId, + String creatorName, + String creatorProfilePicture, + String title, + String description, + String imageData, + LocalDateTime scheduledAt, + LocalDateTime createdAt, + int interestCount, + boolean myInterest + ) {} + + record DatesResult(List mine, List available) {} + + record CreateDateRequest(String title, String description, String imageData, LocalDateTime scheduledAt) {} + + record InterestResult(boolean myInterest, int interestCount) {} + + record DateInterestDto(UUID userId, String name, String profilePicture, LocalDateTime interestedAt, boolean blocked) {} + + // ── Dates abrufen ───────────────────────────────────────────────────────── + + /** + * Gibt eigene Dates (ungefiltert) + verfügbare Dates (gefiltert nach Suchkriterien) zurück. + * Erfordert Dating aktiv + Standort (gleiche Voraussetzung wie Entdecken-Tab). + */ + @GetMapping + public ResponseEntity getDates( + @RequestParam(name = "maxDistanceKm", defaultValue = "50") int maxDistanceKm, + @RequestParam(name = "minAge", defaultValue = "18") int minAge, + @RequestParam(name = "maxAge", defaultValue = "99") int maxAge, + @RequestParam(name = "geschlechter", required = false) List geschlechter, + @RequestParam(name = "neigungen", required = false) List neigungen, + @RequestParam(name = "vorliebenIds", required = false) List vorliebenIds, + @RequestParam(name = "vorliebenUnd", defaultValue = "false") boolean vorliebenUnd, + Principal principal) { + + UserEntity me = requireDatingUser(principal); + UUID myId = me.getUserId(); + + LocalDateTime now = LocalDateTime.now(); + + // Meine eigenen Dates (aktive) + List myDates = dateRepository.findByCreatorIdOrderByCreatedAtDesc(myId).stream() + .filter(d -> d.getExpiresAt().isAfter(now)) + .toList(); + + // Alle fremden, noch nicht abgelaufenen Dates + List candidates = dateRepository.findAvailableExcluding(myId, now); + + // Ersteller-IDs filtern (gleiche Kriterien wie Entdecken-Tab) + Set creatorIds = candidates.stream().map(DatingDateEntity::getCreatorId).collect(Collectors.toSet()); + DatingService.DatingFilter filter = new DatingService.DatingFilter( + Math.max(maxDistanceKm, 1), + Math.max(minAge, 0), + Math.min(maxAge, 120), + parseEnumList(geschlechter, Geschlecht.class), + parseEnumList(neigungen, Neigung.class), + vorliebenIds != null ? vorliebenIds : List.of(), + vorliebenUnd + ); + Set matchingCreators = datingService.filterUserIds(creatorIds, filter, + me.getDatingLat(), me.getDatingLon()); + + List available = candidates.stream() + .filter(d -> matchingCreators.contains(d.getCreatorId())) + .toList(); + + // Creator-User-Daten laden + Set allCreatorIds = new HashSet<>(creatorIds); + myDates.forEach(d -> allCreatorIds.add(d.getCreatorId())); + Map creators = userRepository.findAllById(allCreatorIds).stream() + .collect(Collectors.toMap(UserEntity::getUserId, u -> u)); + + // Alle relevanten Date-IDs + Set allDateIds = new HashSet<>(); + myDates.forEach(d -> allDateIds.add(d.getDateId())); + available.forEach(d -> allDateIds.add(d.getDateId())); + + // Meine Interessen und Interest-Counts + Set myInterests = new HashSet<>(); + Map interestCounts = new HashMap<>(); + for (UUID dateId : allDateIds) { + if (interestRepository.existsByDateIdAndUserId(dateId, myId)) myInterests.add(dateId); + interestCounts.put(dateId, interestRepository.countByDateId(dateId)); + } + + List mineDtos = myDates.stream() + .map(d -> toDto(d, creators, myInterests, interestCounts)) + .toList(); + + List availableDtos = available.stream() + .map(d -> toDto(d, creators, myInterests, interestCounts)) + .toList(); + + return ResponseEntity.ok(new DatesResult(mineDtos, availableDtos)); + } + + // ── Dates eines bestimmten Users abrufen (Profilansicht) ───────────────── + + /** + * Gibt die aktiven Dates eines bestimmten Users zurück. + * Nur abrufbar, wenn der anfragende User selbst Dating aktiviert hat. + */ + @GetMapping("/by-user/{userId}") + public ResponseEntity> getDatesByUser( + @PathVariable("userId") UUID userId, + Principal principal) { + + UserEntity me = requireDatingUser(principal); + LocalDateTime now = LocalDateTime.now(); + + List dates = dateRepository.findByCreatorIdOrderByCreatedAtDesc(userId).stream() + .filter(d -> d.getExpiresAt().isAfter(now)) + .toList(); + + if (dates.isEmpty()) return ResponseEntity.ok(List.of()); + + UserEntity creator = userRepository.findById(userId).orElse(null); + Map creators = creator != null ? Map.of(userId, creator) : Map.of(); + + Set myInterests = new HashSet<>(); + Map interestCounts = new HashMap<>(); + for (DatingDateEntity d : dates) { + if (interestRepository.existsByDateIdAndUserId(d.getDateId(), me.getUserId())) + myInterests.add(d.getDateId()); + interestCounts.put(d.getDateId(), interestRepository.countByDateId(d.getDateId())); + } + + return ResponseEntity.ok(dates.stream() + .map(d -> toDto(d, creators, myInterests, interestCounts)) + .toList()); + } + + // ── Date erstellen ──────────────────────────────────────────────────────── + + @PostMapping + public ResponseEntity createDate(@RequestBody CreateDateRequest req, Principal principal) { + UserEntity me = requireDatingUser(principal); + + if (req.title() == null || req.title().isBlank()) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Titel fehlt"); + if (req.description() == null || req.description().isBlank()) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Beschreibung fehlt"); + if (req.title().length() > 200) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Titel zu lang"); + + boolean pro = subscriptionLimitService.hasActivePaidSubscription(me.getUserId()); + int maxDates = pro ? MAX_DATES_PRO : MAX_DATES_STANDARD; + long existing = dateRepository.countByCreatorId(me.getUserId()); + if (existing >= maxDates) { + throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, + pro ? "Maximal 5 Dates erlaubt (Pro)" : "Als Standardmitglied ist nur 1 Date erlaubt"); + } + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime expiresAt = req.scheduledAt() != null ? req.scheduledAt() : now.plusDays(30); + + DatingDateEntity entity = new DatingDateEntity(); + entity.setDateId(UUID.randomUUID()); + entity.setCreatorId(me.getUserId()); + entity.setTitle(req.title().strip()); + entity.setDescription(req.description().strip()); + entity.setImageData(req.imageData()); + entity.setScheduledAt(req.scheduledAt()); + entity.setCreatedAt(now); + entity.setExpiresAt(expiresAt); + dateRepository.save(entity); + + Map creators = Map.of(me.getUserId(), me); + return ResponseEntity.status(HttpStatus.CREATED) + .body(toDto(entity, creators, Set.of(), Map.of(entity.getDateId(), 0L))); + } + + // ── Date bearbeiten ─────────────────────────────────────────────────────── + + @PutMapping("/{dateId}") + public ResponseEntity updateDate(@PathVariable("dateId") UUID dateId, + @RequestBody CreateDateRequest req, + Principal principal) { + UserEntity me = requireDatingUser(principal); + DatingDateEntity entity = requireMyDate(dateId, me.getUserId()); + + if (req.title() == null || req.title().isBlank()) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Titel fehlt"); + if (req.description() == null || req.description().isBlank()) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Beschreibung fehlt"); + if (req.title().length() > 200) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Titel zu lang"); + + entity.setTitle(req.title().strip()); + entity.setDescription(req.description().strip()); + if (req.imageData() != null) entity.setImageData(req.imageData().isBlank() ? null : req.imageData()); + entity.setScheduledAt(req.scheduledAt()); + entity.setExpiresAt(req.scheduledAt() != null ? req.scheduledAt() : entity.getCreatedAt().plusDays(30)); + dateRepository.save(entity); + + long count = interestRepository.countByDateId(dateId); + boolean myInterest = interestRepository.existsByDateIdAndUserId(dateId, me.getUserId()); + Map creators = Map.of(me.getUserId(), me); + return ResponseEntity.ok(toDto(entity, creators, myInterest ? Set.of(dateId) : Set.of(), + Map.of(dateId, count))); + } + + // ── Date löschen ────────────────────────────────────────────────────────── + + @DeleteMapping("/{dateId}") + @Transactional + public ResponseEntity deleteDate(@PathVariable("dateId") UUID dateId, Principal principal) { + UserEntity me = requireDatingUser(principal); + requireMyDate(dateId, me.getUserId()); + interestRepository.deleteByDateId(dateId); + dateRepository.deleteById(dateId); + return ResponseEntity.noContent().build(); + } + + // ── Interesse bekunden / zurückziehen ────────────────────────────────────── + + @PostMapping("/{dateId}/interest") + @Transactional + public ResponseEntity toggleInterest(@PathVariable("dateId") UUID dateId, + Principal principal) { + UserEntity me = userService.requireUser(principal); + DatingDateEntity date = dateRepository.findById(dateId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Date nicht gefunden")); + + if (date.getCreatorId().equals(me.getUserId())) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Eigenes Date"); + if (date.getExpiresAt().isBefore(LocalDateTime.now())) + throw new ResponseStatusException(HttpStatus.GONE, "Date abgelaufen"); + + Optional existing = + interestRepository.findByDateIdAndUserId(dateId, me.getUserId()); + + boolean myInterest; + if (existing.isPresent()) { + interestRepository.delete(existing.get()); + myInterest = false; + } else { + DatingDateInterestEntity interest = new DatingDateInterestEntity(); + interest.setInterestId(UUID.randomUUID()); + interest.setDateId(dateId); + interest.setUserId(me.getUserId()); + interest.setInterestedAt(LocalDateTime.now()); + interestRepository.save(interest); + myInterest = true; + + // Benachrichtigung an Ersteller + String text = me.getName() + " hat Interesse an deinem Date \"" + date.getTitle() + "\" bekundet."; + systemMessageService.send(me.getUserId(), date.getCreatorId(), text, + "/dating.html?tab=dates", MessageCause.DATE_INTEREST); + } + + long count = interestRepository.countByDateId(dateId); + return ResponseEntity.ok(new InterestResult(myInterest, (int) count)); + } + + // ── Interessenten abrufen (nur Ersteller) ───────────────────────────────── + + @GetMapping("/{dateId}/interests") + public ResponseEntity> getInterests(@PathVariable("dateId") UUID dateId, + Principal principal) { + UserEntity me = userService.requireUser(principal); + DatingDateEntity date = dateRepository.findById(dateId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Date nicht gefunden")); + + if (!date.getCreatorId().equals(me.getUserId())) + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Kein Zugriff"); + + List interests = interestRepository.findByDateIdOrderByInterestedAtDesc(dateId); + Set userIds = interests.stream().map(DatingDateInterestEntity::getUserId).collect(Collectors.toSet()); + Map users = userRepository.findAllById(userIds).stream() + .collect(Collectors.toMap(UserEntity::getUserId, u -> u)); + + List dtos = interests.stream() + .map(i -> { + UserEntity u = users.get(i.getUserId()); + if (u == null) return null; + boolean blocked = blockRepository.existsBlock(me.getUserId(), u.getUserId()); + return new DateInterestDto(u.getUserId(), u.getName(), + u.getProfilePicture(), i.getInterestedAt(), blocked); + }) + .filter(Objects::nonNull) + .toList(); + + return ResponseEntity.ok(dtos); + } + + // ── Helpers ─────────────────────────────────────────────────────────────── + + private UserEntity requireDatingUser(Principal principal) { + UserEntity me = userService.requireUser(principal); + if (!me.isDatingAktiv()) + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Dating nicht aktiviert"); + if (me.getDatingLat() == null || me.getDatingLon() == null) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Standort nicht gesetzt"); + return me; + } + + private DatingDateEntity requireMyDate(UUID dateId, UUID userId) { + DatingDateEntity entity = dateRepository.findById(dateId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Date nicht gefunden")); + if (!entity.getCreatorId().equals(userId)) + throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Kein Zugriff"); + return entity; + } + + private DatingDateDto toDto(DatingDateEntity d, Map creators, + Set myInterests, Map interestCounts) { + UserEntity creator = creators.get(d.getCreatorId()); + return new DatingDateDto( + d.getDateId(), + d.getCreatorId(), + creator != null ? creator.getName() : null, + creator != null ? creator.getProfilePicture() : null, + d.getTitle(), + d.getDescription(), + d.getImageData(), + d.getScheduledAt(), + d.getCreatedAt(), + interestCounts.getOrDefault(d.getDateId(), 0L).intValue(), + myInterests.contains(d.getDateId()) + ); + } + + private > List parseEnumList(List values, Class enumClass) { + if (values == null || values.isEmpty()) return List.of(); + return values.stream() + .map(s -> { + try { return Enum.valueOf(enumClass, s); } + catch (IllegalArgumentException e) { return null; } + }) + .filter(Objects::nonNull) + .toList(); + } +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateEntity.java b/src/main/java/de/oaa/xxx/dating/DatingDateEntity.java new file mode 100644 index 0000000..6e273fd --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateEntity.java @@ -0,0 +1,46 @@ +package de.oaa.xxx.dating; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@Setter +@Entity +@Table(name = "dating_date") +public class DatingDateEntity { + + @Id + @Column + private UUID dateId; + + @Column(nullable = false) + private UUID creatorId; + + @Column(length = 200, nullable = false) + private String title; + + @Column(columnDefinition = "MEDIUMTEXT", nullable = false) + private String description; + + /** Optional base64-kodiertes Bild */ + @Column(columnDefinition = "MEDIUMTEXT") + private String imageData; + + /** Optionaler Termin – wenn gesetzt, läuft das Date danach ab */ + @Column + private LocalDateTime scheduledAt; + + @Column(nullable = false) + private LocalDateTime createdAt; + + /** + * Ablaufzeitpunkt: scheduledAt (wenn gesetzt) oder createdAt + 30 Tage. + * Wird vom CleanupTask zum Löschen herangezogen. + */ + @Column(nullable = false) + private LocalDateTime expiresAt; +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateInterestEntity.java b/src/main/java/de/oaa/xxx/dating/DatingDateInterestEntity.java new file mode 100644 index 0000000..0c2aae0 --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateInterestEntity.java @@ -0,0 +1,29 @@ +package de.oaa.xxx.dating; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +@Setter +@Entity +@Table(name = "dating_date_interest", + uniqueConstraints = @UniqueConstraint(columnNames = {"date_id", "user_id"})) +public class DatingDateInterestEntity { + + @Id + @Column + private UUID interestId; + + @Column(name = "date_id", nullable = false) + private UUID dateId; + + @Column(name = "user_id", nullable = false) + private UUID userId; + + @Column(nullable = false) + private LocalDateTime interestedAt; +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateInterestRepository.java b/src/main/java/de/oaa/xxx/dating/DatingDateInterestRepository.java new file mode 100644 index 0000000..e8d85b0 --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateInterestRepository.java @@ -0,0 +1,27 @@ +package de.oaa.xxx.dating; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface DatingDateInterestRepository extends JpaRepository { + + List findByDateIdOrderByInterestedAtDesc(UUID dateId); + + Optional findByDateIdAndUserId(UUID dateId, UUID userId); + + boolean existsByDateIdAndUserId(UUID dateId, UUID userId); + + long countByDateId(UUID dateId); + + @Modifying + @Transactional + @Query("DELETE FROM DatingDateInterestEntity i WHERE i.dateId = :dateId") + void deleteByDateId(@Param("dateId") UUID dateId); +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingDateRepository.java b/src/main/java/de/oaa/xxx/dating/DatingDateRepository.java new file mode 100644 index 0000000..f600ba0 --- /dev/null +++ b/src/main/java/de/oaa/xxx/dating/DatingDateRepository.java @@ -0,0 +1,22 @@ +package de.oaa.xxx.dating; + +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.UUID; + +public interface DatingDateRepository extends JpaRepository { + + List findByCreatorIdOrderByCreatedAtDesc(UUID creatorId); + + long countByCreatorId(UUID creatorId); + + @Query("SELECT d FROM DatingDateEntity d WHERE d.creatorId != :excludeId AND d.expiresAt > :now ORDER BY d.createdAt DESC") + List findAvailableExcluding(@Param("excludeId") UUID excludeId, + @Param("now") LocalDateTime now); + + List findAllByExpiresAtBefore(LocalDateTime now); +} diff --git a/src/main/java/de/oaa/xxx/dating/DatingService.java b/src/main/java/de/oaa/xxx/dating/DatingService.java index 824f6f3..7210f9c 100644 --- a/src/main/java/de/oaa/xxx/dating/DatingService.java +++ b/src/main/java/de/oaa/xxx/dating/DatingService.java @@ -60,11 +60,13 @@ public class DatingService { Integer alter, double distanzKm, String profilePicture, + String profilePictureHq, String neigung, String geschlecht, String datingStadt, String beschreibung, - boolean likedByMe + boolean likedByMe, + List matchingVorliebenIds ) {} record LikeResult(boolean liked, boolean newMatch) {} @@ -130,10 +132,34 @@ public class DatingService { .map(DatingLikeEntity::getLikedId) .collect(Collectors.toSet()); + // Meine positiven Vorlieben + Set myPositive = userVorliebeRepository.findByUserId(currentUserId).stream() + .filter(uv -> POSITIVE_RATINGS.contains(uv.getBewertung())) + .map(UserVorliebeEntity::getItemId) + .collect(Collectors.toSet()); + + // Positive Vorlieben aller Kandidaten (Batch-Query) + Set candidateIds = ids.stream().filter(byId::containsKey).collect(Collectors.toSet()); + Map> candidatePositive = myPositive.isEmpty() + ? Map.of() + : userVorliebeRepository.findByUserIdIn(candidateIds).stream() + .filter(uv -> POSITIVE_RATINGS.contains(uv.getBewertung())) + .collect(Collectors.groupingBy( + UserVorliebeEntity::getUserId, + Collectors.mapping(UserVorliebeEntity::getItemId, Collectors.toSet()) + )); + return ids.stream() .map(byId::get) .filter(Objects::nonNull) - .map(u -> toDto(u, currentUserId, likedByMe, myLat, myLon)) + .map(u -> { + Set theirPositive = candidatePositive.getOrDefault(u.getUserId(), Set.of()); + List matching = myPositive.stream() + .filter(theirPositive::contains) + .limit(5) + .toList(); + return toDto(u, currentUserId, likedByMe, myLat, myLon, matching); + }) .toList(); } @@ -216,6 +242,17 @@ public class DatingService { .toList(); } + public boolean isMatch(UUID userId, UUID otherId) { + return matchRepository.existsByUsers(userId, otherId); + } + + public void unmatch(UUID userId, UUID otherId) { + matchRepository.deleteByUsers(userId, otherId); + // Gegenseitige Likes entfernen, damit kein Re-Match beim nächsten Like entsteht + likeRepository.deleteByLikerIdAndLikedId(userId, otherId); + likeRepository.deleteByLikerIdAndLikedId(otherId, userId); + } + public List getLikedByMe(UUID userId) { return likeRepository.findByLikerId(userId).stream() .map(DatingLikeEntity::getLikedId) @@ -273,6 +310,39 @@ public class DatingService { return ids; } + // ── Filter-Utility für andere Services im Package ───────────────────────── + + /** + * Filtert eine Menge von User-IDs nach dem übergebenen DatingFilter. + * Verwendet dieselbe Logik wie findSortedIds(). + * Voraussetzung: Die Kandidaten müssen bereits datingAktiv=true + Koordinaten haben. + */ + Set filterUserIds(Collection candidateIds, DatingFilter filter, + double myLat, double myLon) { + List candidates = userRepository.findAllById(candidateIds).stream() + .filter(u -> u.getDatingLat() != null && u.getDatingLon() != null) + .toList(); + + candidates = filterByDistance(candidates, myLat, myLon, filter.maxDistanceKm()); + candidates = filterByAge(candidates, filter.minAge(), filter.maxAge()); + + if (!filter.geschlechter().isEmpty()) { + candidates = candidates.stream() + .filter(u -> u.getGeschlecht() != null && filter.geschlechter().contains(u.getGeschlecht())) + .toList(); + } + if (!filter.neigungen().isEmpty()) { + candidates = candidates.stream() + .filter(u -> u.getNeigung() != null && filter.neigungen().contains(u.getNeigung())) + .toList(); + } + if (!filter.vorliebenIds().isEmpty()) { + candidates = filterByVorlieben(candidates, filter.vorliebenIds(), filter.vorliebenUnd()); + } + + return candidates.stream().map(UserEntity::getUserId).collect(Collectors.toSet()); + } + // ── Private helpers ─────────────────────────────────────────────────────── private List filterByDistance(List users, double myLat, double myLon, int maxKm) { @@ -316,7 +386,8 @@ public class DatingService { .toList(); } - private DatingProfileDto toDto(UserEntity u, UUID currentUserId, Set likedByMe, double myLat, double myLon) { + private DatingProfileDto toDto(UserEntity u, UUID currentUserId, Set likedByMe, + double myLat, double myLon, List matchingVorliebenIds) { double dist = Math.round(haversineKm(myLat, myLon, u.getDatingLat(), u.getDatingLon()) * 10.0) / 10.0; return new DatingProfileDto( u.getUserId(), @@ -324,11 +395,13 @@ public class DatingService { u.getAlter(), dist, u.getProfilePicture(), + u.getProfilePictureHq(), u.getNeigung() != null ? u.getNeigung().getLabel() : null, u.getGeschlecht() != null ? u.getGeschlecht().getLabel() : null, u.getDatingStadt(), u.getBeschreibung(), - likedByMe.contains(u.getUserId()) + likedByMe.contains(u.getUserId()), + matchingVorliebenIds ); } diff --git a/src/main/java/de/oaa/xxx/social/SystemMessageService.java b/src/main/java/de/oaa/xxx/social/SystemMessageService.java index 32dfcf8..d2cc71b 100644 --- a/src/main/java/de/oaa/xxx/social/SystemMessageService.java +++ b/src/main/java/de/oaa/xxx/social/SystemMessageService.java @@ -57,8 +57,9 @@ public class SystemMessageService { .findByUserIdAndCause(receiverId, cause) .orElseGet(() -> NotificationPreferenceEntity.defaultFor(receiverId, cause)); - // FRIENDREQUEST und INVITATION sind immer nur in-app, kein E-Mail - boolean sendInApp = cause == MessageCause.FRIENDREQUEST || cause == MessageCause.INVITATION || pref.isInApp(); + // FRIENDREQUEST, INVITATION und DATE_INTEREST sind immer nur in-app, kein E-Mail + boolean sendInApp = cause == MessageCause.FRIENDREQUEST || cause == MessageCause.INVITATION + || cause == MessageCause.DATE_INTEREST || pref.isInApp(); if (sendInApp) { MessageEntity msg = new MessageEntity(); @@ -76,7 +77,7 @@ public class SystemMessageService { sseService.push(receiverId, "NOTIFICATION", Map.of("unreadCount", unread, "text", text)); } - if (pref.isEmail() && cause != MessageCause.INVITATION) { + if (pref.isEmail() && cause != MessageCause.INVITATION && cause != MessageCause.DATE_INTEREST) { userRepository.findById(receiverId).ifPresent(user -> { try { Email email = new Email(); @@ -107,6 +108,7 @@ public class SystemMessageService { case EMERGENCY -> "XXX The Game – ⚠️ Notfall"; case FRIENDREQUEST -> "XXX The Game – Neue Freundschaftsanfrage"; case SUPPORT -> "xXx Sphere – Nachricht vom Support"; + case DATE_INTEREST -> "xXx Sphere – Interesse an deinem Date"; }; } diff --git a/src/main/java/de/oaa/xxx/social/entity/MessageCause.java b/src/main/java/de/oaa/xxx/social/entity/MessageCause.java index c48a816..603ed30 100644 --- a/src/main/java/de/oaa/xxx/social/entity/MessageCause.java +++ b/src/main/java/de/oaa/xxx/social/entity/MessageCause.java @@ -5,5 +5,6 @@ public enum MessageCause { GAME_STATE, EMERGENCY, FRIENDREQUEST, - SUPPORT + SUPPORT, + DATE_INTEREST } diff --git a/src/main/java/de/oaa/xxx/user/UserController.java b/src/main/java/de/oaa/xxx/user/UserController.java index e570149..87d96e7 100644 --- a/src/main/java/de/oaa/xxx/user/UserController.java +++ b/src/main/java/de/oaa/xxx/user/UserController.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseCookie; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -94,6 +95,8 @@ public class UserController { record DatingRequest(boolean datingAktiv, String datingStadt, Double datingLat, Double datingLon, List datingGeschlechter, Integer datingMaxDistanzKm, Integer datingMinAlter, Integer datingMaxAlter) {} + record DatingFilterRequest(List datingGeschlechter, + Integer datingMaxDistanzKm, Integer datingMinAlter, Integer datingMaxAlter) {} record PrivacyRequest( Sichtbarkeit sichtbarkeitGrunddaten, Sichtbarkeit sichtbarkeitGalerie, @@ -112,22 +115,51 @@ public class UserController { } 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); - if (request.datingGeschlechter() != null && !request.datingGeschlechter().isEmpty()) { + if (!request.datingAktiv()) { + // Alle Dating-Einstellungen zurücksetzen + user.setDatingStadt(null); + user.setDatingLat(null); + user.setDatingLon(null); + user.setDatingGeschlechter(null); + user.setDatingMaxDistanzKm(null); + user.setDatingMinAlter(null); + user.setDatingMaxAlter(null); + } else { + user.setDatingStadt(request.datingStadt().trim()); + user.setDatingLat(request.datingLat()); + user.setDatingLon(request.datingLon()); + if (request.datingGeschlechter() != null && !request.datingGeschlechter().isEmpty()) { + String joined = request.datingGeschlechter().stream() + .filter(g -> { try { Geschlecht.valueOf(g); return true; } catch (IllegalArgumentException e) { return false; } }) + .collect(Collectors.joining(",")); + user.setDatingGeschlechter(joined.isBlank() ? null : joined); + } else { + user.setDatingGeschlechter(null); + } + if (request.datingMaxDistanzKm() != null) user.setDatingMaxDistanzKm(Math.max(1, Math.min(500, request.datingMaxDistanzKm()))); + if (request.datingMinAlter() != null) user.setDatingMinAlter(Math.max(18, Math.min(99, request.datingMinAlter()))); + if (request.datingMaxAlter() != null) user.setDatingMaxAlter(Math.max(18, Math.min(99, request.datingMaxAlter()))); + } + userRepository.save(user); + LOGGER.info("User {} hat Dating-Einstellungen aktualisiert: aktiv={}", user.getUserId(), request.datingAktiv()); + return ResponseEntity.ok().build(); + } + + @PutMapping("/me/dating-filter") + public ResponseEntity updateDatingFilter(@RequestBody DatingFilterRequest request, Principal principal) { + var user = userService.requireUser(principal); + if (!user.isDatingAktiv()) + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + if (request.datingGeschlechter() != null) { String joined = request.datingGeschlechter().stream() .filter(g -> { try { Geschlecht.valueOf(g); return true; } catch (IllegalArgumentException e) { return false; } }) .collect(Collectors.joining(",")); user.setDatingGeschlechter(joined.isBlank() ? null : joined); - } else { - user.setDatingGeschlechter(null); } if (request.datingMaxDistanzKm() != null) user.setDatingMaxDistanzKm(Math.max(1, Math.min(500, request.datingMaxDistanzKm()))); - if (request.datingMinAlter() != null) user.setDatingMinAlter(Math.max(18, Math.min(99, request.datingMinAlter()))); - if (request.datingMaxAlter() != null) user.setDatingMaxAlter(Math.max(18, Math.min(99, request.datingMaxAlter()))); + if (request.datingMinAlter() != null) user.setDatingMinAlter(Math.max(18, Math.min(99, request.datingMinAlter()))); + if (request.datingMaxAlter() != null) user.setDatingMaxAlter(Math.max(18, Math.min(99, request.datingMaxAlter()))); userRepository.save(user); - LOGGER.info("User {} hat Dating-Einstellungen aktualisiert: aktiv={}", user.getUserId(), request.datingAktiv()); return ResponseEntity.ok().build(); } diff --git a/src/main/java/de/oaa/xxx/user/UserEntity.java b/src/main/java/de/oaa/xxx/user/UserEntity.java index 7a572c4..9f60d2b 100644 --- a/src/main/java/de/oaa/xxx/user/UserEntity.java +++ b/src/main/java/de/oaa/xxx/user/UserEntity.java @@ -1,15 +1,19 @@ package de.oaa.xxx.user; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; - import java.time.LocalDate; import java.time.Period; import java.util.Arrays; -import java.util.List; import java.util.UUID; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + @Getter @Setter @Entity diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5432f20..af966fe 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -55,6 +55,7 @@ server.port=8080 server.servlet.context-path=/ server.shutdown=graceful spring.lifecycle.timeout-per-shutdown-phase=5s +server.tomcat.max-http-header-size=65536 # Jackson – Datumsformat als ISO-8601 String statt numerischem Array spring.jackson.serialization.write-dates-as-timestamps=false diff --git a/src/main/resources/static/community/benutzer.html b/src/main/resources/static/community/benutzer.html index a421597..b347d13 100644 --- a/src/main/resources/static/community/benutzer.html +++ b/src/main/resources/static/community/benutzer.html @@ -74,22 +74,60 @@ .profil-actions { display: flex; gap: 0.5rem; - justify-content: center; - flex-wrap: wrap; + align-items: center; width: 100%; padding: 0.85rem 0; border-top: 1px solid var(--color-secondary); border-bottom: 1px solid var(--color-secondary); margin: 0.5rem 0 0.25rem; } - .profil-actions:empty { display: none; } + .profil-actions-spacer { flex: 1; } + + /* Aktionen-Dropdown */ + .aktionen-wrap { position: relative; } + .aktionen-btn { + background: none; border: 1px solid var(--color-secondary); + color: var(--color-muted); border-radius: 6px; + padding: 0.55rem 1.2rem; cursor: pointer; + display: flex; align-items: center; gap: 0.35rem; margin: 0; width: auto; + } + .aktionen-btn:hover { color: var(--color-text); } + .aktionen-menu { + display: none; position: absolute; right: 0; top: calc(100% + 6px); + background: var(--color-card); border: 1px solid var(--color-secondary); + border-radius: 8px; min-width: 190px; z-index: 200; + box-shadow: 0 6px 24px rgba(0,0,0,0.55); overflow: hidden; + } + .aktionen-menu.open { display: block; } + .aktionen-wrap .aktionen-menu button { + display: block; width: 100%; text-align: left; box-sizing: border-box; + background: none; border: none; + border-bottom: 1px solid var(--color-secondary); + color: var(--color-text); padding: 0.65rem 1rem; + font-size: 0.9rem; cursor: pointer; margin: 0; border-radius: 0; + } + .aktionen-wrap .aktionen-menu button:last-child { border-bottom: none; } + .aktionen-wrap .aktionen-menu button:hover { background: var(--color-secondary); } + .aktionen-wrap .aktionen-menu button.danger { color: #c0392b; } + .aktionen-wrap .aktionen-menu button:disabled { color: var(--color-muted); cursor: default; } + + /* Match-Name */ + .profil-name.is-match { + border: 2px solid var(--color-primary); + border-radius: 8px; padding: 0.15rem 0.75rem; + } .profil-actions button, .profil-actions a.btn { margin-top: 0; width: auto; padding: 0.55rem 1.2rem; + display: inline-flex; + align-items: center; + line-height: 1; + box-sizing: border-box; + font-size: 0.9rem; } /* ── Section labels ── */ @@ -104,6 +142,86 @@ padding-top: 1.5rem; } + /* ── Profil-Dates ── */ + #datesList { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 1rem; + } + .date-card { + background: var(--color-card); + border: 1px solid var(--color-secondary); + border-radius: 12px; + overflow: hidden; + cursor: pointer; + transition: border-color 0.15s, box-shadow 0.15s; + display: flex; + flex-direction: column; + } + .date-card:hover { border-color: var(--color-primary); box-shadow: 0 4px 18px rgba(0,0,0,0.35); } + .date-card-img { + width: 100%; aspect-ratio: 16/9; + background: var(--color-secondary); + display: flex; align-items: center; justify-content: center; + font-size: 2.5rem; color: var(--color-muted); + overflow: hidden; flex-shrink: 0; + } + .date-card-img img { width: 100%; height: 100%; object-fit: cover; } + .date-card-body { padding: 0.75rem; display: flex; flex-direction: column; gap: 0.4rem; flex: 1; } + .date-card-title { font-weight: 700; font-size: 0.95rem; line-height: 1.3; } + .date-card-desc { + font-size: 0.78rem; color: var(--color-muted); line-height: 1.4; + overflow: hidden; display: -webkit-box; + -webkit-line-clamp: 2; -webkit-box-orient: vertical; + } + .date-card-footer { + display: flex; align-items: center; gap: 0.5rem; + padding: 0.5rem 0.75rem; + border-top: 1px solid var(--color-secondary); + font-size: 0.76rem; flex-shrink: 0; + } + .date-card-meta { color: var(--color-muted); white-space: nowrap; } + .date-card-date { color: var(--color-muted); font-size: 0.73rem; } + /* ── Profil-Date-Dialog (gleiche Optik wie auf der Dates-Seite) ── */ + .date-dialog-bg { + display: none; position: fixed; inset: 0; + background: rgba(0,0,0,0.65); z-index: 500; + align-items: center; justify-content: center; padding: 1rem; + } + .date-dialog-bg.open { display: flex; } + .date-dialog { + background: var(--color-card); border-radius: 16px; + width: 100%; max-width: 520px; max-height: 92vh; + overflow-y: auto; position: relative; display: flex; flex-direction: column; + } + .date-dialog-img { + width: 100%; aspect-ratio: 16/9; background: var(--color-secondary); + display: flex; align-items: center; justify-content: center; + font-size: 3rem; color: var(--color-muted); + overflow: hidden; flex-shrink: 0; border-radius: 16px 16px 0 0; + } + .date-dialog-img img { width: 100%; height: 100%; object-fit: cover; } + .date-dialog-body { padding: 1.25rem; display: flex; flex-direction: column; gap: 0.75rem; } + .date-dialog-close { + position: absolute; top: 0.75rem; right: 0.85rem; + background: rgba(0,0,0,0.45); border: none; color: #fff; + width: 2rem; height: 2rem; border-radius: 50%; + font-size: 1rem; cursor: pointer; + display: flex; align-items: center; justify-content: center; + padding: 0; z-index: 1; + } + .date-dialog-close:hover { background: rgba(0,0,0,0.65); } + .date-dialog-title { font-size: 1.2rem; font-weight: 700; line-height: 1.3; } + .date-dialog-when { display: flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; color: var(--color-muted); } + .date-dialog-desc { + background: var(--color-secondary); border-radius: 8px; + padding: 0.85rem 1rem; font-size: 0.9rem; line-height: 1.55; white-space: pre-wrap; + } + .date-dialog-stats { font-size: 0.82rem; color: var(--color-muted); } + .date-dialog-actions { display: flex; gap: 0.6rem; flex-wrap: wrap; } + .date-interest-btn { flex: 1; min-width: 120px; } + .date-interest-btn.active { background: var(--color-primary); color: #fff; } + /* ── Gallery Carousel ── */ .gallery-strip { display: grid; @@ -183,7 +301,8 @@ align-items: center; gap: 0.3rem; cursor: pointer; - flex: 0 0 calc(20% - 0.6rem); + flex: 0 0 76px; + width: 76px; min-width: 0; } @@ -208,7 +327,7 @@ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - max-width: 64px; + width: 76px; } .friend-thumb:hover span { color: var(--color-primary); } @@ -397,7 +516,8 @@ /* ── Post / Bild Lightbox ── */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:400; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -410,7 +530,7 @@ .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } .lb-img-nav { display:flex; gap:0.75rem; align-items:center; justify-content:center; margin-top:0.75rem; flex-wrap:wrap; } .compose-action-btn { background:none; border:1px solid var(--color-secondary); color:var(--color-muted); border-radius:6px; padding:0.35rem 0.6rem; font-size:0.95rem; cursor:pointer; margin:0; width:auto; } - @media (max-width:650px) { .lb-layout { flex-direction:column; max-height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } + @media (max-width:650px) { .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } @@ -450,15 +570,23 @@
+ + + diff --git a/src/main/resources/static/community/feed.html b/src/main/resources/static/community/feed.html index 2713d1a..5ebc282 100644 --- a/src/main/resources/static/community/feed.html +++ b/src/main/resources/static/community/feed.html @@ -71,7 +71,8 @@ /* Lightbox */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:300; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -82,7 +83,7 @@ .lb-comment-compose textarea:focus { border-color:var(--color-primary); } .lb-comment-compose-actions { display:flex; gap:0.5rem; justify-content:flex-end; } .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } - @media (max-width:650px) { .lb-layout { flex-direction:column; max-height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } + @media (max-width:650px) { .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } /* Comment + Like-Stile kommen aus shared.js */ diff --git a/src/main/resources/static/community/gruppe.html b/src/main/resources/static/community/gruppe.html index 7e7fcec..f5c8c01 100644 --- a/src/main/resources/static/community/gruppe.html +++ b/src/main/resources/static/community/gruppe.html @@ -114,7 +114,8 @@ /* Post lightbox */ .lightbox { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:300; align-items:center; justify-content:center; } .lightbox.open { display:flex; } - .lb-layout { display:flex; max-width:920px; width:95vw; max-height:90vh; background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-layout { display:flex; max-width:min(1340px, calc(100vw - 2rem)); width:95vw; height:min(90vh, 1100px); background:var(--color-card); border-radius:12px; overflow:hidden; position:relative; } + .lb-post-side .post-bild { max-height:1024px; } .lb-close { position:absolute; top:0.6rem; right:0.6rem; background:rgba(0,0,0,0.55); border:none; color:#fff; font-size:1.1rem; width:2rem; height:2rem; border-radius:50%; cursor:pointer; z-index:10; display:flex; align-items:center; justify-content:center; padding:0; margin:0; } .lb-post-side { flex:1; overflow-y:auto; padding:1.25rem; border-right:1px solid var(--color-secondary); min-width:0; } .lb-comments-panel { width:300px; flex-shrink:0; display:flex; flex-direction:column; } @@ -125,7 +126,7 @@ .lb-comment-compose-actions { display:flex; gap:0.5rem; justify-content:flex-end; } .lb-comment-compose button { width:auto; margin:0; padding:0.35rem 0.75rem; font-size:0.8rem; } @media (max-width:650px) { - .lb-layout { flex-direction:column; max-height:95vh; } + .lb-layout { flex-direction:column; height:95vh; } .lb-post-side { border-right:none; border-bottom:1px solid var(--color-secondary); max-height:55vh; } .lb-comments-panel { width:100%; } } diff --git a/src/main/resources/static/dating.html b/src/main/resources/static/dating.html index 64d3eb5..ba95aa9 100644 --- a/src/main/resources/static/dating.html +++ b/src/main/resources/static/dating.html @@ -9,31 +9,17 @@ @@ -626,41 +980,58 @@
-

Dating

-
- - + + -
- -
-
- -
+
+ +
+
-
+
-
+
+ + +
+ +
+

Verfügbare Dates

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

Interessenten

+
+
Wird geladen…
+
+
+
+
+ + +
+
+ +
Date erstellen
+
+ +
+ 📷 Bild hinzufügen + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + +
+
+ +
+
+ 👤 + +
+ + +
+
+
+
+
+ + +
-
💕 Es ist ein Match!
+
💕 Match! 💕
- + Nachricht schreiben
@@ -700,12 +1187,23 @@
-
-
-
- -
- Profil ansehen +
+
+ 👤 + +
+ + +
+
+
+
+
+ + +
@@ -725,18 +1223,70 @@ let allVorlieben = []; // Default-Werte aus Einstellungen (werden beim Login-Fetch gesetzt) let defaultDistKm = 50, defaultAgeFrom = 18, defaultAgeTo = 60; + let defaultGeschlechter = []; + + // ── Profilbild-Galerie in Dialog/Popup ──────────────────────────────────── + let pdImages = [], pdImageIdx = 0; + let dpImages = [], dpImageIdx = 0; + + function renderPopupImage(prefix, images, idx) { + const photo = document.getElementById(prefix + 'Photo'); + const noPic = document.getElementById(prefix + 'NoPic'); + const prev = document.getElementById(prefix + 'NavPrev'); + const next = document.getElementById(prefix + 'NavNext'); + const dots = document.getElementById(prefix + 'PhotoDots'); + if (!images.length) { + photo.style.display = 'none'; noPic.style.display = ''; + prev.style.display = next.style.display = 'none'; + dots.innerHTML = ''; + } else { + photo.src = images[idx]; photo.style.display = ''; noPic.style.display = 'none'; + const multi = images.length > 1; + prev.style.display = next.style.display = multi ? '' : 'none'; + if (multi) { prev.disabled = idx === 0; next.disabled = idx === images.length - 1; } + dots.innerHTML = multi + ? images.map((_, i) => ``).join('') + : ''; + } + } + + window.pdNavStep = function(dir) { + pdImageIdx = Math.max(0, Math.min(pdImages.length - 1, pdImageIdx + dir)); + renderPopupImage('pd', pdImages, pdImageIdx); + }; + window.dpNavStep = function(dir) { + dpImageIdx = Math.max(0, Math.min(dpImages.length - 1, dpImageIdx + dir)); + renderPopupImage('dp', dpImages, dpImageIdx); + }; // ── Tab-Navigation ──────────────────────────────────────────────────────── + function activateTab(tabName) { + document.querySelectorAll('.dating-tab-btn').forEach(b => b.classList.remove('active')); + document.querySelectorAll('.dating-tab-panel').forEach(p => p.classList.remove('active')); + const btn = document.querySelector(`.dating-tab-btn[data-tab="${tabName}"]`); + if (btn) btn.classList.add('active'); + const panel = document.getElementById('tab-' + tabName); + if (panel) panel.classList.add('active'); + document.getElementById('filterOpenBtn').style.display = 'flex'; + const url = new URL(window.location); + url.searchParams.set('tab', tabName); + history.replaceState(null, '', url); + if (tabName === 'match' && !discoveryLoaded) { + discoveryLoaded = true; + loadDiscovery(); + } + if (tabName === 'entdecken' && !entdeckenLoaded) { + entdeckenLoaded = true; + runSearch(); + } + if (tabName === 'dates' && !datesLoaded) { + datesLoaded = true; + loadDates(); + } + } + document.querySelectorAll('.dating-tab-btn').forEach(btn => { - btn.addEventListener('click', () => { - document.querySelectorAll('.dating-tab-btn').forEach(b => b.classList.remove('active')); - document.querySelectorAll('.dating-tab-panel').forEach(p => p.classList.remove('active')); - btn.classList.add('active'); - document.getElementById('tab-' + btn.dataset.tab).classList.add('active'); - // Filter-Drawer nur auf Entdecken-Tab sinnvoll - document.getElementById('filterOpenBtn').style.display = - btn.dataset.tab === 'entdecken' ? '' : 'none'; - }); + btn.addEventListener('click', () => activateTab(btn.dataset.tab)); }); // ── Auth-Check ──────────────────────────────────────────────────────────── @@ -747,10 +1297,12 @@ if (!user) return; if (!user.datingAktiv) { window.location.href = '/konto/einstellungen.html#sec-dating'; return; } myPicture = user.profilePicture || null; + myUserId = user.userId || null; loadVorlieben(); if (user.datingGeschlechter && user.datingGeschlechter.length > 0) { + defaultGeschlechter = user.datingGeschlechter; document.querySelectorAll('#geschlechtChips .chip').forEach(chip => { - chip.classList.toggle('active', user.datingGeschlechter.includes(chip.dataset.val)); + chip.classList.toggle('active', defaultGeschlechter.includes(chip.dataset.val)); }); } // Standard-Filterwerte aus den Einstellungen übernehmen @@ -762,7 +1314,9 @@ ageFrom = defaultAgeFrom; ageTo = defaultAgeTo; updateAgeSlider(); - runSearch(); + // Tab aus URL-Parameter aktivieren, sonst Default (Match) + const urlTab = new URLSearchParams(window.location.search).get('tab'); + activateTab(urlTab || 'match'); }).catch(() => { window.location.href = '/login.html'; }); // ── IntersectionObserver für Infinite Scroll ────────────────────────────── @@ -935,7 +1489,10 @@ document.getElementById('distVal').textContent = defaultDistKm + ' km'; ageFrom = defaultAgeFrom; ageTo = defaultAgeTo; updateAgeSlider(); - document.querySelectorAll('.chip.active').forEach(c => c.classList.remove('active')); + // Geschlecht-Chips auf gespeicherte Einstellungswerte zurücksetzen + document.querySelectorAll('#geschlechtChips .chip').forEach(c => + c.classList.toggle('active', defaultGeschlechter.includes(c.dataset.val))); + document.querySelectorAll('#neigungChips .chip.active').forEach(c => c.classList.remove('active')); document.querySelectorAll('#logicToggle .logic-btn').forEach((b, i) => b.classList.toggle('active', i === 0)); vorliebenUnd = false; selectedVorlieben.clear(); @@ -947,9 +1504,40 @@ document.getElementById('applyBtn').addEventListener('click', () => { closeFilter(); updateFilterBadge(); - runSearch(); + saveFilterToDb(); + const activeTab = document.querySelector('.dating-tab-btn.active')?.dataset?.tab; + if (activeTab === 'dates') { + loadDates(); + } else if (activeTab === 'match') { + discoveryLoaded = false; + loadDiscovery(); + } else { + runSearch(); + } }); + function saveFilterToDb() { + const geschlechter = [...document.querySelectorAll('#geschlechtChips .chip.active')] + .map(c => c.dataset.val); + fetch('/user/me/dating-filter', { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + datingGeschlechter: geschlechter, + datingMaxDistanzKm: parseInt(document.getElementById('maxDist').value), + datingMinAlter: ageFrom, + datingMaxAlter: ageTo + }) + }).then(r => { + if (r.ok) { + defaultDistKm = parseInt(document.getElementById('maxDist').value); + defaultAgeFrom = ageFrom; + defaultAgeTo = ageTo; + defaultGeschlechter = geschlechter; + } + }).catch(() => {}); + } + // ── Filter-Badge ────────────────────────────────────────────────────────── function updateFilterBadge() { let count = 0; @@ -1030,8 +1618,9 @@ const card = document.createElement('div'); card.className = 'profile-card'; - const img = p.profilePicture - ? `${escHtml(p.name)}` + const picSrc = p.profilePictureHq || p.profilePicture; + const img = picSrc + ? `${escHtml(p.name)}` : `👤`; const chips = [ @@ -1135,21 +1724,16 @@ } // ── Discovery (Match-Tab) ───────────────────────────────────────────────── - let discoveryQueue = []; // Array von UUIDs + let discoveryQueue = []; let discoveryIdx = 0; - let discoveryProfile = null; // aktuell geladenes Profil - let myPicture = null; // eigenes Profilbild für Match-Overlay + let discoveryProfile = null; + let myPicture = null; let discoveryLoaded = false; + let entdeckenLoaded = false; + let discImages = []; // Bildquellen (volle data-URL) für aktuelle Karte + let discImageIdx = 0; - // Match-Tab beim Wechsel laden - document.querySelectorAll('.dating-tab-btn').forEach(btn => { - btn.addEventListener('click', () => { - if (btn.dataset.tab === 'match' && !discoveryLoaded) { - discoveryLoaded = true; - loadDiscovery(); - } - }); - }); + // (Tab-Wechsel-Logik ist oben in der Tab-Navigation) async function loadDiscovery() { document.getElementById('discoveryLoading').style.display = ''; @@ -1171,24 +1755,38 @@ if (discoveryIdx >= discoveryQueue.length) { document.getElementById('discoveryCard').style.display = 'none'; document.getElementById('discoveryActions').style.display = 'none'; - document.getElementById('discoveryCounter').textContent = ''; document.getElementById('discoveryEmpty').style.display = ''; return; } const userId = discoveryQueue[discoveryIdx]; try { - const res = await fetch('/social/users/' + userId); - if (!res.ok) { discoveryIdx++; showDiscoveryCard(); return; } - discoveryProfile = await res.json(); + const [profRes, galleryRes] = await Promise.all([ + fetch('/dating/profiles/batch', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify([userId]) + }), + fetch('/social/profile-images?userId=' + userId) + ]); + if (!profRes.ok) { discoveryIdx++; showDiscoveryCard(); return; } + const profiles = await profRes.json(); + if (!profiles || !profiles.length) { discoveryIdx++; showDiscoveryCard(); return; } + discoveryProfile = profiles[0]; + + // Bildersammlung aufbauen: Profilfoto + Galerie + discImages = []; + const pic = discoveryProfile.profilePictureHq || discoveryProfile.profilePicture; + if (pic) discImages.push('data:image/png;base64,' + pic); + if (galleryRes.ok) { + const gallery = await galleryRes.json(); + gallery.forEach(img => { + if (img.imageData) discImages.push('data:image/jpeg;base64,' + img.imageData); + }); + } + discImageIdx = 0; } catch { discoveryIdx++; showDiscoveryCard(); return; } - // Bild - const imgEl = document.getElementById('discCardImg'); - const pic = discoveryProfile.profilePicture; - imgEl.innerHTML = pic - ? `
` - : `👤
`; - + // Texte setzen document.getElementById('discCardName').textContent = discoveryProfile.name || ''; const meta = []; if (discoveryProfile.alter) meta.push(discoveryProfile.alter + ' J.'); @@ -1197,19 +1795,56 @@ document.getElementById('discCardMeta').textContent = meta.join(' · '); const descEl = document.getElementById('discCardDesc'); - if (discoveryProfile.beschreibung) { - descEl.textContent = discoveryProfile.beschreibung; - descEl.style.display = ''; + if (discoveryProfile.beschreibung) { descEl.textContent = discoveryProfile.beschreibung; descEl.style.display = ''; } + else { descEl.style.display = 'none'; } + + // Matching Vorlieben + const chipsEl = document.getElementById('discMatchChips'); + const matchIds = discoveryProfile.matchingVorliebenIds || []; + if (matchIds.length > 0 && allVorlieben.length > 0) { + const nameMap = new Map(allVorlieben.map(v => [v.itemId, v.name])); + chipsEl.innerHTML = matchIds.filter(id => nameMap.has(id)) + .map(id => `${escHtml(nameMap.get(id))}`).join(''); } else { - descEl.style.display = 'none'; + chipsEl.innerHTML = ''; } + renderDiscImage(); document.getElementById('discoveryCard').style.display = ''; document.getElementById('discoveryActions').style.display = ''; - document.getElementById('discoveryCounter').textContent = - (discoveryIdx + 1) + ' / ' + discoveryQueue.length; } + function renderDiscImage() { + const src = discImages[discImageIdx] || null; + const photoEl = document.getElementById('discCardPhoto'); + const noPicEl = document.getElementById('discNoPic'); + if (src) { + photoEl.src = src; + photoEl.style.display = ''; + noPicEl.style.display = 'none'; + } else { + photoEl.style.display = 'none'; + noPicEl.style.display = ''; + } + const hasMany = discImages.length > 1; + document.getElementById('discNavPrev').style.display = hasMany && discImageIdx > 0 ? '' : 'none'; + document.getElementById('discNavNext').style.display = hasMany && discImageIdx < discImages.length - 1 ? '' : 'none'; + // Dots + const dotsEl = document.getElementById('discImgDots'); + if (hasMany) { + dotsEl.innerHTML = discImages.map((_, i) => + ``).join(''); + } else { + dotsEl.innerHTML = ''; + } + } + + window.discNavStep = function(dir, e) { + e.stopPropagation(); + discImageIdx = Math.max(0, Math.min(discImages.length - 1, discImageIdx + dir)); + renderDiscImage(); + }; + window.discardProfile = async function () { if (!discoveryProfile) return; fetch('/dating/pass/' + discoveryProfile.userId, { method: 'POST' }).catch(() => {}); @@ -1232,15 +1867,17 @@ } catch { /* ignore */ } }; - window.openDiscoveryPopup = function () { + window.openDiscoveryPopup = async function () { if (!discoveryProfile) return; const p = discoveryProfile; - const pic = p.profilePictureHq || p.profilePicture; - const avatarEl = document.getElementById('dpAvatar'); - avatarEl.innerHTML = pic ? `` : '👤'; - document.getElementById('dpName').textContent = p.name || ''; - document.getElementById('dpProfileLink').href = '/community/benutzer.html?userId=' + p.userId; + // Bilder aus der Match-Karte übernehmen + dpImages = [...discImages]; dpImageIdx = discImageIdx; + renderPopupImage('dp', dpImages, dpImageIdx); + + document.getElementById('dpName').textContent = p.name || ''; + document.getElementById('dpProfileLink').href = '/community/benutzer.html?userId=' + p.userId; + document.getElementById('dpVorlieben').innerHTML = ''; const tags = document.getElementById('dpTags'); tags.innerHTML = ''; @@ -1255,6 +1892,14 @@ else { descEl.style.display = 'none'; } document.getElementById('discoveryPopupBg').classList.add('open'); + + try { + const vlRes = await fetch('/dating/vorlieben/' + p.userId); + if (vlRes.ok) { + const chips = await vlRes.json(); + renderVorliebenChips(document.getElementById('dpVorlieben'), chips); + } + } catch {} }; window.closeDiscoveryPopup = function (e) { @@ -1284,6 +1929,490 @@ window._onSseMatch = function (data) { showMatchOverlay(data.partnerId, data.partnerName, data.partnerPicture || null); }; + + // ── Dates-Tab ───────────────────────────────────────────────────────────── + let datesLoaded = false; + let currentDate = null; // aktuell geöffnetes Date (Detail- oder Eigenes-Dialog) + let editingDateId = null; // UUID wenn Bearbeitung, null wenn Neu-Erstellen + let formImgData = null; // base64 des gewählten Formular-Bildes + let myUserId = null; // eigene User-ID (wird beim Login-Fetch gesetzt) + + document.getElementById('createDateBtn').addEventListener('click', () => openCreateDate()); + + async function loadDates() { + document.getElementById('datesCount').textContent = ''; + document.getElementById('myDatesSection').style.display = 'none'; + document.getElementById('myDatesGrid').innerHTML = ''; + document.getElementById('availableDatesGrid').innerHTML = + '
Wird geladen…
'; + + try { + const res = await fetch('/dating/dates?' + buildParams()); + if (res.status === 403) return; + if (!res.ok) throw new Error(); + const data = await res.json(); + + renderMyDates(data.mine || []); + renderAvailableDates(data.available || []); + + const total = (data.available || []).length; + document.getElementById('datesCount').textContent = + total === 0 ? 'Keine Dates gefunden' : total + ' Date' + (total === 1 ? '' : 's') + ' gefunden'; + } catch { + document.getElementById('availableDatesGrid').innerHTML = + '
Fehler beim Laden.
'; + } + } + + function renderMyDates(dates) { + const section = document.getElementById('myDatesSection'); + const grid = document.getElementById('myDatesGrid'); + if (dates.length === 0) { section.style.display = 'none'; return; } + section.style.display = ''; + grid.innerHTML = ''; + dates.forEach(d => grid.appendChild(buildDateCard(d, true))); + } + + function renderAvailableDates(dates) { + const grid = document.getElementById('availableDatesGrid'); + grid.innerHTML = ''; + if (dates.length === 0) { + grid.innerHTML = '
Keine Dates in deinem Umkreis gefunden.
'; + return; + } + dates.forEach(d => grid.appendChild(buildDateCard(d, false))); + } + + function buildDateCard(d, isMine) { + const card = document.createElement('div'); + card.className = 'date-card'; + + const imgHtml = d.imageData + ? `` + : '📅'; + + const footerRight = isMine + ? `♥ ${d.interestCount}` + : (d.myInterest + ? `♥ Interesse` + : `♥ ${d.interestCount}`); + + const avatarHtml = d.creatorProfilePicture + ? `` + : '👤'; + + const dateHint = d.scheduledAt + ? `${formatDateTime(d.scheduledAt)}` : ''; + + card.innerHTML = ` +
${imgHtml}
+
+
${escHtml(d.title)}
+
${escHtml(d.description)}
+ ${dateHint ? '
' + escHtml(formatDateTime(d.scheduledAt)) + '
' : ''} +
+ `; + + card.addEventListener('click', () => { + if (isMine) openMyDateDialog(d); + else openDateDialog(d); + }); + + return card; + } + + // ── Detail-Dialog (fremdes Date) ────────────────────────────────────────── + function openDateDialog(d) { + currentDate = d; + + const imgEl = document.getElementById('ddImg'); + imgEl.innerHTML = d.imageData ? `` : '📅'; + + document.getElementById('ddTitle').textContent = d.title; + + const avatarEl = document.getElementById('ddCreatorAvatar'); + avatarEl.innerHTML = d.creatorProfilePicture + ? `` : '👤'; + document.getElementById('ddCreatorName').textContent = d.creatorName || ''; + document.getElementById('ddCreator').onclick = + () => window.open('/community/benutzer.html?userId=' + d.creatorId, '_blank'); + + const whenEl = document.getElementById('ddWhen'); + if (d.scheduledAt) { + document.getElementById('ddWhenText').textContent = formatDateTime(d.scheduledAt); + whenEl.style.display = 'flex'; + } else { + whenEl.style.display = 'none'; + } + + document.getElementById('ddDesc').textContent = d.description; + document.getElementById('ddStats').textContent = + d.interestCount + ' Person' + (d.interestCount === 1 ? '' : 'en') + ' interessiert'; + + const actionsEl = document.getElementById('ddActions'); + const interested = d.myInterest; + actionsEl.innerHTML = ` + `; + + document.getElementById('dateBg').classList.add('open'); + } + + window.closeDateDialog = function(e) { + if (e && e.target !== document.getElementById('dateBg')) return; + document.getElementById('dateBg').classList.remove('open'); + currentDate = null; + }; + window.closeDateDialogBtn = function() { + document.getElementById('dateBg').classList.remove('open'); + currentDate = null; + }; + + window.toggleInterest = async function() { + if (!currentDate) return; + const btn = document.getElementById('ddInterestBtn'); + btn.disabled = true; + try { + const res = await fetch('/dating/dates/' + currentDate.dateId + '/interest', { method: 'POST' }); + if (!res.ok) return; + const data = await res.json(); + currentDate = { ...currentDate, myInterest: data.myInterest, interestCount: data.interestCount }; + btn.className = 'btn date-interest-btn' + (data.myInterest ? ' active' : ''); + btn.textContent = data.myInterest ? '♥ Interesse bekundet' : '♥ Interesse bekunden'; + document.getElementById('ddStats').textContent = + data.interestCount + ' Person' + (data.interestCount === 1 ? '' : 'en') + ' interessiert'; + // Karte aktualisieren + datesLoaded = false; + } finally { + btn.disabled = false; + } + }; + + // ── Eigenes-Date-Dialog ─────────────────────────────────────────────────── + function openMyDateDialog(d) { + currentDate = d; + + const imgEl = document.getElementById('mdImg'); + imgEl.innerHTML = d.imageData ? `` : '📅'; + + document.getElementById('mdTitle').textContent = d.title; + + const whenEl = document.getElementById('mdWhen'); + if (d.scheduledAt) { + document.getElementById('mdWhenText').textContent = formatDateTime(d.scheduledAt); + whenEl.style.display = 'flex'; + } else { + whenEl.style.display = 'none'; + } + document.getElementById('mdDesc').textContent = d.description; + + // Interessenten laden + loadInterests(d.dateId); + + document.getElementById('myDateBg').classList.add('open'); + } + + async function loadInterests(dateId) { + const list = document.getElementById('mdInterestList'); + list.innerHTML = '
Wird geladen…
'; + try { + const res = await fetch('/dating/dates/' + dateId + '/interests'); + if (!res.ok) throw new Error(); + const interests = await res.json(); + if (interests.length === 0) { + list.innerHTML = '
Noch keine Interessenten.
'; + return; + } + list.innerHTML = ''; + interests.forEach(i => { + const item = document.createElement('div'); + item.className = 'interest-item'; + const avatarHtml = i.profilePicture + ? `` : '👤'; + const actionHtml = i.blocked + ? `blockiert` + : ``; + item.innerHTML = ` +
${avatarHtml}
+ ${escHtml(i.name || 'Unbekannt')} + ${actionHtml}`; + list.appendChild(item); + }); + } catch { + list.innerHTML = '
Fehler beim Laden.
'; + } + } + + window.closeMyDateDialog = function(e) { + if (e && e.target !== document.getElementById('myDateBg')) return; + document.getElementById('myDateBg').classList.remove('open'); + currentDate = null; + }; + window.closeMyDateDialogBtn = function() { + document.getElementById('myDateBg').classList.remove('open'); + currentDate = null; + }; + + window.deleteMyDate = async function() { + if (!currentDate) return; + if (!confirm('Date wirklich löschen?')) return; + try { + const res = await fetch('/dating/dates/' + currentDate.dateId, { method: 'DELETE' }); + if (!res.ok) return; + closeMyDateDialogBtn(); + datesLoaded = false; + loadDates(); + } catch {} + }; + + window.openDm = function(userId) { + window.location.href = '/community/nachrichten.html?userId=' + userId; + }; + + // ── Erstellen/Bearbeiten-Dialog ─────────────────────────────────────────── + function openCreateDate() { + editingDateId = null; + formImgData = null; + document.getElementById('dateFormTitle').textContent = 'Date erstellen'; + document.getElementById('dfTitle').value = ''; + document.getElementById('dfDesc').value = ''; + document.getElementById('dfDateTime').value = ''; + resetFormImg(); + document.getElementById('dfLimitHint').textContent = ''; + document.getElementById('dateFormBg').classList.add('open'); + } + + window.openEditDate = function() { + if (!currentDate) return; + editingDateId = currentDate.dateId; + formImgData = currentDate.imageData || null; + document.getElementById('dateFormTitle').textContent = 'Date bearbeiten'; + document.getElementById('dfTitle').value = currentDate.title || ''; + document.getElementById('dfDesc').value = currentDate.description || ''; + document.getElementById('dfDateTime').value = currentDate.scheduledAt + ? currentDate.scheduledAt.substring(0, 16) : ''; + + const preview = document.getElementById('dfImgPreview'); + const removeBtn = document.getElementById('dfImgRemove'); + const placeholder = document.getElementById('dfImgPlaceholder'); + if (formImgData) { + preview.style.backgroundImage = ''; + let imgTag = preview.querySelector('img'); + if (!imgTag) { imgTag = document.createElement('img'); preview.appendChild(imgTag); } + imgTag.src = formImgData; + placeholder.style.display = 'none'; + removeBtn.classList.add('visible'); + } else { + resetFormImg(); + } + + document.getElementById('myDateBg').classList.remove('open'); + document.getElementById('dateFormBg').classList.add('open'); + }; + + window.closeDateForm = function(e) { + if (e && e.target !== document.getElementById('dateFormBg')) return; + document.getElementById('dateFormBg').classList.remove('open'); + }; + window.closeDateFormBtn = function() { + document.getElementById('dateFormBg').classList.remove('open'); + }; + + window.triggerImgPick = function() { + document.getElementById('dfImgInput').click(); + }; + + window.onImgSelected = function(event) { + const file = event.target.files[0]; + if (!file) return; + const reader = new FileReader(); + reader.onload = e => { + formImgData = e.target.result; + const preview = document.getElementById('dfImgPreview'); + let imgTag = preview.querySelector('img'); + if (!imgTag) { imgTag = document.createElement('img'); preview.appendChild(imgTag); } + imgTag.src = formImgData; + document.getElementById('dfImgPlaceholder').style.display = 'none'; + document.getElementById('dfImgRemove').classList.add('visible'); + }; + reader.readAsDataURL(file); + event.target.value = ''; + }; + + window.removeFormImg = function(e) { + e.stopPropagation(); + formImgData = null; + resetFormImg(); + }; + + function resetFormImg() { + const preview = document.getElementById('dfImgPreview'); + const imgTag = preview.querySelector('img'); + if (imgTag) imgTag.remove(); + document.getElementById('dfImgPlaceholder').style.display = ''; + document.getElementById('dfImgRemove').classList.remove('visible'); + } + + window.saveDate = async function() { + const title = document.getElementById('dfTitle').value.trim(); + const desc = document.getElementById('dfDesc').value.trim(); + const dtVal = document.getElementById('dfDateTime').value; + const saveBtn = document.getElementById('dfSaveBtn'); + const hintEl = document.getElementById('dfLimitHint'); + + if (!title) { hintEl.textContent = 'Bitte Titel eingeben.'; return; } + if (!desc) { hintEl.textContent = 'Bitte Beschreibung eingeben.'; return; } + + hintEl.textContent = ''; + saveBtn.disabled = true; + + const body = { + title, + description: desc, + imageData: formImgData || null, + scheduledAt: dtVal ? dtVal + ':00' : null + }; + + try { + const url = editingDateId ? '/dating/dates/' + editingDateId : '/dating/dates'; + const method = editingDateId ? 'PUT' : 'POST'; + const res = await fetch(url, { + method, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body) + }); + if (res.status === 422) { + const data = await res.json().catch(() => ({})); + hintEl.textContent = data.message || 'Limit erreicht.'; + return; + } + if (!res.ok) { hintEl.textContent = 'Fehler beim Speichern.'; return; } + closeDateFormBtn(); + datesLoaded = false; + loadDates(); + } catch { + hintEl.textContent = 'Fehler beim Speichern.'; + } finally { + saveBtn.disabled = false; + } + }; + + // ── Profil-Mini-Dialog ──────────────────────────────────────────────────── + let profileDialogCreatorId = null; + + window.openProfileDialog = function() { + if (!currentDate) return; + loadAndOpenProfile(currentDate.creatorId, currentDate.creatorName, currentDate.creatorProfilePicture); + }; + + function renderVorliebenChips(container, chips) { + container.innerHTML = chips.map(c => + `${escHtml(c.name)}` + ).join(''); + } + + window.loadAndOpenProfile = async function(userId, name, picture) { + profileDialogCreatorId = userId; + + pdImages = []; pdImageIdx = 0; + renderPopupImage('pd', pdImages, pdImageIdx); + document.getElementById('pdName').textContent = name || ''; + document.getElementById('pdProfileLink').href = '/community/benutzer.html?userId=' + userId; + document.getElementById('pdTags').innerHTML = ''; + document.getElementById('pdVorlieben').innerHTML = ''; + document.getElementById('pdDesc').style.display = 'none'; + document.getElementById('profileDialogBg').classList.add('open'); + + // Weitere Details nachladen + try { + const [profRes, vlRes, galleryRes] = await Promise.all([ + fetch('/social/users/' + userId), + fetch('/dating/vorlieben/' + userId), + fetch('/social/profile-images?userId=' + userId) + ]); + if (profRes.ok) { + const p = await profRes.json(); + const tags = document.getElementById('pdTags'); + const addTag = v => { + if (!v) return; + const s = document.createElement('span'); + s.className = 'dp-tag'; + s.textContent = v; + tags.appendChild(s); + }; + if (p.alter) addTag(p.alter + ' J.'); + if (p.geschlecht) addTag({ WEIBLICH:'weiblich', MAENNLICH:'männlich', DIVERS:'divers' }[p.geschlecht] || p.geschlecht); + if (p.neigung) addTag({ DEVOT:'devot', EHER_DEVOT:'eher devot', SWITCHER:'Switcher', EHER_DOMINANT:'eher dominant', DOMINANT:'dominant' }[p.neigung] || p.neigung); + if (p.beziehungsstatus) addTag({ SINGLE:'single', IN_EINER_BEZIEHUNG:'in einer Beziehung', VERHEIRATET:'verheiratet', IN_EINER_OFFENEN_BEZIEHUNG:'offene Beziehung', IN_EINER_OFFENEN_EHE:'offene Ehe' }[p.beziehungsstatus] || p.beziehungsstatus); + const descEl = document.getElementById('pdDesc'); + if (p.beschreibung) { descEl.textContent = p.beschreibung; descEl.style.display = ''; } + const hqPic = p.profilePictureHq || p.profilePicture; + if (hqPic) pdImages.push('data:image/png;base64,' + hqPic); + } + if (galleryRes.ok) { + const gallery = await galleryRes.json(); + gallery.forEach(img => { if (img.imageData) pdImages.push('data:image/jpeg;base64,' + img.imageData); }); + } + renderPopupImage('pd', pdImages, pdImageIdx); + if (vlRes.ok) { + const chips = await vlRes.json(); + renderVorliebenChips(document.getElementById('pdVorlieben'), chips); + } + } catch {} + }; + + window.closeProfileDialog = function(e) { + if (e && e.target !== document.getElementById('profileDialogBg')) return; + document.getElementById('profileDialogBg').classList.remove('open'); + profileDialogCreatorId = null; + }; + window.closeProfileDialogBtn = function() { + document.getElementById('profileDialogBg').classList.remove('open'); + profileDialogCreatorId = null; + }; + + // ── Tastatur-Steuerung ──────────────────────────────────────────────────── + document.addEventListener('keydown', e => { + if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { + const dir = e.key === 'ArrowLeft' ? -1 : 1; + if (document.getElementById('profileDialogBg').classList.contains('open')) { + pdNavStep(dir); return; + } + if (document.getElementById('discoveryPopupBg').classList.contains('open')) { + dpNavStep(dir); return; + } + // Pfeiltasten: Bilder-Navigation in der Match-Karte + if (document.getElementById('discoveryCard').style.display !== 'none' && + !document.getElementById('filterDrawer').classList.contains('open')) { + discNavStep(dir, { stopPropagation: () => {} }); + return; + } + } + // Escape schließt Dialoge (höchster z-index zuerst) + if (e.key !== 'Escape') return; + if (document.getElementById('profileDialogBg').classList.contains('open')) { closeProfileDialogBtn(); return; } + if (document.getElementById('matchOverlay').classList.contains('open')) { closeMatchOverlay(); return; } + if (document.getElementById('dateFormBg').classList.contains('open')) { closeDateFormBtn(); return; } + if (document.getElementById('dateBg').classList.contains('open')) { closeDateDialogBtn(); return; } + if (document.getElementById('myDateBg').classList.contains('open')) { closeMyDateDialogBtn(); return; } + if (document.getElementById('discoveryPopupBg').classList.contains('open')) { closeDiscoveryPopup(null); return; } + if (document.getElementById('filterDrawer').classList.contains('open')) { closeFilter(); return; } + }); + + // ── Datum formatieren ───────────────────────────────────────────────────── + function formatDateTime(isoStr) { + if (!isoStr) return ''; + try { + const d = new Date(isoStr); + return d.toLocaleString('de-DE', { day:'2-digit', month:'2-digit', year:'numeric', hour:'2-digit', minute:'2-digit' }); + } catch { return isoStr; } + } })(); diff --git a/src/main/resources/static/js/image-viewer.js b/src/main/resources/static/js/image-viewer.js index 148a4d0..c9226ac 100644 --- a/src/main/resources/static/js/image-viewer.js +++ b/src/main/resources/static/js/image-viewer.js @@ -147,8 +147,8 @@ class ImageViewer { s.textContent = ` #imageViewer{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.88);z-index:500;align-items:center;justify-content:center;padding:2rem} #imageViewer.open{display:flex} -#ivLayout{display:flex;flex-direction:row;gap:1rem;height:min(78vh,660px);max-width:calc(100vw - 4rem);align-items:stretch} -#ivImageSide{width:660px;flex-shrink:1;min-width:0;display:flex;flex-direction:column} +#ivLayout{display:flex;flex-direction:row;gap:1rem;height:min(90vh,1024px);max-width:min(1340px,calc(100vw - 4rem));align-items:stretch} +#ivImageSide{width:1024px;flex-shrink:1;min-width:0;display:flex;flex-direction:column} .iv-image-box{flex:1;position:relative;background:var(--color-card);border:1px solid var(--color-secondary);border-radius:12px;overflow:hidden;display:flex;align-items:center;justify-content:center} #ivImg{width:100%;height:100%;object-fit:contain;display:block} .iv-overlay{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,0.6));border-radius:0 0 12px 12px;padding:2rem 0.75rem 0.6rem;display:flex;align-items:center;justify-content:space-between;gap:0.5rem} diff --git a/src/main/resources/static/konto/einstellungen.html b/src/main/resources/static/konto/einstellungen.html index e4b9d6a..7ee3bc1 100644 --- a/src/main/resources/static/konto/einstellungen.html +++ b/src/main/resources/static/konto/einstellungen.html @@ -806,6 +806,20 @@
+ + +