fix(analytics): flush achievement deletes before rebuild inserts
Avoid unique-constraint violations during achievement rebuilds by forcing the old rows to be deleted in the database before inserting rebuilt achievements. Signed-off-by: Marcus Fihlon <marcus@fihlon.swiss>
This commit is contained in:
parent
251beaae0f
commit
f0e065600e
2 changed files with 3 additions and 0 deletions
|
|
@ -109,10 +109,12 @@ public class AchievementService {
|
|||
List<Activity> activityHistory = activityRepository.findByUserIdOrderByStartedAtAsc(userId);
|
||||
if (activityHistory.isEmpty()) {
|
||||
achievementRepository.deleteByUserId(userId);
|
||||
achievementRepository.flush();
|
||||
return List.of();
|
||||
}
|
||||
|
||||
achievementRepository.deleteByUserId(userId);
|
||||
achievementRepository.flush();
|
||||
|
||||
Set<Achievement.AchievementType> existing = EnumSet.noneOf(Achievement.AchievementType.class);
|
||||
List<Achievement> rebuiltAchievements = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -411,6 +411,7 @@ class AchievementServiceTest {
|
|||
|
||||
InOrder inOrder = inOrder(achievementRepository);
|
||||
inOrder.verify(achievementRepository).deleteByUserId(userId);
|
||||
inOrder.verify(achievementRepository).flush();
|
||||
inOrder.verify(achievementRepository, atLeastOnce()).save(any(Achievement.class));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue