Skip to content

Commit

Permalink
Finish achievement tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
neketka committed Apr 29, 2024
1 parent 92680c3 commit 071bb8c
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 21 deletions.
24 changes: 12 additions & 12 deletions game/lib/api/game_client_dto.dart
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ class AchievementTrackerDto {
class UpdateAchievementTrackerDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['tracker'] = tracker!.toJson();
fields['tracker'] = tracker.toJson();
return fields;
}

Expand All @@ -230,7 +230,7 @@ class UpdateAchievementTrackerDataDto {
class UpdateAchievementDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['achievement'] = achievement!.toJson();
fields['achievement'] = achievement.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down Expand Up @@ -305,7 +305,7 @@ class LoginDto {
if (aud != null) {
fields['aud'] = aud!.name;
}
fields['enrollmentType'] = enrollmentType!.name;
fields['enrollmentType'] = enrollmentType.name;
return fields;
}

Expand Down Expand Up @@ -530,7 +530,7 @@ class RequestChallengeDataDto {
class UpdateChallengeDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['challenge'] = challenge!.toJson();
fields['challenge'] = challenge.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down Expand Up @@ -761,7 +761,7 @@ class UpdateLeaderDataDto {
fields['eventId'] = eventId;
}
fields['offset'] = offset;
fields['users'] = users!
fields['users'] = users
.map<Map<String, dynamic>>((dynamic val) => val!.toJson())
.toList();
return fields;
Expand Down Expand Up @@ -1041,7 +1041,7 @@ class EventTrackerDto {
if (curChallengeId != null) {
fields['curChallengeId'] = curChallengeId;
}
fields['prevChallenges'] = prevChallenges!
fields['prevChallenges'] = prevChallenges
.map<Map<String, dynamic>>((dynamic val) => val!.toJson())
.toList();
return fields;
Expand Down Expand Up @@ -1086,7 +1086,7 @@ class EventTrackerDto {
class UpdateEventTrackerDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['tracker'] = tracker!.toJson();
fields['tracker'] = tracker.toJson();
return fields;
}

Expand All @@ -1108,7 +1108,7 @@ class UpdateEventTrackerDataDto {
class UpdateEventDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['event'] = event!.toJson();
fields['event'] = event.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down Expand Up @@ -1313,7 +1313,7 @@ class GroupDto {
class UpdateGroupDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['group'] = group!.toJson();
fields['group'] = group.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down Expand Up @@ -1484,7 +1484,7 @@ class RequestOrganizationDataDto {
class UpdateOrganizationDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['organization'] = organization!.toJson();
fields['organization'] = organization.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down Expand Up @@ -1551,7 +1551,7 @@ class BanUserDto {
class SetAuthToOAuthDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['provider'] = provider!.name;
fields['provider'] = provider.name;
fields['authId'] = authId;
return fields;
}
Expand Down Expand Up @@ -1816,7 +1816,7 @@ class UserDto {
class UpdateUserDataDto {
Map<String, dynamic> toJson() {
Map<String, dynamic> fields = {};
fields['user'] = user!.toJson();
fields['user'] = user.toJson();
fields['deleted'] = deleted;
return fields;
}
Expand Down
1 change: 0 additions & 1 deletion game/lib/api/game_server_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
// OTHERWISE YOUR CHANGES MAY BE OVERWRITTEN!

import 'dart:async';
import 'dart:convert';
import 'package:game/api/game_client_dto.dart';
import 'package:socket_io_client/socket_io_client.dart';

Expand Down
1 change: 0 additions & 1 deletion game/lib/gameplay/gameplay_map.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:game/navigation_page/bottom_navbar.dart';
import 'package:game/splash_page/splash_page.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:game/api/geopoint.dart';
Expand Down
4 changes: 0 additions & 4 deletions game/lib/global_leaderboard/global_leaderboard_widget.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_svg/svg.dart';
import 'package:game/api/game_client_dto.dart';
import 'package:game/model/event_model.dart';
import 'package:game/model/group_model.dart';
import 'package:game/model/user_model.dart';
import 'package:game/global_leaderboard/podium_widgets.dart';
import 'package:game/widget/leaderboard_cell.dart';
import 'package:game/widget/podium_cell.dart';
import 'package:geolocator/geolocator.dart';
import 'package:provider/provider.dart';

/**
Expand Down
1 change: 0 additions & 1 deletion game/lib/global_leaderboard/podium_widgets.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
Expand Down
1 change: 0 additions & 1 deletion game/lib/splash_page/splash_page.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:game/api/game_client_dto.dart';
import 'package:google_sign_in/google_sign_in.dart';
Expand Down
87 changes: 86 additions & 1 deletion server/src/achievement/achievement.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,91 @@ export class AchievementService {

/** checks for all achievements associated with a user for a given completed challenge. */
async checkAchievementProgress(user: User, eventId: string) {

const ability = this.abilityFactory.createForUser(user);

const isJourney = await this.prisma.challenge.count({
where: { linkedEventId: eventId },
});

const locations = (
await this.prisma.challenge.findMany({
distinct: ['location'],
select: { location: true },
})
).map(l => l.location);

const uncompletedAchs = await this.prisma.achievement.findMany({
where: {
AND: [
accessibleBy(ability, Action.Read).Achievement,
{
// must either be for all events or for this one
OR: [{ linkedEventId: null }, { linkedEventId: eventId }],
},
{
// must either be any location of one of the ones here
OR: [
{ locationType: { in: locations } },
{ locationType: LocationType.ANY },
],
},
{
// must either be both challenge + journey achievement
// total points achievement
// or journey/challenge achievement depending on what was completed
OR: [
{ achievementType: AchievementType.TOTAL_CHALLENGES_OR_JOURNEYS },
{ achievementType: AchievementType.TOTAL_POINTS },
{
achievementType: isJourney
? AchievementType.TOTAL_JOURNEYS
: AchievementType.TOTAL_CHALLENGES,
},
],
},
{
// Only find non-completed achievements
trackers: {
none: {
userId: user.id,
dateComplete: null,
},
},
},
],
},
include: {
trackers: true,
},
});

for (const ach of uncompletedAchs) {
let achTracker: AchievementTracker;
if (ach.trackers.length === 0) {
// create tracker since it doesn't exist
achTracker = await this.prisma.achievementTracker.create({
data: {
userId: user.id,
achievementId: ach.id,
progress: 0,
},
});
} else {
achTracker = ach.trackers[0];
}

achTracker = await this.prisma.achievementTracker.update({
where: { id: achTracker.id },
data: {
progress: { increment: 1 },
dateComplete:
achTracker.progress + 1 >= ach.requiredPoints
? new Date()
: undefined,
},
});

await this.emitUpdateAchievementTracker(achTracker, user);
}
}
}

0 comments on commit 071bb8c

Please sign in to comment.