Skip to content

Commit 7f97e79

Browse files
committed
fix: directly look up user
1 parent eb20006 commit 7f97e79

2 files changed

Lines changed: 35 additions & 17 deletions

File tree

apps/slack/lambda/lib/routes/events/service.test.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,19 @@ describe('EventsService', () => {
5454
getMany: stub().resolves({ items: [{ default: true, code: 'de-DE' }] }),
5555
},
5656
user: {
57-
getManyForSpace: stub().resolves({
58-
items: [
59-
{ sys: { id: 'publisher' }, firstName: 'Pub', lastName: 'Lisher' },
60-
{ sys: { id: 'creator' }, firstName: 'Cre', lastName: 'Ator' },
61-
],
57+
getForSpace: stub().callsFake(({ userId }) => {
58+
const users: Record<
59+
string,
60+
{ sys: { id: string }; firstName: string; lastName: string }
61+
> = {
62+
publisher: { sys: { id: 'publisher' }, firstName: 'Pub', lastName: 'Lisher' },
63+
creator: { sys: { id: 'creator' }, firstName: 'Cre', lastName: 'Ator' },
64+
};
65+
const user = users[userId];
66+
if (!user) {
67+
return Promise.reject(new Error('not found'));
68+
}
69+
return Promise.resolve(user);
6270
}),
6371
},
6472
space: {
@@ -260,6 +268,22 @@ describe('EventsService', () => {
260268
);
261269
assert.deepEqual(resolvedEntity, expectedValue);
262270
});
271+
it('falls back to the raw actor ID when the user lookup fails', async () => {
272+
const unknownActorEventBody = {
273+
...eventBody,
274+
sys: { ...eventBody.sys, createdBy: { sys: { id: 'unknown-user' } } },
275+
} as unknown as EventEntity;
276+
277+
const resolvedEntity = await instance.getResolvedEntity(
278+
'space-id',
279+
'env-id',
280+
'contentful',
281+
SlackAppEventKey.CREATED,
282+
unknownActorEventBody
283+
);
284+
assert.equal(resolvedEntity?.actorId, 'unknown-user');
285+
assert.equal(resolvedEntity?.actorName, 'unknown-user');
286+
});
263287
it('returns the expected resolved values for DELETE', async () => {
264288
const expectedValue = {
265289
actorId: undefined,

apps/slack/lambda/lib/routes/events/service.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,18 @@ export class EventsService {
4141

4242
private getUserName = async (
4343
cmaClient: PlainClientAPI,
44+
spaceId: string,
4445
userId?: string
4546
): Promise<string | undefined> => {
4647
if (!userId) {
4748
return undefined;
4849
}
4950
try {
50-
// Try to get user from space users first
51-
const spaceUsers = await cmaClient.user.getManyForSpace({});
52-
const user = spaceUsers.items.find((u) => u.sys.id === userId);
53-
54-
if (user) {
55-
return user.firstName && user.lastName
56-
? `${user.firstName} ${user.lastName}`
57-
: user.email || userId;
58-
}
51+
const user = await cmaClient.user.getForSpace({ spaceId, userId });
5952

60-
// If not found in space users, return the user ID as fallback
61-
return userId;
53+
return user.firstName && user.lastName
54+
? `${user.firstName} ${user.lastName}`
55+
: user.email || userId;
6256
} catch (e) {
6357
return userId; // fallback to user ID if we can't get user details
6458
}
@@ -216,7 +210,7 @@ export class EventsService {
216210

217211
// Fetch additional information
218212
const [actorName, spaceName] = await Promise.all([
219-
this.getUserName(cmaClient, actorId),
213+
this.getUserName(cmaClient, spaceId, actorId),
220214
this.getSpaceName(cmaClient, spaceId),
221215
]);
222216

0 commit comments

Comments
 (0)