@gbl-uzh/platform 0.4.33 → 0.4.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nexus.d.ts +1 -0
- package/dist/nexus.d.ts.map +1 -1
- package/dist/nexus.js +3 -2
- package/dist/nexus.js.map +1 -1
- package/dist/ops/FPlayerData.graphql +4 -0
- package/dist/ops/QQuestAchievements.graphql +13 -0
- package/dist/ops/QResult.graphql +12 -0
- package/dist/schema.prisma +16 -4
- package/dist/services/AccountService.d.ts +5 -0
- package/dist/services/AccountService.d.ts.map +1 -1
- package/dist/services/AccountService.js +17 -4
- package/dist/services/AccountService.js.map +1 -1
- package/dist/services/EventService.d.ts.map +1 -1
- package/dist/services/EventService.js +89 -33
- package/dist/services/EventService.js.map +1 -1
- package/dist/services/GameService.d.ts +6 -0
- package/dist/services/GameService.d.ts.map +1 -1
- package/dist/services/GameService.js +22 -18
- package/dist/services/GameService.js.map +1 -1
- package/dist/services/PlayService.d.ts +5 -0
- package/dist/services/PlayService.d.ts.map +1 -1
- package/dist/services/PlayService.js +14 -1
- package/dist/services/PlayService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/Achievement.d.ts +1 -0
- package/dist/types/Achievement.d.ts.map +1 -1
- package/dist/types/Achievement.js +16 -1
- package/dist/types/Achievement.js.map +1 -1
- package/dist/types/Mutation.d.ts.map +1 -1
- package/dist/types/Mutation.js +49 -1
- package/dist/types/Mutation.js.map +1 -1
- package/dist/types/Query.d.ts.map +1 -1
- package/dist/types/Query.js +11 -0
- package/dist/types/Query.js.map +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
package/dist/nexus.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const JsonScalar: import("nexus/dist/core.js").AllNexusOutputTypeDefs;
|
|
2
|
+
export declare const JsonValueScalar: import("nexus/dist/core.js").AllNexusOutputTypeDefs;
|
|
2
3
|
export declare const DateScalar: import("nexus/dist/core.js").AllNexusOutputTypeDefs;
|
|
3
4
|
export declare const UserRole: import("nexus/dist/core.js").NexusEnumTypeDef<"UserRole">;
|
|
4
5
|
export declare const Event: import("nexus/dist/core.js").NexusObjectTypeDef<"Event">;
|
package/dist/nexus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../src/nexus.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,qDAA4C,CAAA;AACnE,eAAO,MAAM,UAAU,qDAA0C,CAAA;AAEjE,eAAO,MAAM,QAAQ,2DAGnB,CAAA;AAEF,eAAO,MAAM,KAAK,0DAOhB,CAAA;AAEF,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"nexus.d.ts","sourceRoot":"","sources":["../src/nexus.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,qDAA4C,CAAA;AACnE,eAAO,MAAM,eAAe,qDAA2C,CAAA;AACvE,eAAO,MAAM,UAAU,qDAA0C,CAAA;AAEjE,eAAO,MAAM,QAAQ,2DAGnB,CAAA;AAEF,eAAO,MAAM,KAAK,0DAOhB,CAAA;AAEF,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA"}
|
package/dist/nexus.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as DB from '@prisma/client';
|
|
2
|
-
import { JSONObjectResolver, DateTimeResolver } from 'graphql-scalars';
|
|
2
|
+
import { JSONObjectResolver, JSONResolver, DateTimeResolver } from 'graphql-scalars';
|
|
3
3
|
import { asNexusMethod, enumType, objectType } from 'nexus';
|
|
4
4
|
export { Game, GameStatus, Period, PeriodSegment } from './types/Game.js';
|
|
5
5
|
export { LearningAnswerOption, LearningElement, LearningElementAttempt, LearningElementState } from './types/LearningElement.js';
|
|
@@ -9,6 +9,7 @@ export { Query, generateBaseQueries } from './types/Query.js';
|
|
|
9
9
|
export { Subscription, generateBaseSubscriptions } from './types/Subscription.js';
|
|
10
10
|
|
|
11
11
|
const JsonScalar = asNexusMethod(JSONObjectResolver, 'json');
|
|
12
|
+
const JsonValueScalar = asNexusMethod(JSONResolver, 'jsonValue');
|
|
12
13
|
const DateScalar = asNexusMethod(DateTimeResolver, 'date');
|
|
13
14
|
const UserRole = enumType({
|
|
14
15
|
name: 'UserRole',
|
|
@@ -23,5 +24,5 @@ const Event = objectType({
|
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
26
|
|
|
26
|
-
export { DateScalar, Event, JsonScalar, UserRole };
|
|
27
|
+
export { DateScalar, Event, JsonScalar, JsonValueScalar, UserRole };
|
|
27
28
|
//# sourceMappingURL=nexus.js.map
|
package/dist/nexus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nexus.js","sources":["../src/nexus.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAIa,MAAA,UAAU,GAAG,aAAa,CAAC,kBAAkB,EAAE,MAAM;AACrD,MAAA,UAAU,GAAG,aAAa,CAAC,gBAAgB,EAAE,MAAM;AAEzD,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAC/B,IAAA,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,CAAA;AAEM,MAAM,KAAK,GAAG,UAAU,CAAC;AAC9B,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,UAAU,CAAC,CAAC,EAAA;AACV,QAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAChB,QAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;KACzC;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"nexus.js","sources":["../src/nexus.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAIa,MAAA,UAAU,GAAG,aAAa,CAAC,kBAAkB,EAAE,MAAM;AACrD,MAAA,eAAe,GAAG,aAAa,CAAC,YAAY,EAAE,WAAW;AACzD,MAAA,UAAU,GAAG,aAAa,CAAC,gBAAgB,EAAE,MAAM;AAEzD,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAC/B,IAAA,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpC,CAAA;AAEM,MAAM,KAAK,GAAG,UAAU,CAAC;AAC9B,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,UAAU,CAAC,CAAC,EAAA;AACV,QAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAChB,QAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;KACzC;AACF,CAAA;;;;"}
|
package/dist/ops/QResult.graphql
CHANGED
package/dist/schema.prisma
CHANGED
|
@@ -335,18 +335,28 @@ enum AchievementFrequency {
|
|
|
335
335
|
EACH
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
+
enum AchievementScope {
|
|
339
|
+
GAME
|
|
340
|
+
PERIOD
|
|
341
|
+
}
|
|
342
|
+
|
|
338
343
|
model Achievement {
|
|
339
344
|
id String @id
|
|
340
345
|
|
|
341
|
-
name
|
|
342
|
-
description
|
|
343
|
-
|
|
346
|
+
name String
|
|
347
|
+
description String
|
|
348
|
+
descriptionsByRole Json?
|
|
349
|
+
image String?
|
|
344
350
|
|
|
345
351
|
onEventId String
|
|
346
352
|
onEvent Event @relation(fields: [onEventId], references: [id])
|
|
347
353
|
when AchievementFrequency
|
|
348
354
|
|
|
349
|
-
|
|
355
|
+
scope AchievementScope @default(GAME)
|
|
356
|
+
activePeriods Int[]
|
|
357
|
+
|
|
358
|
+
reward Json?
|
|
359
|
+
conditions Json?
|
|
350
360
|
|
|
351
361
|
instances AchievementInstance[]
|
|
352
362
|
|
|
@@ -367,6 +377,7 @@ model AchievementInstance {
|
|
|
367
377
|
|
|
368
378
|
periodId Int
|
|
369
379
|
period Period @relation(fields: [periodId], references: [id])
|
|
380
|
+
periodIx Int
|
|
370
381
|
|
|
371
382
|
gameId Int
|
|
372
383
|
game Game @relation(fields: [gameId], references: [id])
|
|
@@ -374,6 +385,7 @@ model AchievementInstance {
|
|
|
374
385
|
createdAt DateTime @default(now())
|
|
375
386
|
updatedAt DateTime @updatedAt
|
|
376
387
|
|
|
388
|
+
@@unique([achievementId, playerId, periodIx])
|
|
377
389
|
@@index([playerId, achievementId])
|
|
378
390
|
}
|
|
379
391
|
|
|
@@ -52,7 +52,11 @@ export declare function loginAsTeam({ token }: LoginAsTeamArgs, ctx: CtxWithPris
|
|
|
52
52
|
description: string;
|
|
53
53
|
image: string | null;
|
|
54
54
|
reward: import("@prisma/client/runtime/library").JsonValue | null;
|
|
55
|
+
descriptionsByRole: import("@prisma/client/runtime/library").JsonValue | null;
|
|
55
56
|
when: import("@prisma/client").$Enums.AchievementFrequency;
|
|
57
|
+
scope: import("@prisma/client").$Enums.AchievementScope;
|
|
58
|
+
activePeriods: number[];
|
|
59
|
+
conditions: import("@prisma/client/runtime/library").JsonValue | null;
|
|
56
60
|
onEventId: string;
|
|
57
61
|
};
|
|
58
62
|
} & {
|
|
@@ -64,6 +68,7 @@ export declare function loginAsTeam({ token }: LoginAsTeamArgs, ctx: CtxWithPris
|
|
|
64
68
|
achievementId: string;
|
|
65
69
|
playerId: string;
|
|
66
70
|
periodId: number;
|
|
71
|
+
periodIx: number;
|
|
67
72
|
})[];
|
|
68
73
|
} & {
|
|
69
74
|
number: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountService.d.ts","sourceRoot":"","sources":["../../src/services/AccountService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,oBAAoB,UAQtB;
|
|
1
|
+
{"version":3,"file":"AccountService.d.ts","sourceRoot":"","sources":["../../src/services/AccountService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,oBAAoB,UAQtB;AAWD,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,WAAW,CAC/B,EAAE,KAAK,EAAE,EAAE,eAAe,EAC1B,GAAG,EAAE,aAAa,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiDjC;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,YAAY,CAAC,oBAiBlE"}
|
|
@@ -10,6 +10,15 @@ function createLoginToken({ sub, role, ...extra }) {
|
|
|
10
10
|
expiresIn: '1 week',
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
|
+
function isSecureRequest(ctx) {
|
|
14
|
+
const forwardedProto = ctx.req?.headers?.['x-forwarded-proto'];
|
|
15
|
+
if (Array.isArray(forwardedProto))
|
|
16
|
+
return forwardedProto[0] === 'https';
|
|
17
|
+
if (typeof forwardedProto === 'string')
|
|
18
|
+
return forwardedProto === 'https';
|
|
19
|
+
const nextAuthUrl = process.env.NEXTAUTH_URL;
|
|
20
|
+
return typeof nextAuthUrl === 'string' && nextAuthUrl.startsWith('https://');
|
|
21
|
+
}
|
|
13
22
|
async function loginAsTeam({ token }, ctx) {
|
|
14
23
|
const matchingPlayer = await ctx.prisma.player.findUnique({
|
|
15
24
|
where: { token },
|
|
@@ -37,12 +46,16 @@ async function loginAsTeam({ token }, ctx) {
|
|
|
37
46
|
role: UserRole.PLAYER,
|
|
38
47
|
token: matchingPlayer.token,
|
|
39
48
|
});
|
|
40
|
-
const
|
|
49
|
+
const secure = isSecureRequest(ctx);
|
|
50
|
+
const cookieName = secure
|
|
51
|
+
? '__Secure-next-auth.session-token'
|
|
52
|
+
: 'next-auth.session-token';
|
|
41
53
|
setCookie(ctx, cookieName, jwt, {
|
|
42
54
|
path: '/',
|
|
43
55
|
maxAge: 60 * 60 * 24 * 7,
|
|
44
56
|
httpOnly: true,
|
|
45
|
-
secure
|
|
57
|
+
secure,
|
|
58
|
+
sameSite: 'lax',
|
|
46
59
|
});
|
|
47
60
|
}
|
|
48
61
|
catch (err) {
|
|
@@ -60,8 +73,8 @@ async function logoutAsTeam(ctx) {
|
|
|
60
73
|
},
|
|
61
74
|
});
|
|
62
75
|
if (matchingPlayer) {
|
|
63
|
-
|
|
64
|
-
destroyCookie(ctx,
|
|
76
|
+
destroyCookie(ctx, '__Secure-next-auth.session-token', { path: '/' });
|
|
77
|
+
destroyCookie(ctx, 'next-auth.session-token', { path: '/' });
|
|
65
78
|
return true;
|
|
66
79
|
}
|
|
67
80
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountService.js","sources":["../../src/services/AccountService.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYM,SAAU,gBAAgB,CAAC,EAC/B,GAAG,EACH,IAAI,EACJ,GAAG,KAAK,EACa,EAAA;AACrB,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;AAChC,QAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;;AAG/C,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;AACpE,QAAA,SAAS,EAAE,QAAQ;AACpB,KAAA,CAAC;AACJ;AAMO,eAAe,WAAW,CAC/B,EAAE,KAAK,EAAmB,EAC1B,GAAgC,EAAA;IAEhC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACxD,KAAK,EAAE,EAAE,KAAK,EAAE;AAChB,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE;AACP,oBAAA,YAAY,EAAE,IAAI;AACnB,iBAAA;AACF,aAAA;AACD,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,YAAY,EAAE;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,WAAW,EAAE,IAAI;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA,CAAC;IAEF,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;;AAGlC,IAAA,IAAI;QACF,MAAM,GAAG,GAAG,gBAAgB,CAAC;YAC3B,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,GAAG,EAAE,cAAc,CAAC,EAAE;YACtB,IAAI,EAAE,QAAQ,CAAC,MAAM;YACrB,KAAK,EAAE,cAAc,CAAC,KAAK;AAC5B,SAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"AccountService.js","sources":["../../src/services/AccountService.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventService.d.ts","sourceRoot":"","sources":["../../src/services/EventService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,KAAK,IAAI,aAAa,EACvB,MAAM,aAAa,CAAA;AAGpB,wBAAsB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;;;;CAAA,
|
|
1
|
+
{"version":3,"file":"EventService.d.ts","sourceRoot":"","sources":["../../src/services/EventService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,KAAK,IAAI,aAAa,EACvB,MAAM,aAAa,CAAA;AAGpB,wBAAsB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;;;;CAAA,gBAyB1D;AAiDD,wBAAsB,YAAY,CAChC,KAAK,KAAA,EACL,aAAa,KAAA,EACb,aAAa,KAAA,EACb,MAAM,KAAA,kBAyMP;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,QAOlE;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE;IAAE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC9B,MAAM,CAAC,EAAE,GAAG,QAMb"}
|
|
@@ -4,47 +4,112 @@ import { BaseUserNotificationType } from '../types.js';
|
|
|
4
4
|
import logger from '../lib/logger.js';
|
|
5
5
|
|
|
6
6
|
async function receiveEvents({ events, ctx, prisma }) {
|
|
7
|
-
if (!Array.isArray(events))
|
|
8
|
-
return;
|
|
7
|
+
if (!Array.isArray(events) || events.length === 0)
|
|
8
|
+
return [];
|
|
9
9
|
const definedEvents = await prisma.event.findMany({
|
|
10
10
|
include: {
|
|
11
11
|
achievements: true,
|
|
12
12
|
},
|
|
13
13
|
});
|
|
14
14
|
const definedLevels = await prisma.playerLevel.findMany();
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const perEventOps = await Promise.all(events.map(async (event) => receiveEvent({ ...event, ctx }, definedEvents, definedLevels, prisma)));
|
|
16
|
+
const ops = perEventOps.flat();
|
|
17
|
+
if (ops.length === 0)
|
|
18
|
+
return [];
|
|
19
|
+
const transaction = prisma?.$transaction;
|
|
20
|
+
const results = typeof transaction === 'function' ? transaction.call(prisma, ops) : Promise.all(ops);
|
|
17
21
|
return results;
|
|
18
22
|
}
|
|
19
23
|
function prepareAchievementData({ achievementId, gameId, periodIx, playerId, count, }) {
|
|
20
24
|
return {
|
|
21
25
|
count,
|
|
26
|
+
periodIx,
|
|
22
27
|
achievement: { connect: { id: achievementId } },
|
|
23
28
|
game: { connect: { id: gameId } },
|
|
24
29
|
period: { connect: { gameId_index: { gameId, index: periodIx } } },
|
|
25
30
|
player: { connect: { id: playerId } },
|
|
26
31
|
};
|
|
27
32
|
}
|
|
33
|
+
function evaluateConditions(conditions, facts) {
|
|
34
|
+
if (!conditions || !Array.isArray(conditions) || conditions.length === 0)
|
|
35
|
+
return true;
|
|
36
|
+
if (!facts)
|
|
37
|
+
return false;
|
|
38
|
+
return conditions.every((cond) => {
|
|
39
|
+
const actual = facts[cond.fact];
|
|
40
|
+
if (actual == null)
|
|
41
|
+
return false;
|
|
42
|
+
switch (cond.op) {
|
|
43
|
+
case 'gt':
|
|
44
|
+
return actual > cond.value;
|
|
45
|
+
case 'gte':
|
|
46
|
+
return actual >= cond.value;
|
|
47
|
+
case 'lt':
|
|
48
|
+
return actual < cond.value;
|
|
49
|
+
case 'lte':
|
|
50
|
+
return actual <= cond.value;
|
|
51
|
+
case 'eq':
|
|
52
|
+
return actual === cond.value;
|
|
53
|
+
case 'neq':
|
|
54
|
+
return actual !== cond.value;
|
|
55
|
+
default:
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
28
60
|
async function receiveEvent(event, definedEvents, definedLevels, prisma) {
|
|
29
61
|
const matchingEvent = definedEvents.find((item) => item.id === event.type);
|
|
30
62
|
// console.warn(event, matchingEvent)
|
|
31
63
|
// if there is a matching event and it awards achievements, process each
|
|
32
64
|
if (matchingEvent && matchingEvent.achievements?.length > 0) {
|
|
33
|
-
const awardedAchievements =
|
|
34
|
-
|
|
65
|
+
const awardedAchievements = {
|
|
66
|
+
achievements: [],
|
|
67
|
+
achievementKeys: [],
|
|
68
|
+
rewards: {},
|
|
69
|
+
};
|
|
70
|
+
for (const achievement of matchingEvent.achievements) {
|
|
71
|
+
// skip if event facts don't match achievement conditions
|
|
72
|
+
if (!evaluateConditions(achievement.conditions, event.facts)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const isPeriodScoped = achievement.scope === DB.AchievementScope.PERIOD;
|
|
76
|
+
// For GAME-scoped FIRST achievements, skip if already earned globally
|
|
77
|
+
if (!isPeriodScoped &&
|
|
78
|
+
achievement.when === DB.AchievementFrequency.FIRST &&
|
|
35
79
|
event.ctx.achievements.includes(achievement.id)) {
|
|
36
|
-
|
|
80
|
+
continue;
|
|
37
81
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
82
|
+
let existingInstance;
|
|
83
|
+
if (isPeriodScoped) {
|
|
84
|
+
// PERIOD scope: look up by (achievementId, playerId, periodIx)
|
|
85
|
+
existingInstance = await prisma.achievementInstance.findUnique({
|
|
86
|
+
where: {
|
|
87
|
+
achievementId_playerId_periodIx: {
|
|
88
|
+
achievementId: achievement.id,
|
|
89
|
+
playerId: event.ctx.args.playerId,
|
|
90
|
+
periodIx: event.ctx.args.periodIx,
|
|
91
|
+
},
|
|
42
92
|
},
|
|
43
|
-
|
|
44
|
-
|
|
93
|
+
});
|
|
94
|
+
// For PERIOD-scoped FIRST achievements, skip if already earned this period
|
|
95
|
+
if (achievement.when === DB.AchievementFrequency.FIRST &&
|
|
96
|
+
existingInstance) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// GAME scope: look up by (achievementId, playerId) ignoring period
|
|
102
|
+
existingInstance = await prisma.achievementInstance.findFirst({
|
|
103
|
+
where: {
|
|
104
|
+
achievement: {
|
|
105
|
+
id: achievement.id,
|
|
106
|
+
},
|
|
107
|
+
player: {
|
|
108
|
+
id: event.ctx.args.playerId,
|
|
109
|
+
},
|
|
45
110
|
},
|
|
46
|
-
}
|
|
47
|
-
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
48
113
|
let achievementInstance;
|
|
49
114
|
if (existingInstance) {
|
|
50
115
|
achievementInstance = await prisma.achievementInstance.update({
|
|
@@ -71,25 +136,16 @@ async function receiveEvent(event, definedEvents, definedLevels, prisma) {
|
|
|
71
136
|
}),
|
|
72
137
|
});
|
|
73
138
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
achievementKeys: [...acc.achievementKeys, achievement.id],
|
|
83
|
-
rewards: {
|
|
84
|
-
...acc.rewards,
|
|
85
|
-
xp: (acc.rewards.xp ?? 0) + (achievement.reward?.xp ?? 0),
|
|
86
|
-
},
|
|
139
|
+
awardedAchievements.achievements.push({
|
|
140
|
+
achievement,
|
|
141
|
+
achievementInstance,
|
|
142
|
+
});
|
|
143
|
+
awardedAchievements.achievementKeys.push(achievement.id);
|
|
144
|
+
awardedAchievements.rewards = {
|
|
145
|
+
...awardedAchievements.rewards,
|
|
146
|
+
xp: (awardedAchievements.rewards.xp ?? 0) + (achievement.reward?.xp ?? 0),
|
|
87
147
|
};
|
|
88
|
-
}
|
|
89
|
-
achievements: [],
|
|
90
|
-
achievementKeys: [],
|
|
91
|
-
rewards: {},
|
|
92
|
-
});
|
|
148
|
+
}
|
|
93
149
|
const currentLevelPlus1 = definedLevels.find((level) => level.index === event.ctx.currentLevelIx + 1);
|
|
94
150
|
const currentLevelPlus2 = definedLevels.find((level) => level.index === event.ctx.currentLevelIx + 2);
|
|
95
151
|
if (awardedAchievements.achievements.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventService.js","sources":["../../src/services/EventService.ts"],"sourcesContent":[null],"names":["UserNotificationType","log"],"mappings":";;;;;AASO,eAAe,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA;AACzD,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"EventService.js","sources":["../../src/services/EventService.ts"],"sourcesContent":[null],"names":["UserNotificationType","log"],"mappings":"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"}
|
|
@@ -201,7 +201,11 @@ export declare function updatePlayerData<PlayerFactsType>({ name, facts }: Updat
|
|
|
201
201
|
description: string;
|
|
202
202
|
image: string | null;
|
|
203
203
|
reward: import("@prisma/client/runtime/library").JsonValue | null;
|
|
204
|
+
descriptionsByRole: import("@prisma/client/runtime/library").JsonValue | null;
|
|
204
205
|
when: DB.$Enums.AchievementFrequency;
|
|
206
|
+
scope: DB.$Enums.AchievementScope;
|
|
207
|
+
activePeriods: number[];
|
|
208
|
+
conditions: import("@prisma/client/runtime/library").JsonValue | null;
|
|
205
209
|
onEventId: string;
|
|
206
210
|
};
|
|
207
211
|
} & {
|
|
@@ -213,6 +217,7 @@ export declare function updatePlayerData<PlayerFactsType>({ name, facts }: Updat
|
|
|
213
217
|
achievementId: string;
|
|
214
218
|
playerId: string;
|
|
215
219
|
periodId: number;
|
|
220
|
+
periodIx: number;
|
|
216
221
|
})[];
|
|
217
222
|
} & {
|
|
218
223
|
number: number;
|
|
@@ -319,6 +324,7 @@ export declare function getGame(args: any, ctx: Context): Promise<({
|
|
|
319
324
|
achievementId: string;
|
|
320
325
|
playerId: string;
|
|
321
326
|
periodId: number;
|
|
327
|
+
periodIx: number;
|
|
322
328
|
}[];
|
|
323
329
|
} & {
|
|
324
330
|
number: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameService.d.ts","sourceRoot":"","sources":["../../src/services/GameService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EAGrB,MAAM,aAAa,CAAA;AAGpB,KAAK,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;AAE1C,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,CAAA;CACT;AAED,wBAAsB,UAAU,CAAC,MAAM,EACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,EACpD,GAAG,EAAE,OAAO,EACZ,EACE,MAAM,EACN,YAAY,GACb,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCtE;AAED,UAAU,iBAAiB,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,CAAC,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,aAAa,CAAC,MAAM,EACxC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC1D,GAAG,EAAE,OAAO,EACZ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAyGlE;AAED,UAAU,oBAAoB,CAAC,MAAM;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAC3C,EACE,MAAM,EACN,QAAQ,EACR,KAAK,EACL,gBAAgB,EAChB,aAAa,GACd,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,OAAO,EACZ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA8HlE;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,kBAAkB,CACtC,EAAE,MAAM,EAAE,EAAE,sBAAsB,EAClC,GAAG,EAAE,OAAO,EACZ,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"GameService.d.ts","sourceRoot":"","sources":["../../src/services/GameService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EAGrB,MAAM,aAAa,CAAA;AAGpB,KAAK,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;AAE1C,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,CAAA;CACT;AAED,wBAAsB,UAAU,CAAC,MAAM,EACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,EACpD,GAAG,EAAE,OAAO,EACZ,EACE,MAAM,EACN,YAAY,GACb,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCtE;AAED,UAAU,iBAAiB,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,CAAC,CAAA;IACR,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,aAAa,CAAC,MAAM,EACxC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC1D,GAAG,EAAE,OAAO,EACZ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAyGlE;AAED,UAAU,oBAAoB,CAAC,MAAM;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAC3C,EACE,MAAM,EACN,QAAQ,EACR,KAAK,EACL,gBAAgB,EAChB,aAAa,GACd,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,OAAO,EACZ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA8HlE;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,kBAAkB,CACtC,EAAE,MAAM,EAAE,EAAE,sBAAsB,EAClC,GAAG,EAAE,OAAO,EACZ,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,gBAqd9C;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,mBAAmB,CACvC,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAC/B,GAAG,EAAE,OAAO,EACZ,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,gBA0O9C;AAED,wBAAsB,gBAAgB,CAAC,eAAe,EACpD,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,oBAAoB,CAAC,eAAe,CAAC,EACtD,GAAG,EAAE,OAAO,EACZ,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAuCpD;AAED,wBAAsB,QAAQ,CAAC,IAAI,KAAA,EAAE,GAAG,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgBhD;AAED,wBAAsB,OAAO,CAAC,IAAI,KAAA,EAAE,GAAG,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiD/C;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;WASpD;AAED,wBAAsB,mBAAmB,CAAC,IAAI,KAAA,EAAE,GAAG,EAAE,OAAO;;;;;;;;;;;;;;;;;MAM3D;AAED,wBAAsB,gBAAgB,CAAC,IAAI,KAAA,EAAE,GAAG,EAAE,OAAO;;;;;;;;;KAExD;AAyCD,wBAAgB,yBAAyB,CACvC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE;;;;;;CAAA,EACvD,GAAG,KAAA,EACH,EAAE,QAAQ,EAAE;;CAAA;;;EAmGb;AAED,wBAAsB,uBAAuB,CAC3C,EACE,iBAAiB,EACjB,OAAO,EACP,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,IAAI,GACL;;;;;;;;;;CAAA,EACD,GAAG,EAAE,OAAO,EACZ,EAAE,QAAQ,EAAE;;CAAA;;;;GA+Fb;AAED,wBAAgB,0BAA0B,CAAC,IAAI,KAAA,EAAE,GAAG,KAAA,EAAE,EAAE,QAAQ,EAAE;;CAAA;;;EAqIjE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,KAAA,EAAE,GAAG,KAAA,EAAE,EAAE,QAAQ,EAAE;;CAAA;;;EAsD/D"}
|
|
@@ -80,7 +80,7 @@ async function addGamePeriod({ gameId, facts, segmentCount }, ctx, { schema, ser
|
|
|
80
80
|
});
|
|
81
81
|
console.log(game.periods[0]?.facts, game.periods[0]?.segments[0]?.facts, initializedFacts);
|
|
82
82
|
const res = await ctx.prisma.$transaction(async (tx) => {
|
|
83
|
-
if (specificFacts) {
|
|
83
|
+
if (specificFacts && services.Period.updateDBAfterInitialize) {
|
|
84
84
|
await services.Period.updateDBAfterInitialize(tx, specificFacts, {
|
|
85
85
|
gameId,
|
|
86
86
|
});
|
|
@@ -171,7 +171,7 @@ async function addPeriodSegment({ gameId, periodIx, facts, learningElements, sto
|
|
|
171
171
|
periodIx,
|
|
172
172
|
});
|
|
173
173
|
const res = await ctx.prisma.$transaction(async (tx) => {
|
|
174
|
-
if (specificFacts) {
|
|
174
|
+
if (specificFacts && services.Segment.updateDBAfterInitialize) {
|
|
175
175
|
await services.Segment.updateDBAfterInitialize(tx, specificFacts, {
|
|
176
176
|
gameId,
|
|
177
177
|
});
|
|
@@ -375,11 +375,13 @@ async function activateNextPeriod({ gameId }, ctx, { services }) {
|
|
|
375
375
|
if (!game.activePeriod?.activeSegment || !currentSegmentIx)
|
|
376
376
|
return null;
|
|
377
377
|
finalTransactionResult = await ctx.prisma.$transaction(async (tx) => {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
378
|
+
if (services.Segment.updateDBBeforeActivation) {
|
|
379
|
+
await services.Segment.updateDBBeforeActivation(tx, {
|
|
380
|
+
gameId,
|
|
381
|
+
periodIx: currentPeriodIx,
|
|
382
|
+
segmentIx: currentSegmentIx,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
383
385
|
// NOTE(JJ): The results may have changed
|
|
384
386
|
const gameLocal = await tx.game.findUnique({
|
|
385
387
|
where: { id: gameId },
|
|
@@ -518,7 +520,9 @@ async function activateNextPeriod({ gameId }, ctx, { services }) {
|
|
|
518
520
|
facts: r.facts,
|
|
519
521
|
playerId: r.player.connect.id,
|
|
520
522
|
}));
|
|
521
|
-
const resultsFactsPerPlayer =
|
|
523
|
+
const resultsFactsPerPlayer = typeof services.PeriodResult.updateDBAfterEnd !== 'undefined'
|
|
524
|
+
? await services.PeriodResult.updateDBAfterEnd(tx, { results: resultsPerPlayer }, { gameId })
|
|
525
|
+
: resultsPerPlayer;
|
|
522
526
|
// TODO(JJ): We need to change the facts here
|
|
523
527
|
results.forEach((r) => {
|
|
524
528
|
const updatedResultFacts = resultsFactsPerPlayer.find((f) => f.playerId === r.player.connect.id)?.facts;
|
|
@@ -737,11 +741,9 @@ async function activateNextSegment({ gameId }, ctx, { services }) {
|
|
|
737
741
|
},
|
|
738
742
|
},
|
|
739
743
|
});
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
// await extra
|
|
744
|
-
// }
|
|
744
|
+
for (const extra of extras) {
|
|
745
|
+
await extra;
|
|
746
|
+
}
|
|
745
747
|
});
|
|
746
748
|
break;
|
|
747
749
|
}
|
|
@@ -753,11 +755,13 @@ async function activateNextSegment({ gameId }, ctx, { services }) {
|
|
|
753
755
|
return null;
|
|
754
756
|
}
|
|
755
757
|
finalTransactionResult = await ctx.prisma.$transaction(async (tx) => {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
758
|
+
if (services.Segment.updateDBBeforeActivation) {
|
|
759
|
+
await services.Segment.updateDBBeforeActivation(tx, {
|
|
760
|
+
gameId,
|
|
761
|
+
periodIx: currentPeriodIx,
|
|
762
|
+
segmentIx: currentSegmentIx,
|
|
763
|
+
});
|
|
764
|
+
}
|
|
761
765
|
// NOTE(JJ): The results may have changed
|
|
762
766
|
const gameLocal = await tx.game.findUnique({
|
|
763
767
|
where: { id: gameId },
|