From 5ae38cd1bed751ad561e6ca3b14253a749aa22fa Mon Sep 17 00:00:00 2001 From: neketka Date: Tue, 30 Apr 2024 11:08:46 -0400 Subject: [PATCH] Add acknowledgements --- server/src/achievement/achievement.gateway.ts | 4 ++++ server/src/challenge/challenge.gateway.ts | 11 +++++++-- server/src/event/event.gateway.ts | 22 ++++++++++++----- server/src/group/group.gateway.ts | 19 +++++++++++---- .../src/organization/organization.gateway.ts | 12 ++++++---- .../src/organization/organization.service.ts | 5 ++-- server/src/user/user.gateway.ts | 24 +++++++++++++++++-- 7 files changed, 76 insertions(+), 21 deletions(-) diff --git a/server/src/achievement/achievement.gateway.ts b/server/src/achievement/achievement.gateway.ts index 5685d60b..da90e052 100644 --- a/server/src/achievement/achievement.gateway.ts +++ b/server/src/achievement/achievement.gateway.ts @@ -51,6 +51,8 @@ export class AchievementGateway { for (const ach of achs) { await this.achievementService.emitUpdateAchievementData(ach, false, user); } + + return achs.length; } /** @@ -107,5 +109,7 @@ export class AchievementGateway { false, ); } + + return achievement.id; } } diff --git a/server/src/challenge/challenge.gateway.ts b/server/src/challenge/challenge.gateway.ts index 5ff4bbc4..4d14d4d0 100644 --- a/server/src/challenge/challenge.gateway.ts +++ b/server/src/challenge/challenge.gateway.ts @@ -56,6 +56,8 @@ export class ChallengeGateway { for (const chal of challenges) { await this.challengeService.emitUpdateChallengeData(chal, false, user); } + + return challenges.length; } // Disabled for now to prevent any cheating @@ -102,7 +104,10 @@ export class ChallengeGateway { user, 'Challenge could not be completed', ); + return false; } + + return true; } @SubscribeMessage('updateChallengeData') @@ -111,7 +116,7 @@ export class ChallengeGateway { @CallingUser() user: User, @MessageBody() data: UpdateChallengeDataDto, ) { - const challenge = await this.challengeService.getChallengeById( + let challenge = await this.challengeService.getChallengeById( data.challenge.id, ); @@ -130,7 +135,7 @@ export class ChallengeGateway { await this.challengeService.emitUpdateChallengeData(challenge, true); await this.eventService.emitUpdateEventData(ev, false); } else { - const challenge = await this.challengeService.upsertChallengeFromDto( + challenge = await this.challengeService.upsertChallengeFromDto( ability, data.challenge, ); @@ -152,5 +157,7 @@ export class ChallengeGateway { await this.eventService.emitUpdateEventData(ev, false); } } + + return challenge.id; } } diff --git a/server/src/event/event.gateway.ts b/server/src/event/event.gateway.ts index 7e37c96c..bc8cabe1 100644 --- a/server/src/event/event.gateway.ts +++ b/server/src/event/event.gateway.ts @@ -58,6 +58,8 @@ export class EventGateway { for (const ev of evs) { await this.eventService.emitUpdateEventData(ev, false, user); } + + return evs.length; } @SubscribeMessage('requestFilteredEventIds') @@ -76,6 +78,8 @@ export class EventGateway { await this.eventService.emitUpdateEventData(ev, false, user); } } + + return evs.length; } @SubscribeMessage('requestRecommendedEvents') @@ -87,6 +91,8 @@ export class EventGateway { for (const ev of evs) { await this.eventService.emitUpdateEventData(ev, false, user); } + + return evs.length; } @SubscribeMessage('requestEventLeaderData') @@ -113,6 +119,8 @@ export class EventGateway { ev, user, ); + + return Math.min(data.count, 1024); } @SubscribeMessage('requestEventTrackerData') @@ -127,6 +135,8 @@ export class EventGateway { for (const tracker of trackers) { await this.eventService.emitUpdateEventTracker(tracker, user); } + + return trackers.length; } @SubscribeMessage('useEventTrackerHint') @@ -137,9 +147,10 @@ export class EventGateway { const tracker = await this.eventService.useEventTrackerHint(user); if (tracker) { await this.eventService.emitUpdateEventTracker(tracker, user); - return; + return true; } await this.clientService.emitErrorData(user, 'Failed to track used hint!'); + return false; } @SubscribeMessage('updateEventData') @@ -148,7 +159,7 @@ export class EventGateway { @CallingUser() user: User, @MessageBody() data: UpdateEventDataDto, ) { - const ev = await this.eventService.getEventById(data.event.id); + let ev = await this.eventService.getEventById(data.event.id); if (data.deleted) { if (!ev || !(await this.eventService.removeEvent(ability, ev.id))) { @@ -157,10 +168,7 @@ export class EventGateway { } await this.eventService.emitUpdateEventData(ev, true); } else { - const ev = await this.eventService.upsertEventFromDto( - ability, - data.event, - ); + ev = await this.eventService.upsertEventFromDto(ability, data.event); if (!ev) { await this.clientService.emitErrorData(user, 'Failed to upsert event!'); @@ -175,5 +183,7 @@ export class EventGateway { await this.orgService.emitUpdateOrganizationData(org, false); await this.eventService.emitUpdateEventData(ev, false); } + + return ev.id; } } diff --git a/server/src/group/group.gateway.ts b/server/src/group/group.gateway.ts index bd1848d6..2205276e 100644 --- a/server/src/group/group.gateway.ts +++ b/server/src/group/group.gateway.ts @@ -39,6 +39,7 @@ export class GroupGateway { ) { const group = await this.groupService.getGroupForUser(user); await this.groupService.emitUpdateGroupData(group, false, user); + return true; } @SubscribeMessage('joinGroup') @@ -48,6 +49,7 @@ export class GroupGateway { ) { const oldGroup = await this.groupService.joinGroup(user, data.groupId); await this.groupService.updateGroupMembers(user, oldGroup); + return true; } @SubscribeMessage('leaveGroup') @@ -57,6 +59,7 @@ export class GroupGateway { ) { const oldGroup = await this.groupService.leaveGroup(user); await this.groupService.updateGroupMembers(user, oldGroup); + return true; } /** @@ -70,9 +73,14 @@ export class GroupGateway { @CallingUser() user: User, @MessageBody() data: SetCurrentEventDto, ) { - await this.groupService.setCurrentEvent(user, data.eventId); - const group = await this.groupService.getGroupForUser(user); - await this.groupService.emitUpdateGroupData(group, false, user); + const success = await this.groupService.setCurrentEvent(user, data.eventId); + + if (success) { + const group = await this.groupService.getGroupForUser(user); + await this.groupService.emitUpdateGroupData(group, false, user); + } + + return success; } @SubscribeMessage('updateGroupData') @@ -87,7 +95,7 @@ export class GroupGateway { user, 'This group does not exist!', ); - return; + return false; } if (data.deleted) { @@ -100,6 +108,8 @@ export class GroupGateway { this.clientService.subscribe(user, group.id); await this.groupService.emitUpdateGroupData(group, false); } + + return true; } @SubscribeMessage('sendGroupInvite') @@ -109,5 +119,6 @@ export class GroupGateway { ) { const group = await this.groupService.getGroupForUser(user); await this.groupService.emitGroupInvite(group, data.targetUsername, user); + return true; } } diff --git a/server/src/organization/organization.gateway.ts b/server/src/organization/organization.gateway.ts index fc730da0..49b89c45 100644 --- a/server/src/organization/organization.gateway.ts +++ b/server/src/organization/organization.gateway.ts @@ -47,6 +47,8 @@ export class OrganizationGateway { for (const org of orgs) { await this.orgService.emitUpdateOrganizationData(org, false, user); } + + return orgs.length; } /** @@ -61,12 +63,10 @@ export class OrganizationGateway { @CallingUser() user: User, @MessageBody() data: UpdateOrganizationDataDto, ) { + let org = await this.orgService.getOrganizationById(data.organization.id); if (data.deleted) { - const org = await this.orgService.getOrganizationById( - data.organization.id, - ); - if ( + !org || !(await this.orgService.removeOrganization( ability, data.organization.id, @@ -80,7 +80,7 @@ export class OrganizationGateway { } await this.orgService.emitUpdateOrganizationData(org, true); } else { - const org = await this.orgService.upsertOrganizationFromDto( + org = await this.orgService.upsertOrganizationFromDto( ability, data.organization, ); @@ -96,5 +96,7 @@ export class OrganizationGateway { this.clientService.subscribe(user, org.id); await this.orgService.emitUpdateOrganizationData(org, false); } + + return org.id; } } diff --git a/server/src/organization/organization.service.ts b/server/src/organization/organization.service.ts index 4780d687..581438d9 100644 --- a/server/src/organization/organization.service.ts +++ b/server/src/organization/organization.service.ts @@ -153,7 +153,7 @@ export class OrganizationService { } async getOrganizationById(id: string) { - return await this.prisma.organization.findFirstOrThrow({ where: { id } }); + return await this.prisma.organization.findFirst({ where: { id } }); } async getOrganizationByCode(accessCode: string) { @@ -364,7 +364,7 @@ export class OrganizationService { where: { accessCode: code }, }); - if (!org) return; + if (!org) return false; await this.prisma.organization.update({ where: { id: org.id }, @@ -375,5 +375,6 @@ export class OrganizationService { where: { id: user.id }, data: { memberOf: { connect: { id: org.id } } }, }); + return true; } } diff --git a/server/src/user/user.gateway.ts b/server/src/user/user.gateway.ts index 00f01942..a7c8940d 100644 --- a/server/src/user/user.gateway.ts +++ b/server/src/user/user.gateway.ts @@ -86,6 +86,8 @@ export class UserGateway { await this.userService.emitUpdateUserData(us, false, false, user), ), ); + + return users.length; } @SubscribeMessage('requestUserData') @@ -103,10 +105,13 @@ export class UserGateway { user, 'Error requesting user by id', ); + return false; } } else { await this.userService.emitUpdateUserData(user, false, false, user); } + + return true; } @SubscribeMessage('updateUserData') @@ -125,6 +130,7 @@ export class UserGateway { const user = await this.userService.updateUser(ability, data.user); await this.userService.emitUpdateUserData(user, false, true); } + return true; } @SubscribeMessage('setAuthToDevice') @@ -133,6 +139,7 @@ export class UserGateway { @MessageBody() data: SetAuthToDeviceDto, ) { await this.userService.setAuthType(user, AuthType.DEVICE, data.deviceId); + return true; } @SubscribeMessage('setAuthToOAuth') @@ -145,17 +152,20 @@ export class UserGateway { this.providerToAuthType(data.provider), data.authId, ); + return true; } @SubscribeMessage('banUser') async banUser(@CallingUser() user: User, @MessageBody() data: BanUserDto) { if (user.administrator) { const user = await this.userService.byId(data.userId); - if (!!user) { + if (user) { const us = await this.userService.banUser(user, data.isBanned); await this.userService.emitUpdateUserData(us, false, false); + return true; } } + return false; } @SubscribeMessage('addManager') @@ -167,6 +177,7 @@ export class UserGateway { const org = await this.orgService.getOrganizationById(data.organizationId); if ( + !org || !(await this.orgService.addManager( ability, data.email, @@ -180,6 +191,7 @@ export class UserGateway { const manager = await this.userService.byEmail(data.email); await this.clientService.subscribe(manager, org.id); await this.orgService.emitUpdateOrganizationData(org, false); + return manager.id; } @SubscribeMessage('joinOrganization') @@ -187,12 +199,19 @@ export class UserGateway { @CallingUser() user: User, @MessageBody() data: JoinOrganizationDto, ) { - await this.orgService.joinOrganization(user, data.accessCode); + const success = await this.orgService.joinOrganization( + user, + data.accessCode, + ); + + if (!success) return false; const org = await this.orgService.getOrganizationByCode(data.accessCode); await this.orgService.emitUpdateOrganizationData(org, false); await this.userService.emitUpdateUserData(user, false, false); + + return true; } @SubscribeMessage('closeAccount') @@ -205,5 +224,6 @@ export class UserGateway { await this.userService.setAuthType(user, AuthType.NONE, user.authToken); await this.userService.deleteUser(ability, user); await this.groupService.emitUpdateGroupData(group, false); + return true; } }