Skip to content

Commit e5847f0

Browse files
:bug (fix-posthog): re-enable email identifier for analytics(#1279)
* :bug (fix-posthog): re-enable email identifier for analytics * feat(user): add getProfile method and update userId handling in UserProvider
1 parent a09d6f7 commit e5847f0

File tree

10 files changed

+168
-150
lines changed

10 files changed

+168
-150
lines changed

packages/backend/src/user/controllers/user.controller.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ describe("UserController", () => {
2828

2929
expect(response.body).toEqual(
3030
expect.objectContaining({
31+
userId: user._id.toString(),
3132
firstName: user.firstName,
3233
lastName: user.lastName,
3334
name: user.name,

packages/backend/src/user/services/user.service.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
setupTestDb,
1212
} from "@backend/__tests__/helpers/mock.db.setup";
1313
import calendarService from "@backend/calendar/services/calendar.service";
14+
import { UserError } from "@backend/common/errors/user/user.errors";
1415
import { initSupertokens } from "@backend/common/middleware/supertokens.middleware";
1516
import mongoService from "@backend/common/services/mongo.service";
1617
import eventService from "@backend/event/services/event.service";
@@ -45,6 +46,35 @@ describe("UserService", () => {
4546
});
4647
});
4748

49+
describe("getProfile", () => {
50+
it("returns the user profile for a valid user ID", async () => {
51+
const user = await UserDriver.createUser();
52+
const userId = user._id;
53+
54+
const profile = await userService.getProfile(userId);
55+
56+
expect(profile).toEqual(
57+
expect.objectContaining({
58+
userId: userId.toString(),
59+
picture: user.google.picture,
60+
firstName: user.firstName,
61+
lastName: user.lastName,
62+
name: user.name,
63+
email: user.email,
64+
locale: user.locale,
65+
}),
66+
);
67+
});
68+
69+
it("throws UserNotFound error when user does not exist", async () => {
70+
const nonExistentId = mongoService.objectId();
71+
72+
await expect(userService.getProfile(nonExistentId)).rejects.toThrow(
73+
UserError.UserNotFound.description,
74+
);
75+
});
76+
});
77+
4878
describe("deleteCompassDataForUser", () => {
4979
it("removes all compass data and deletes the user", async () => {
5080
const user = await UserDriver.createUser();

packages/backend/src/user/services/user.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class UserService {
5858
{
5959
session,
6060
projection: {
61+
userId: { $toString: "$_id" },
6162
picture: "$google.picture",
6263
firstName: 1,
6364
lastName: 1,
@@ -70,7 +71,7 @@ class UserService {
7071

7172
if (!user) throw error(UserError.UserNotFound, "Failed to find user");
7273

73-
return { ...user, picture: Reflect.get(user, "picture") };
74+
return user as unknown as UserProfile;
7475
};
7576

7677
deleteCompassDataForUser = async (userId: string, gcalAccess = true) => {

packages/core/src/types/user.types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SupertokensUserMetadata from "supertokens-node/recipe/usermetadata";
2+
import { WithCompassId } from "./event.types";
23

34
export interface Schema_User {
45
email: string;
@@ -27,8 +28,9 @@ export interface UserMetadata extends SupertokensUserMetadata.JSONObject {
2728

2829
export interface UserProfile
2930
extends Pick<
30-
Schema_User,
31+
WithCompassId<Schema_User>,
3132
"firstName" | "lastName" | "name" | "email" | "locale"
3233
> {
3334
picture: string;
35+
userId: string;
3436
}

packages/web/src/__tests__/__mocks__/server/mock.handlers.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,19 @@ export const globalHandlers = [
5252
rest.options(`${ENV_WEB.API_BASEURL}/event`, (_req, res, ctx) => {
5353
return res(ctx.json([]));
5454
}),
55+
rest.get(`${ENV_WEB.API_BASEURL}/user/profile`, (_req, res, ctx) => {
56+
return res(
57+
ctx.status(Status.OK),
58+
ctx.json({
59+
userId: "test-user-123",
60+
61+
name: faker.person.fullName(),
62+
firstName: faker.person.firstName(),
63+
lastName: faker.person.lastName(),
64+
photo: faker.image.avatar(),
65+
}),
66+
);
67+
}),
5568
rest.get(`${ENV_WEB.API_BASEURL}/user/metadata`, (_req, res, ctx) => {
5669
return res(ctx.status(Status.OK), ctx.json({ skipOnboarding: false }));
5770
}),

0 commit comments

Comments
 (0)