Houmgaor
daacb76fb8
refactor(achievement): extract achievement logic into AchievementService
...
Move EnsureExists + GetAllScores + compute loop from handler into
AchievementService.GetAll, and validation + ensure + increment into
AchievementService.Increment. Handlers now delegate to the service
layer for business logic while retaining protocol response building.
GetAchData stays as a pure function in handlers_achievement.go per plan.
2026-02-23 23:43:39 +01:00
..
2026-02-23 21:28:30 +01:00
2026-02-22 15:47:21 +01:00
2026-02-22 15:47:21 +01:00
2026-02-22 15:47:21 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 18:09:08 +01:00
2026-02-23 23:43:39 +01:00
2026-02-23 23:43:39 +01:00
2026-02-21 14:01:52 +01:00
2026-02-21 14:16:58 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 14:47:25 +01:00
2026-02-21 14:08:01 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 15:47:21 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 17:04:58 +01:00
2026-02-22 16:16:44 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 16:16:44 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 18:24:54 +01:00
2026-02-23 17:01:20 +01:00
2026-02-23 18:24:54 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 17:01:22 +01:00
2026-02-22 18:55:31 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 14:16:58 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 17:37:29 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 14:01:52 +01:00
2026-02-21 18:10:19 +01:00
2026-02-21 18:10:19 +01:00
2026-02-21 17:58:08 +01:00
2026-02-21 17:37:29 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 18:10:19 +01:00
2026-02-22 17:01:22 +01:00
2026-02-23 23:35:28 +01:00
2026-02-23 23:35:28 +01:00
2026-02-23 23:35:28 +01:00
2026-02-23 23:35:28 +01:00
2026-02-22 16:46:57 +01:00
2026-02-21 18:10:19 +01:00
2026-02-22 16:46:57 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 17:37:29 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 17:37:29 +01:00
2026-02-22 18:55:31 +01:00
2026-02-21 14:01:52 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 17:37:29 +01:00
2026-02-21 14:16:58 +01:00
2026-02-22 16:05:25 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 16:32:43 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 17:37:29 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 18:55:31 +01:00
2026-02-21 14:16:58 +01:00
2026-02-22 18:55:31 +01:00
2026-02-22 16:16:44 +01:00
2026-02-23 19:34:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 14:16:58 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 17:04:58 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 13:56:46 +01:00
2026-02-22 17:01:22 +01:00
2026-02-21 13:56:46 +01:00
2026-02-21 14:16:58 +01:00
2026-02-21 14:21:32 +01:00
2026-02-21 14:08:01 +01:00
2026-02-21 14:47:25 +01:00
2026-02-21 14:16:58 +01:00
2026-02-21 14:56:59 +01:00
2026-02-22 16:55:59 +01:00
2026-02-22 16:55:59 +01:00
2026-02-21 14:47:25 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:55:59 +01:00
2026-02-21 14:56:59 +01:00
2026-02-22 16:55:59 +01:00
2026-02-21 14:47:25 +01:00
2026-02-22 16:46:57 +01:00
2026-02-21 14:56:59 +01:00
2026-02-21 14:47:25 +01:00
2026-02-21 14:47:25 +01:00
2026-02-23 21:28:30 +01:00
2026-02-21 14:16:58 +01:00
2026-02-21 14:47:25 +01:00
2026-02-21 14:16:58 +01:00
2026-02-22 16:46:57 +01:00
2026-02-21 14:47:25 +01:00
2026-02-21 14:21:32 +01:00
2026-02-21 14:08:01 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 23:43:39 +01:00
2026-02-23 23:43:39 +01:00
2026-02-23 23:35:28 +01:00
2026-02-23 23:35:28 +01:00
2026-02-23 19:34:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 23:43:39 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 19:34:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-22 15:47:21 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 23:43:39 +01:00
2026-02-23 21:25:44 +01:00
2026-02-21 13:56:46 +01:00