Skip to content

Commit 0c871e5

Browse files
authored
Merge pull request #122 from eurofurence/cea-db-update
Updating DB to use Eventuser instead of User x Event as unique key
2 parents d62cd63 + baf0482 commit 0c871e5

13 files changed

Lines changed: 284 additions & 258 deletions

File tree

app/Domain/CatchEmAll/Achievements/Utils/AchievementFactory.php

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,38 @@
44

55
use App\Domain\CatchEmAll\Interface\Achievement;
66
use App\Domain\CatchEmAll\Models\UserAchievement;
7+
use App\Models\EventUser;
78
use App\Models\User;
89

910
class AchievementFactory
1011
{
1112
/**
1213
* Create a new user achievement instance.
13-
*
14-
* @param User $user
15-
* @param string $achievementId
16-
* @return UserAchievement
1714
*/
18-
public static function createUserAchievement(User $user, Achievement $achievement): UserAchievement
15+
public static function createUserAchievement(EventUser $eventUser, Achievement $achievement): UserAchievement
1916
{
2017
return UserAchievement::firstOrCreate([
21-
'user_id' => $user->id,
18+
'event_user_id' => $eventUser->id,
2219
'achievement' => $achievement->getId(),
2320
'progress' => 0,
2421
]);
2522
}
2623

2724
/**
2825
* Update the progress of a user achievement.
29-
*
30-
* @param User $user
31-
* @param Achievement $achievement
32-
* @param int $newProgress
33-
* @return UserAchievement
3426
*/
35-
public static function updateUserAchievementProgress(User $user, Achievement $achievement, int $newProgress): UserAchievement
27+
public static function updateUserAchievementProgress(EventUser $eventUser, Achievement $achievement, int $newProgress): UserAchievement
3628
{
3729
$existing = UserAchievement::firstOrCreate([
38-
'user_id' => $user->id,
30+
'event_user_id' => $eventUser->id,
3931
'achievement' => $achievement->getId(),
4032
], [
4133
'progress' => 0,
4234
]);
4335

4436
$existing->progress = min($newProgress, $achievement->getMaxProgress());
4537

46-
if ($existing->progress >= $achievement->getMaxProgress() && !$existing->earned_at) {
38+
if ($existing->progress >= $achievement->getMaxProgress() && ! $existing->earned_at) {
4739
$existing->earned_at = now();
4840
}
4941

@@ -54,15 +46,11 @@ public static function updateUserAchievementProgress(User $user, Achievement $ac
5446

5547
/**
5648
* Grant an achievement to a user.
57-
*
58-
* @param User $user
59-
* @param Achievement $achievement
60-
* @return UserAchievement
6149
*/
62-
public static function grantUserAchievement(User $user, Achievement $achievement): UserAchievement
50+
public static function grantUserAchievement(EventUser $eventUser, Achievement $achievement): UserAchievement
6351
{
6452
$userAchievement = UserAchievement::firstOrCreate([
65-
'user_id' => $user->id,
53+
'event_user_id' => $eventUser->id,
6654
'achievement' => $achievement->getId(),
6755
'progress' => $achievement->getMaxProgress(),
6856
]);
@@ -76,14 +64,11 @@ public static function grantUserAchievement(User $user, Achievement $achievement
7664
/**
7765
* Get all achievement data for a user with progress and completion status.
7866
* Filters out hidden achievements and secret achievements that haven't been earned yet.
79-
*
80-
* @param User $user
81-
* @return array
8267
*/
83-
public static function getUserAchievementData(User $user): array
68+
public static function getUserAchievementData(EventUser $eventUser): array
8469
{
8570
// Get all user achievements with their progress
86-
$userAchievements = UserAchievement::where('user_id', $user->id)->get();
71+
$userAchievements = UserAchievement::where('event_user_id', $eventUser->id)->get();
8772

8873
// Get all registered achievements
8974
$allAchievements = AchievementRegister::getAllAchievementInstances();
@@ -106,7 +91,7 @@ public static function getUserAchievementData(User $user): array
10691
$isCompleted = $userAchievement && $userAchievement->isCompleted();
10792

10893
// Filter out secret achievements that haven't been earned yet
109-
if ($achievement->isSecret() && !$isCompleted) {
94+
if ($achievement->isSecret() && ! $isCompleted) {
11095
continue; // Skip this achievement instead of throwing an exception
11196
}
11297

0 commit comments

Comments
 (0)