@openora/core 0.4.1-canary.77 → 0.4.1-canary.79
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/.tsbuildinfo +1 -1
- package/dist/admin-console/plugin.d.ts +2 -0
- package/dist/admin-console/plugin.d.ts.map +1 -1
- package/dist/analytics/plugin.d.ts +2 -0
- package/dist/analytics/plugin.d.ts.map +1 -1
- package/dist/audit/__tests__/audit.service.int.test.js +44 -0
- package/dist/audit/__tests__/audit.service.int.test.js.map +1 -1
- package/dist/audit/plugin.d.ts +2 -0
- package/dist/audit/plugin.d.ts.map +1 -1
- package/dist/audit/plugin.js +36 -0
- package/dist/audit/plugin.js.map +1 -1
- package/dist/casino/gaming/plugin.d.ts +2 -0
- package/dist/casino/gaming/plugin.d.ts.map +1 -1
- package/dist/casino/lobby/plugin.d.ts +2 -0
- package/dist/casino/lobby/plugin.d.ts.map +1 -1
- package/dist/cms/plugin.d.ts +2 -0
- package/dist/cms/plugin.d.ts.map +1 -1
- package/dist/compliance/plugin.d.ts +2 -0
- package/dist/compliance/plugin.d.ts.map +1 -1
- package/dist/contracts/adapters/index.d.ts +4 -0
- package/dist/contracts/adapters/index.d.ts.map +1 -1
- package/dist/contracts/adapters/index.js +2 -0
- package/dist/contracts/adapters/index.js.map +1 -1
- package/dist/contracts/adapters/player-activity.d.ts +6 -0
- package/dist/contracts/adapters/player-activity.d.ts.map +1 -0
- package/dist/contracts/adapters/player-activity.js +3 -0
- package/dist/contracts/adapters/player-activity.js.map +1 -0
- package/dist/contracts/adapters/social-commands.d.ts +12 -0
- package/dist/contracts/adapters/social-commands.d.ts.map +1 -0
- package/dist/contracts/adapters/social-commands.js +7 -0
- package/dist/contracts/adapters/social-commands.js.map +1 -0
- package/dist/contracts/schemas/events.d.ts +26 -0
- package/dist/contracts/schemas/events.d.ts.map +1 -1
- package/dist/contracts/schemas/events.js +17 -9
- package/dist/contracts/schemas/events.js.map +1 -1
- package/dist/engagement/chat/__tests__/chat.service.int.test.js +123 -2
- package/dist/engagement/chat/__tests__/chat.service.int.test.js.map +1 -1
- package/dist/engagement/chat/contract/index.d.ts +4 -0
- package/dist/engagement/chat/contract/index.d.ts.map +1 -1
- package/dist/engagement/chat/contract/index.js +2 -0
- package/dist/engagement/chat/contract/index.js.map +1 -1
- package/dist/engagement/chat/plugin.d.ts +2 -0
- package/dist/engagement/chat/plugin.d.ts.map +1 -1
- package/dist/engagement/chat/plugin.js +2 -2
- package/dist/engagement/chat/plugin.js.map +1 -1
- package/dist/engagement/chat/router/index.d.ts +2 -0
- package/dist/engagement/chat/router/index.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat.service.d.ts +6 -2
- package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat.service.js +29 -8
- package/dist/engagement/chat/service/chat.service.js.map +1 -1
- package/dist/engagement/chat-commands/plugin.d.ts +2 -0
- package/dist/engagement/chat-commands/plugin.d.ts.map +1 -1
- package/dist/engagement/notifications/plugin.d.ts +2 -0
- package/dist/engagement/notifications/plugin.d.ts.map +1 -1
- package/dist/engagement/social/__tests__/social.plugin.int.test.d.ts +2 -0
- package/dist/engagement/social/__tests__/social.plugin.int.test.d.ts.map +1 -0
- package/dist/engagement/social/__tests__/social.plugin.int.test.js +106 -0
- package/dist/engagement/social/__tests__/social.plugin.int.test.js.map +1 -0
- package/dist/engagement/social/__tests__/social.router.int.test.js +124 -2
- package/dist/engagement/social/__tests__/social.router.int.test.js.map +1 -1
- package/dist/engagement/social/__tests__/social.service.int.test.js +587 -6
- package/dist/engagement/social/__tests__/social.service.int.test.js.map +1 -1
- package/dist/engagement/social/contract/index.d.ts +114 -0
- package/dist/engagement/social/contract/index.d.ts.map +1 -1
- package/dist/engagement/social/contract/index.js +53 -0
- package/dist/engagement/social/contract/index.js.map +1 -1
- package/dist/engagement/social/drizzle/migrations/0003_fuzzy_shadow_king.sql +4 -0
- package/dist/engagement/social/drizzle/migrations/0004_friendship-cancel-constraint.sql +2 -0
- package/dist/engagement/social/drizzle/migrations/meta/0003_snapshot.json +145 -0
- package/dist/engagement/social/drizzle/migrations/meta/0004_snapshot.json +145 -0
- package/dist/engagement/social/drizzle/migrations/meta/_journal.json +14 -0
- package/dist/engagement/social/plugin.d.ts +52 -50
- package/dist/engagement/social/plugin.d.ts.map +1 -1
- package/dist/engagement/social/plugin.js +8 -7
- package/dist/engagement/social/plugin.js.map +1 -1
- package/dist/engagement/social/router/index.d.ts +67 -0
- package/dist/engagement/social/router/index.d.ts.map +1 -1
- package/dist/engagement/social/router/index.js +38 -1
- package/dist/engagement/social/router/index.js.map +1 -1
- package/dist/engagement/social/schema/index.d.ts +17 -0
- package/dist/engagement/social/schema/index.d.ts.map +1 -1
- package/dist/engagement/social/schema/index.js +5 -17
- package/dist/engagement/social/schema/index.js.map +1 -1
- package/dist/engagement/social/service/social.service.d.ts +32 -18
- package/dist/engagement/social/service/social.service.d.ts.map +1 -1
- package/dist/engagement/social/service/social.service.js +283 -48
- package/dist/engagement/social/service/social.service.js.map +1 -1
- package/dist/engagement/social-transfers/plugin.d.ts +2 -0
- package/dist/engagement/social-transfers/plugin.d.ts.map +1 -1
- package/dist/iam/plugin.d.ts +2 -0
- package/dist/iam/plugin.d.ts.map +1 -1
- package/dist/pam/identity/adapters/identity-reader.service.d.ts.map +1 -1
- package/dist/pam/identity/adapters/identity-reader.service.js +5 -2
- package/dist/pam/identity/adapters/identity-reader.service.js.map +1 -1
- package/dist/pam/identity/plugin.d.ts +2 -0
- package/dist/pam/identity/plugin.d.ts.map +1 -1
- package/dist/pam/player-management/__tests__/player.service.int.test.js +29 -0
- package/dist/pam/player-management/__tests__/player.service.int.test.js.map +1 -1
- package/dist/pam/player-management/plugin.d.ts +2 -0
- package/dist/pam/player-management/plugin.d.ts.map +1 -1
- package/dist/pam/player-management/plugin.js +6 -4
- package/dist/pam/player-management/plugin.js.map +1 -1
- package/dist/pam/player-management/service/player.service.d.ts +3 -2
- package/dist/pam/player-management/service/player.service.d.ts.map +1 -1
- package/dist/pam/player-management/service/player.service.js +7 -1
- package/dist/pam/player-management/service/player.service.js.map +1 -1
- package/dist/pam/player-note/plugin.d.ts +2 -0
- package/dist/pam/player-note/plugin.d.ts.map +1 -1
- package/dist/pam/profile/plugin.d.ts +2 -0
- package/dist/pam/profile/plugin.d.ts.map +1 -1
- package/dist/pam/tag/plugin.d.ts +2 -0
- package/dist/pam/tag/plugin.d.ts.map +1 -1
- package/dist/server/runtime/core-token-catalog.d.ts +2 -0
- package/dist/server/runtime/core-token-catalog.d.ts.map +1 -1
- package/dist/server/runtime/core-token-catalog.js +3 -1
- package/dist/server/runtime/core-token-catalog.js.map +1 -1
- package/dist/server/runtime/create-app.d.ts.map +1 -1
- package/dist/server/runtime/create-app.js +7 -1
- package/dist/server/runtime/create-app.js.map +1 -1
- package/dist/wallet/plugin.d.ts +2 -0
- package/dist/wallet/plugin.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { and, eq, inArray, isNull, or } from 'drizzle-orm';
|
|
2
|
-
import { createDomainError, makeConflictError, makeNotFoundError, serializeRow, } from '@openora/core/server';
|
|
3
|
-
import { chatUserBlock } from '@openora/core/engagement/schema/chat';
|
|
1
|
+
import { and, count, desc, eq, inArray, isNotNull, isNull, or, SQL, sql } from 'drizzle-orm';
|
|
2
|
+
import { createDomainError, createLogger, makeConflictError, makeNotFoundError, pageToOffset, serializeRow, } from '@openora/core/server';
|
|
3
|
+
import { chatUserBlock, chatUserIgnore } from '@openora/core/engagement/schema/chat';
|
|
4
4
|
import { player } from '@openora/core/pam/schema/profile';
|
|
5
5
|
import { friendship } from '../schema/index.js';
|
|
6
|
+
const logger = createLogger('social');
|
|
7
|
+
const ONLINE_STATUS_WINDOW_MS = 3 * 60 * 1000;
|
|
6
8
|
// The caller targeted themselves (SendFriendRequestInputSchema.targetUserId === callerId).
|
|
7
9
|
export const SelfFriendRequestError = createDomainError('SelfFriendRequestError', () => 'You cannot send a friend request to yourself');
|
|
8
10
|
// A genuinely nonexistent target only - never thrown for a target that exists but
|
|
@@ -20,12 +22,8 @@ export const BlockedBySelfError = makeConflictError('BLOCKED_BY_SELF', 'You have
|
|
|
20
22
|
export const AlreadyFriendsError = makeConflictError('ALREADY_FRIENDS', 'You are already friends with this player');
|
|
21
23
|
export const RequestAlreadyPendingError = makeConflictError('REQUEST_ALREADY_PENDING', 'A friend request to this player is already pending');
|
|
22
24
|
export const FriendRequestRefusedError = makeConflictError('FRIEND_REQUEST_REFUSED', 'This friend request was refused');
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// constraint-name check needed. drizzle-orm wraps the driver error in a
|
|
26
|
-
// DrizzleQueryError, so the pg error (and its `.code`) is on `.cause`, not the
|
|
27
|
-
// thrown error itself - checked against a real Postgres unique-index violation
|
|
28
|
-
// in social.service.int.test.ts (a mocked query builder can't catch this).
|
|
25
|
+
export const FriendshipNotFoundError = makeNotFoundError('Friendship');
|
|
26
|
+
export const FriendRequestNotFoundError = makeNotFoundError('FriendRequest');
|
|
29
27
|
function pgErrorCode(e) {
|
|
30
28
|
if (typeof e !== 'object' || e === null) {
|
|
31
29
|
return undefined;
|
|
@@ -54,19 +52,12 @@ function pairCondition(userA, userB) {
|
|
|
54
52
|
export class SocialService {
|
|
55
53
|
drizzle;
|
|
56
54
|
events;
|
|
57
|
-
|
|
55
|
+
identityReader;
|
|
56
|
+
constructor(drizzle, events, identityReader) {
|
|
58
57
|
this.drizzle = drizzle;
|
|
59
58
|
this.events = events;
|
|
59
|
+
this.identityReader = identityReader;
|
|
60
60
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Sends a friend request from `callerId` to `targetUserId`. The insert is
|
|
63
|
-
* attempted directly against the canonical-pair unique index (no pre-SELECT,
|
|
64
|
-
* avoiding a TOCTOU race); a unique-violation means a row for this pair already
|
|
65
|
-
* exists, which is resolved by re-reading it - including the mutual/simultaneous
|
|
66
|
-
* case where the existing row was already addressed TO the caller, which
|
|
67
|
-
* auto-accepts instead of conflicting. Events are emitted strictly after the
|
|
68
|
-
* mutating statement/transaction has committed.
|
|
69
|
-
*/
|
|
70
61
|
async sendFriendRequest(callerId, targetUserId) {
|
|
71
62
|
if (targetUserId === callerId) {
|
|
72
63
|
throw new SelfFriendRequestError();
|
|
@@ -133,18 +124,12 @@ export class SocialService {
|
|
|
133
124
|
});
|
|
134
125
|
return toFriendshipDto(accepted);
|
|
135
126
|
}
|
|
136
|
-
/**
|
|
137
|
-
* Re-reads the row a unique-violation on `friendship_pair_key` proved already
|
|
138
|
-
* exists and resolves it: already accepted -> conflict, same-direction duplicate
|
|
139
|
-
* -> conflict, opposite-direction (mutual/simultaneous request) -> auto-accept.
|
|
140
|
-
* `FOR UPDATE` serializes this against a concurrent resolution of the same pair.
|
|
141
|
-
*/
|
|
142
127
|
async resolveExistingPair(callerId, targetUserId) {
|
|
143
128
|
return this.drizzle.db.transaction(async (tx) => {
|
|
144
129
|
const rows = await tx
|
|
145
130
|
.select()
|
|
146
131
|
.from(friendship)
|
|
147
|
-
.where(pairCondition(callerId, targetUserId))
|
|
132
|
+
.where(and(pairCondition(callerId, targetUserId), isNull(friendship.removedAt)))
|
|
148
133
|
.for('update')
|
|
149
134
|
.limit(1);
|
|
150
135
|
const existing = rows[0];
|
|
@@ -191,7 +176,7 @@ export class SocialService {
|
|
|
191
176
|
const friendships = await this.drizzle.db
|
|
192
177
|
.select()
|
|
193
178
|
.from(friendship)
|
|
194
|
-
.where(or(and(eq(friendship.requesterId, callerId), inArray(friendship.addresseeId, uniqueTargetIds)), and(inArray(friendship.requesterId, uniqueTargetIds), eq(friendship.addresseeId, callerId))));
|
|
179
|
+
.where(and(or(and(eq(friendship.requesterId, callerId), inArray(friendship.addresseeId, uniqueTargetIds)), and(inArray(friendship.requesterId, uniqueTargetIds), eq(friendship.addresseeId, callerId))), isNull(friendship.removedAt)));
|
|
195
180
|
const friendshipByTargetId = new Map();
|
|
196
181
|
for (const row of friendships) {
|
|
197
182
|
const targetId = row.requesterId === callerId ? row.addresseeId : row.requesterId;
|
|
@@ -215,34 +200,284 @@ export class SocialService {
|
|
|
215
200
|
return { userId, status: 'blocked_by_me', friendshipId: null, canSendRequest: false };
|
|
216
201
|
}
|
|
217
202
|
const existing = friendshipByTargetId.get(userId);
|
|
218
|
-
if (existing
|
|
203
|
+
if (!existing) {
|
|
204
|
+
return { userId, status: 'none', friendshipId: null, canSendRequest: true };
|
|
205
|
+
}
|
|
206
|
+
if (existing.refusedAt !== null) {
|
|
219
207
|
return { userId, status: 'refused', friendshipId: existing.id, canSendRequest: false };
|
|
220
208
|
}
|
|
221
|
-
if (existing
|
|
209
|
+
if (existing.acceptedAt !== null) {
|
|
222
210
|
return { userId, status: 'friends', friendshipId: existing.id, canSendRequest: false };
|
|
223
211
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
212
|
+
const status = existing.requesterId === callerId ? 'pending_outgoing' : 'pending_incoming';
|
|
213
|
+
return { userId, status, friendshipId: existing.id, canSendRequest: false };
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
async dissolveFriendship(tx, userA, userB, actorId, reason) {
|
|
217
|
+
const rows = await tx
|
|
218
|
+
.update(friendship)
|
|
219
|
+
.set({ removedAt: new Date() })
|
|
220
|
+
.where(and(pairCondition(userA, userB), isNull(friendship.removedAt), isNotNull(friendship.acceptedAt)))
|
|
221
|
+
.returning();
|
|
222
|
+
const removed = rows[0];
|
|
223
|
+
if (!removed) {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
friendshipId: removed.id,
|
|
228
|
+
actorId,
|
|
229
|
+
actorPlayerId: await this.identityReader.getPlayerIdByUserIdSafe(actorId),
|
|
230
|
+
otherUserId: removed.requesterId === actorId ? removed.addresseeId : removed.requesterId,
|
|
231
|
+
reason,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
async removeFriend(callerId, targetUserId) {
|
|
235
|
+
const dissolved = await this.dissolveFriendship(this.drizzle.db, callerId, targetUserId, callerId, 'removed_by_player');
|
|
236
|
+
if (!dissolved) {
|
|
237
|
+
throw new FriendshipNotFoundError(targetUserId);
|
|
238
|
+
}
|
|
239
|
+
this.events.emit('social.friendship.removed', dissolved);
|
|
240
|
+
}
|
|
241
|
+
async dissolveFriendshipOnBlock(tx, blockerId, blockedId) {
|
|
242
|
+
const dissolved = await this.dissolveFriendship(tx, blockerId, blockedId, blockerId, 'blocked');
|
|
243
|
+
return dissolved ?? null;
|
|
244
|
+
}
|
|
245
|
+
async listFriends(callerId, { page, limit }) {
|
|
246
|
+
const where = and(or(eq(friendship.requesterId, callerId), eq(friendship.addresseeId, callerId)), isNotNull(friendship.acceptedAt), isNull(friendship.removedAt));
|
|
247
|
+
const [rows, countRows] = await Promise.all([
|
|
248
|
+
this.drizzle.db
|
|
249
|
+
.select({
|
|
250
|
+
id: friendship.id,
|
|
251
|
+
requesterId: friendship.requesterId,
|
|
252
|
+
addresseeId: friendship.addresseeId,
|
|
253
|
+
createdAt: friendship.createdAt,
|
|
254
|
+
})
|
|
255
|
+
.from(friendship)
|
|
256
|
+
.where(where)
|
|
257
|
+
.orderBy(desc(friendship.createdAt))
|
|
258
|
+
.limit(limit)
|
|
259
|
+
.offset(pageToOffset(page, limit)),
|
|
260
|
+
this.drizzle.db.select({ n: count() }).from(friendship).where(where),
|
|
261
|
+
]);
|
|
262
|
+
const otherUserIds = rows.map((row) => row.requesterId === callerId ? row.addresseeId : row.requesterId);
|
|
263
|
+
const [players, ignores] = otherUserIds.length > 0
|
|
264
|
+
? await Promise.all([
|
|
265
|
+
this.drizzle.db
|
|
266
|
+
.select({
|
|
267
|
+
userId: player.userId,
|
|
268
|
+
displayName: player.displayName,
|
|
269
|
+
lastSeenAt: player.lastSeenAt,
|
|
270
|
+
status: player.status,
|
|
271
|
+
})
|
|
272
|
+
.from(player)
|
|
273
|
+
.where(inArray(player.userId, otherUserIds)),
|
|
274
|
+
this.drizzle.db
|
|
275
|
+
.select({ ignoredId: chatUserIgnore.ignoredId })
|
|
276
|
+
.from(chatUserIgnore)
|
|
277
|
+
.where(and(eq(chatUserIgnore.ignorerId, callerId), isNull(chatUserIgnore.removedAt), inArray(chatUserIgnore.ignoredId, otherUserIds))),
|
|
278
|
+
])
|
|
279
|
+
: [[], []];
|
|
280
|
+
const playerByUserId = new Map(players.map((p) => [p.userId, p]));
|
|
281
|
+
const ignoredIds = new Set(ignores.map((i) => i.ignoredId));
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
const items = rows.flatMap((row) => {
|
|
284
|
+
const userId = row.requesterId === callerId ? row.addresseeId : row.requesterId;
|
|
285
|
+
const targetPlayer = playerByUserId.get(userId);
|
|
286
|
+
if (!targetPlayer) {
|
|
287
|
+
logger.error({ friendshipId: row.id, userId }, 'listFriends: player row missing for friend');
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
if (targetPlayer.status === 'suspended' || targetPlayer.status === 'closed') {
|
|
291
|
+
return [];
|
|
292
|
+
}
|
|
293
|
+
const isOnline = targetPlayer.lastSeenAt !== null &&
|
|
294
|
+
now - targetPlayer.lastSeenAt.getTime() <= ONLINE_STATUS_WINDOW_MS;
|
|
295
|
+
return [
|
|
296
|
+
serializeRow({
|
|
238
297
|
userId,
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
298
|
+
friendshipId: row.id,
|
|
299
|
+
displayName: targetPlayer.displayName,
|
|
300
|
+
status: isOnline ? 'online' : 'offline',
|
|
301
|
+
lastSeenAt: targetPlayer.lastSeenAt,
|
|
302
|
+
isIgnored: ignoredIds.has(userId),
|
|
303
|
+
}, { dateFields: ['lastSeenAt'] }),
|
|
304
|
+
];
|
|
305
|
+
});
|
|
306
|
+
return { items, total: Number(countRows[0]?.n ?? 0), page, limit };
|
|
307
|
+
}
|
|
308
|
+
async acceptFriendRequest(callerId, friendshipId) {
|
|
309
|
+
const [pending] = await this.drizzle.db
|
|
310
|
+
.select({ requesterId: friendship.requesterId })
|
|
311
|
+
.from(friendship)
|
|
312
|
+
.where(and(eq(friendship.id, friendshipId), eq(friendship.addresseeId, callerId), isNull(friendship.acceptedAt), isNull(friendship.refusedAt), isNull(friendship.removedAt)));
|
|
313
|
+
if (!pending) {
|
|
314
|
+
throw new FriendRequestNotFoundError(friendshipId);
|
|
315
|
+
}
|
|
316
|
+
const blocks = await this.drizzle.db
|
|
317
|
+
.select({ blockerId: chatUserBlock.blockerId })
|
|
318
|
+
.from(chatUserBlock)
|
|
319
|
+
.where(and(isNull(chatUserBlock.removedAt), pairBlockCondition(callerId, pending.requesterId)));
|
|
320
|
+
if (blocks.length > 0) {
|
|
321
|
+
throw new FriendRequestUnavailableError();
|
|
322
|
+
}
|
|
323
|
+
const rows = await this.drizzle.db
|
|
324
|
+
.update(friendship)
|
|
325
|
+
.set({ acceptedAt: new Date() })
|
|
326
|
+
.where(and(eq(friendship.id, friendshipId), eq(friendship.addresseeId, callerId), isNull(friendship.acceptedAt), isNull(friendship.refusedAt), isNull(friendship.removedAt)))
|
|
327
|
+
.returning();
|
|
328
|
+
const updated = rows[0];
|
|
329
|
+
if (!updated) {
|
|
330
|
+
throw new FriendRequestNotFoundError(friendshipId);
|
|
331
|
+
}
|
|
332
|
+
const [callerPlayer] = await this.drizzle.db
|
|
333
|
+
.select({ displayName: player.displayName })
|
|
334
|
+
.from(player)
|
|
335
|
+
.where(eq(player.userId, callerId));
|
|
336
|
+
if (!callerPlayer) {
|
|
337
|
+
// Invariant: an authenticated caller always has a player row (see
|
|
338
|
+
// sendFriendRequest's same guard).
|
|
339
|
+
throw new Error(`Player profile missing for authenticated caller: ${callerId}`);
|
|
340
|
+
}
|
|
341
|
+
this.events.emit('social.friend_request.accepted', {
|
|
342
|
+
friendshipId: updated.id,
|
|
343
|
+
requesterId: updated.requesterId,
|
|
344
|
+
addresseeId: updated.addresseeId,
|
|
345
|
+
accepterId: callerId,
|
|
346
|
+
accepterDisplayName: callerPlayer.displayName,
|
|
347
|
+
});
|
|
348
|
+
return toFriendshipDto(updated);
|
|
349
|
+
}
|
|
350
|
+
async declineFriendRequest(callerId, friendshipId) {
|
|
351
|
+
// removedAt (not refusedAt - the two are mutually exclusive, see the
|
|
352
|
+
// friendship_removed_excludes_refused_key check constraint) frees the pair's
|
|
353
|
+
// partial-unique slot, same as cancelFriendRequest - decline and cancel both
|
|
354
|
+
// let either side send a new request afterwards.
|
|
355
|
+
const rows = await this.drizzle.db
|
|
356
|
+
.update(friendship)
|
|
357
|
+
.set({ removedAt: new Date() })
|
|
358
|
+
.where(and(eq(friendship.id, friendshipId), eq(friendship.addresseeId, callerId), isNull(friendship.acceptedAt), isNull(friendship.refusedAt), isNull(friendship.removedAt)))
|
|
359
|
+
.returning();
|
|
360
|
+
const updated = rows[0];
|
|
361
|
+
if (!updated) {
|
|
362
|
+
throw new FriendRequestNotFoundError(friendshipId);
|
|
363
|
+
}
|
|
364
|
+
this.events.emit('social.friend_request.declined', {
|
|
365
|
+
friendshipId: updated.id,
|
|
366
|
+
requesterId: updated.requesterId,
|
|
367
|
+
addresseeId: updated.addresseeId,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
async cancelFriendRequest(callerId, friendshipId) {
|
|
371
|
+
const rows = await this.drizzle.db
|
|
372
|
+
.update(friendship)
|
|
373
|
+
.set({ removedAt: new Date() })
|
|
374
|
+
.where(and(eq(friendship.id, friendshipId), eq(friendship.requesterId, callerId), isNull(friendship.acceptedAt), isNull(friendship.refusedAt), isNull(friendship.removedAt)))
|
|
375
|
+
.returning();
|
|
376
|
+
const updated = rows[0];
|
|
377
|
+
if (!updated) {
|
|
378
|
+
throw new FriendRequestNotFoundError(friendshipId);
|
|
379
|
+
}
|
|
380
|
+
this.events.emit('social.friend_request.cancelled', {
|
|
381
|
+
friendshipId: updated.id,
|
|
382
|
+
requesterId: updated.requesterId,
|
|
383
|
+
addresseeId: updated.addresseeId,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
async listFriendRequests(callerId, { direction, page, limit }) {
|
|
387
|
+
const directionColumn = direction === 'incoming' ? friendship.addresseeId : friendship.requesterId;
|
|
388
|
+
const where = and(eq(directionColumn, callerId), isNull(friendship.acceptedAt), isNull(friendship.refusedAt), isNull(friendship.removedAt));
|
|
389
|
+
const [rows, countRows] = await Promise.all([
|
|
390
|
+
this.drizzle.db
|
|
391
|
+
.select({
|
|
392
|
+
id: friendship.id,
|
|
393
|
+
requesterId: friendship.requesterId,
|
|
394
|
+
addresseeId: friendship.addresseeId,
|
|
395
|
+
createdAt: friendship.createdAt,
|
|
396
|
+
})
|
|
397
|
+
.from(friendship)
|
|
398
|
+
.where(where)
|
|
399
|
+
.orderBy(desc(friendship.createdAt))
|
|
400
|
+
.limit(limit)
|
|
401
|
+
.offset(pageToOffset(page, limit)),
|
|
402
|
+
this.drizzle.db.select({ n: count() }).from(friendship).where(where),
|
|
403
|
+
]);
|
|
404
|
+
const counterpartIds = rows.map((row) => direction === 'incoming' ? row.requesterId : row.addresseeId);
|
|
405
|
+
const [players, mutualCounts, blocks] = await Promise.all([
|
|
406
|
+
counterpartIds.length > 0
|
|
407
|
+
? this.drizzle.db
|
|
408
|
+
.select({
|
|
409
|
+
userId: player.userId,
|
|
410
|
+
displayName: player.displayName,
|
|
411
|
+
status: player.status,
|
|
412
|
+
})
|
|
413
|
+
.from(player)
|
|
414
|
+
.where(inArray(player.userId, counterpartIds))
|
|
415
|
+
: Promise.resolve([]),
|
|
416
|
+
direction === 'incoming' && counterpartIds.length > 0
|
|
417
|
+
? this.getMutualFriendsCounts(callerId, counterpartIds)
|
|
418
|
+
: Promise.resolve(new Map()),
|
|
419
|
+
counterpartIds.length > 0
|
|
420
|
+
? this.drizzle.db
|
|
421
|
+
.select({ blockerId: chatUserBlock.blockerId, blockedId: chatUserBlock.blockedId })
|
|
422
|
+
.from(chatUserBlock)
|
|
423
|
+
.where(and(isNull(chatUserBlock.removedAt), or(and(eq(chatUserBlock.blockerId, callerId), inArray(chatUserBlock.blockedId, counterpartIds)), and(inArray(chatUserBlock.blockerId, counterpartIds), eq(chatUserBlock.blockedId, callerId)))))
|
|
424
|
+
: Promise.resolve([]),
|
|
425
|
+
]);
|
|
426
|
+
const playerByUserId = new Map(players.map((p) => [p.userId, p]));
|
|
427
|
+
// Either direction hides the pair - a blocked player never appears in requests on both sides
|
|
428
|
+
const blockedCounterpartIds = new Set(blocks.map((b) => (b.blockerId === callerId ? b.blockedId : b.blockerId)));
|
|
429
|
+
const items = rows.flatMap((row) => {
|
|
430
|
+
const counterpartId = direction === 'incoming' ? row.requesterId : row.addresseeId;
|
|
431
|
+
const counterpartPlayer = playerByUserId.get(counterpartId);
|
|
432
|
+
if (!counterpartPlayer) {
|
|
433
|
+
logger.error({ friendshipId: row.id, counterpartId }, 'listFriendRequests: player row missing for counterpart');
|
|
434
|
+
return [];
|
|
435
|
+
}
|
|
436
|
+
if (counterpartPlayer.status === 'suspended' || counterpartPlayer.status === 'closed') {
|
|
437
|
+
return [];
|
|
438
|
+
}
|
|
439
|
+
if (blockedCounterpartIds.has(counterpartId)) {
|
|
440
|
+
return [];
|
|
243
441
|
}
|
|
244
|
-
return
|
|
442
|
+
return [
|
|
443
|
+
serializeRow({
|
|
444
|
+
friendshipId: row.id,
|
|
445
|
+
userId: counterpartId,
|
|
446
|
+
displayName: counterpartPlayer.displayName,
|
|
447
|
+
direction,
|
|
448
|
+
createdAt: row.createdAt,
|
|
449
|
+
mutualFriendsCount: direction === 'incoming' ? (mutualCounts.get(counterpartId) ?? 0) : null,
|
|
450
|
+
}, { dateFields: ['createdAt'] }),
|
|
451
|
+
];
|
|
245
452
|
});
|
|
453
|
+
return { items, total: Number(countRows[0]?.n ?? 0), page, limit };
|
|
454
|
+
}
|
|
455
|
+
async getMutualFriendsCounts(callerId, requesterIds) {
|
|
456
|
+
const requesterInSet = inArray(friendship.requesterId, requesterIds);
|
|
457
|
+
const callerFriends = this.drizzle.db
|
|
458
|
+
.select({
|
|
459
|
+
friendId: new SQL.Aliased(sql `CASE WHEN ${eq(friendship.requesterId, callerId)} THEN ${friendship.addresseeId} ELSE ${friendship.requesterId} END`, 'caller_friend_id'),
|
|
460
|
+
})
|
|
461
|
+
.from(friendship)
|
|
462
|
+
.where(and(or(eq(friendship.requesterId, callerId), eq(friendship.addresseeId, callerId)), isNotNull(friendship.acceptedAt), isNull(friendship.removedAt)))
|
|
463
|
+
.as('caller_friends');
|
|
464
|
+
const requesterFriends = this.drizzle.db
|
|
465
|
+
.select({
|
|
466
|
+
otherId: new SQL.Aliased(sql `CASE WHEN ${requesterInSet} THEN ${friendship.requesterId} ELSE ${friendship.addresseeId} END`, 'other_id'),
|
|
467
|
+
friendId: new SQL.Aliased(sql `CASE WHEN ${requesterInSet} THEN ${friendship.addresseeId} ELSE ${friendship.requesterId} END`, 'requester_friend_id'),
|
|
468
|
+
})
|
|
469
|
+
.from(friendship)
|
|
470
|
+
.where(and(or(inArray(friendship.requesterId, requesterIds), inArray(friendship.addresseeId, requesterIds)), isNotNull(friendship.acceptedAt), isNull(friendship.removedAt)))
|
|
471
|
+
.as('requester_friends');
|
|
472
|
+
const rows = await this.drizzle.db
|
|
473
|
+
.select({
|
|
474
|
+
requesterId: requesterFriends.otherId,
|
|
475
|
+
mutualCount: sql `count(distinct ${callerFriends.friendId})`,
|
|
476
|
+
})
|
|
477
|
+
.from(requesterFriends)
|
|
478
|
+
.innerJoin(callerFriends, eq(requesterFriends.friendId, callerFriends.friendId))
|
|
479
|
+
.groupBy(requesterFriends.otherId);
|
|
480
|
+
return new Map(rows.map((row) => [row.requesterId, Number(row.mutualCount)]));
|
|
246
481
|
}
|
|
247
482
|
}
|
|
248
483
|
function pairBlockCondition(callerId, targetUserId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social.service.js","sourceRoot":"","sources":["../../../../src/engagement/social/service/social.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"social.service.js","sourceRoot":"","sources":["../../../../src/engagement/social/service/social.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,6 +93,7 @@ declare const _default: {
|
|
|
93
93
|
} | undefined;
|
|
94
94
|
supportedLanguages?: string[] | undefined;
|
|
95
95
|
}, string>;
|
|
96
|
+
PLAYER_ACTIVITY_TRACKER: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerActivityTracker>;
|
|
96
97
|
PLAYER_TAGS: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerTags>;
|
|
97
98
|
PLAY_ELIGIBILITY: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayEligibilityPort>;
|
|
98
99
|
RAIN_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").RainCommands>;
|
|
@@ -103,6 +104,7 @@ declare const _default: {
|
|
|
103
104
|
SEND_EMAIL: import("@openora/core/contracts").Token<import("@openora/core/contracts").SendEmailPort>;
|
|
104
105
|
SESSION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SessionCommands>;
|
|
105
106
|
SMS_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").SmsAdapter>;
|
|
107
|
+
SOCIAL_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SocialCommands>;
|
|
106
108
|
TAG_EVALUATION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").TagEvaluationCommands>;
|
|
107
109
|
WALLET_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletCommands>;
|
|
108
110
|
WALLET_READER: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletReader, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/engagement/social-transfers/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/engagement/social-transfers/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,wBA0B8C"}
|
package/dist/iam/plugin.d.ts
CHANGED
|
@@ -93,6 +93,7 @@ declare const _default: {
|
|
|
93
93
|
} | undefined;
|
|
94
94
|
supportedLanguages?: string[] | undefined;
|
|
95
95
|
}, string>;
|
|
96
|
+
PLAYER_ACTIVITY_TRACKER: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerActivityTracker>;
|
|
96
97
|
PLAYER_TAGS: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerTags>;
|
|
97
98
|
PLAY_ELIGIBILITY: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayEligibilityPort>;
|
|
98
99
|
RAIN_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").RainCommands>;
|
|
@@ -103,6 +104,7 @@ declare const _default: {
|
|
|
103
104
|
SEND_EMAIL: import("@openora/core/contracts").Token<import("@openora/core/contracts").SendEmailPort>;
|
|
104
105
|
SESSION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SessionCommands>;
|
|
105
106
|
SMS_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").SmsAdapter>;
|
|
107
|
+
SOCIAL_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SocialCommands>;
|
|
106
108
|
TAG_EVALUATION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").TagEvaluationCommands>;
|
|
107
109
|
WALLET_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletCommands>;
|
|
108
110
|
WALLET_READER: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletReader, string>;
|
package/dist/iam/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,wBA2D8C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-reader.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/adapters/identity-reader.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAOvF,qBAAa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQxD,yBAAyB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"identity-reader.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/adapters/identity-reader.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAOvF,qBAAa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQxD,yBAAyB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IA4BjE,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IASrE,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IASzE,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IASzE,8BAA8B,CAClC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;CAUzB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@openora/core/server';
|
|
2
|
-
import { and, eq, isNull, lt, max, ne, or } from 'drizzle-orm';
|
|
2
|
+
import { and, eq, isNull, lt, max, ne, or, SQL } from 'drizzle-orm';
|
|
3
3
|
import { session, user } from '../schema/index.js';
|
|
4
4
|
import { player } from '@openora/core/pam/schema/profile';
|
|
5
5
|
const logger = createLogger('identity-reader');
|
|
@@ -19,7 +19,10 @@ export class IdentityReaderService {
|
|
|
19
19
|
// Join users to their most-recent session. Players with no session at all
|
|
20
20
|
// (registered but never logged in) are included via the LEFT JOIN + isNull check.
|
|
21
21
|
const lastSessionPerUser = this.drizzle.db
|
|
22
|
-
.select({
|
|
22
|
+
.select({
|
|
23
|
+
userId: session.userId,
|
|
24
|
+
lastAt: new SQL.Aliased(max(session.createdAt), 'last_at'),
|
|
25
|
+
})
|
|
23
26
|
.from(session)
|
|
24
27
|
.groupBy(session.userId)
|
|
25
28
|
.as('s');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-reader.service.js","sourceRoot":"","sources":["../../../../src/pam/identity/adapters/identity-reader.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"identity-reader.service.js","sourceRoot":"","sources":["../../../../src/pam/identity/adapters/identity-reader.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,6 +92,7 @@ declare const _default: {
|
|
|
92
92
|
} | undefined;
|
|
93
93
|
supportedLanguages?: string[] | undefined;
|
|
94
94
|
}, string>;
|
|
95
|
+
PLAYER_ACTIVITY_TRACKER: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerActivityTracker>;
|
|
95
96
|
PLAYER_TAGS: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayerTags>;
|
|
96
97
|
PLAY_ELIGIBILITY: import("@openora/core/contracts").Token<import("@openora/core/contracts").PlayEligibilityPort>;
|
|
97
98
|
RAIN_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").RainCommands>;
|
|
@@ -102,6 +103,7 @@ declare const _default: {
|
|
|
102
103
|
SEND_EMAIL: import("@openora/core/contracts").Token<import("@openora/core/contracts").SendEmailPort>;
|
|
103
104
|
SESSION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SessionCommands>;
|
|
104
105
|
SMS_ADAPTER: import("@openora/core/contracts").Token<import("@openora/core/contracts").SmsAdapter>;
|
|
106
|
+
SOCIAL_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").SocialCommands>;
|
|
105
107
|
TAG_EVALUATION_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").TagEvaluationCommands>;
|
|
106
108
|
WALLET_COMMANDS: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletCommands>;
|
|
107
109
|
WALLET_READER: import("@openora/core/contracts").Token<import("@openora/core/contracts").WalletReader, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,wBA2E8C"}
|
|
@@ -138,6 +138,35 @@ describe('PlayerService.remove (real PG)', () => {
|
|
|
138
138
|
await expect(svc.remove(randomUUID(), ACTOR_ID)).rejects.toBeInstanceOf(PlayerNotFoundError);
|
|
139
139
|
});
|
|
140
140
|
});
|
|
141
|
+
describe('PlayerService.touchLastSeen (real PG)', () => {
|
|
142
|
+
it('writes lastSeenAt when it was previously null', async () => {
|
|
143
|
+
const { svc } = makeService();
|
|
144
|
+
const seeded = await seedPlayer(randomUUID());
|
|
145
|
+
await svc.touchLastSeen(seeded.userId);
|
|
146
|
+
const row = await rowById(seeded.id);
|
|
147
|
+
expect(row?.lastSeenAt).toBeInstanceOf(Date);
|
|
148
|
+
});
|
|
149
|
+
it('writes lastSeenAt when it is stale (older than 1 minute)', async () => {
|
|
150
|
+
const { svc } = makeService();
|
|
151
|
+
const staleTimestamp = new Date(Date.now() - 5 * 60 * 1000);
|
|
152
|
+
const seeded = await seedPlayer(randomUUID(), { lastSeenAt: staleTimestamp });
|
|
153
|
+
await svc.touchLastSeen(seeded.userId);
|
|
154
|
+
const row = await rowById(seeded.id);
|
|
155
|
+
expect(row?.lastSeenAt?.getTime()).toBeGreaterThan(staleTimestamp.getTime());
|
|
156
|
+
});
|
|
157
|
+
it('skips the write (throttle) when lastSeenAt is recent', async () => {
|
|
158
|
+
const { svc } = makeService();
|
|
159
|
+
const recentTimestamp = new Date();
|
|
160
|
+
const seeded = await seedPlayer(randomUUID(), { lastSeenAt: recentTimestamp });
|
|
161
|
+
await svc.touchLastSeen(seeded.userId);
|
|
162
|
+
const row = await rowById(seeded.id);
|
|
163
|
+
expect(row?.lastSeenAt?.getTime()).toBe(recentTimestamp.getTime());
|
|
164
|
+
});
|
|
165
|
+
it('is a no-op for a nonexistent userId (never throws)', async () => {
|
|
166
|
+
const { svc } = makeService();
|
|
167
|
+
await expect(svc.touchLastSeen(randomUUID())).resolves.toBeUndefined();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
141
170
|
describe('PlayerService.getByUserId (real PG)', () => {
|
|
142
171
|
it('returns the player enriched with the identity email', async () => {
|
|
143
172
|
const { svc } = makeService();
|