Skip to content

Commit 8d0d2cf

Browse files
jhonattandiegotc86
authored andcommitted
refactor: update user service to use Prisma client for database operations
1 parent 0b018cb commit 8d0d2cf

File tree

3 files changed

+53
-34
lines changed

3 files changed

+53
-34
lines changed

src/lib/utils.tests.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export const createTestUser = (overrides?: Partial<User>): User => ({
1919
name: null,
2020
password: null,
2121
isGuest: false,
22-
createdAt: new Date().toISOString(),
23-
updatedAt: new Date().toISOString(),
22+
createdAt: new Date(),
23+
updatedAt: new Date(),
2424
...overrides,
2525
});
2626

src/services/user.service.test.ts

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,24 @@ import {
66
createTestRequest,
77
createTestUser,
88
} from "@/lib/utils.tests";
9-
import * as userRepository from "@/repositories/user.repository";
109
import { getSession } from "@/session.server";
10+
import { prisma } from "@/db/prisma";
11+
import type { User } from "generated/prisma/client";
1112

1213
import * as userService from "./user.service";
1314

1415
// Mocking dependencies for unit tests
1516
vi.mock("@/session.server");
16-
vi.mock("@/repositories/user.repository");
1717
vi.mock("@/lib/security");
18+
vi.mock("@/db/prisma", () => ({
19+
prisma: {
20+
user: {
21+
update: vi.fn(),
22+
findUnique: vi.fn(),
23+
create: vi.fn(),
24+
},
25+
},
26+
}));
1827

1928
describe("user service", () => {
2029
beforeEach(() => {
@@ -29,7 +38,7 @@ describe("user service", () => {
2938
const mockSession = createMockSession(updatedUser.id); // Simulate updated user ID in session
3039

3140
// Mockeando las funciones que serán llamadas
32-
vi.mocked(userRepository.updateUser).mockResolvedValue(updatedUser);
41+
vi.mocked(prisma.user.update).mockResolvedValue(updatedUser);
3342
vi.mocked(getSession).mockResolvedValue(mockSession);
3443

3544
// Llamando al servicio y verificando el resultado
@@ -51,6 +60,10 @@ describe("user service", () => {
5160
// Mockeando las funciones que serán llamadas
5261
vi.mocked(getSession).mockResolvedValue(mockSession);
5362
vi.mocked(hashPassword).mockResolvedValue("hashed-password");
63+
vi.mocked(prisma.user.update).mockResolvedValue({
64+
...updatedUser,
65+
password: "hashed-password",
66+
});
5467

5568
// Llamando al servicio y verificando el resultado
5669
await userService.updateUser(updatedUser, request);
@@ -88,15 +101,15 @@ describe("user service", () => {
88101
});
89102

90103
// Mock repository function to return existing user
91-
vi.mocked(userRepository.getUserByEmail).mockResolvedValue(existingUser);
104+
vi.mocked(prisma.user.findUnique).mockResolvedValue(existingUser);
92105

93106
// Call service function
94107
const result = await userService.getOrCreateUser(email);
95108

96109
// Verify results
97110
expect(result).toEqual(existingUser);
98-
expect(userRepository.getUserByEmail).toHaveBeenCalledWith(email);
99-
expect(userRepository.createUser).not.toHaveBeenCalled();
111+
expect(prisma.user.findUnique).toHaveBeenCalledWith({ where: { email } });
112+
expect(prisma.user.create).not.toHaveBeenCalled();
100113
});
101114

102115
it("should create a new guest user when email is not found", async () => {
@@ -107,21 +120,22 @@ describe("user service", () => {
107120
id: 20,
108121
isGuest: true,
109122
});
110-
const createUserDTO = {
111-
email,
112-
password: null,
113-
isGuest: true,
114-
name: null,
115-
};
116123
// Mock repository functions
117-
vi.mocked(userRepository.getUserByEmail).mockResolvedValue(null);
118-
vi.mocked(userRepository.createUser).mockResolvedValue(newUser);
124+
vi.mocked(prisma.user.findUnique).mockResolvedValue(null);
125+
vi.mocked(prisma.user.create).mockResolvedValue(newUser);
119126
// Call service function
120127
const result = await userService.getOrCreateUser(email);
121128
// Verify results
122129
expect(result).toEqual(newUser);
123-
expect(userRepository.getUserByEmail).toHaveBeenCalledWith(email);
124-
expect(userRepository.createUser).toHaveBeenCalledWith(createUserDTO);
130+
expect(prisma.user.findUnique).toHaveBeenCalledWith({ where: { email } });
131+
expect(prisma.user.create).toHaveBeenCalledWith({
132+
data: {
133+
email,
134+
password: null,
135+
isGuest: true,
136+
name: null,
137+
},
138+
});
125139
});
126140
});
127141
});

src/services/user.service.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,48 @@
11
import { hashPassword } from "@/lib/security";
2-
import type { User, AuthResponse, CreateUserDTO } from "@/models/user.model";
3-
import * as userRepository from "@/repositories/user.repository";
2+
import type { Prisma, User } from "generated/prisma/client";
3+
import { prisma } from "@/db/prisma";
44
import { getSession } from "@/session.server";
55

66
export async function updateUser(
77
updatedUser: Partial<User>,
88
request: Request
9-
): Promise<AuthResponse["user"]> {
9+
): Promise<User> {
1010
const session = await getSession(request.headers.get("Cookie"));
1111
const id = session.get("userId");
1212

1313
if (!id) {
1414
throw new Error("User not authenticated");
1515
}
1616

17+
const data: Prisma.UserUpdateInput = { ...updatedUser };
18+
1719
if (updatedUser.password) {
1820
const hashedPassword = await hashPassword(updatedUser.password);
19-
updatedUser.password = hashedPassword;
21+
data.password = hashedPassword;
2022
}
2123

22-
const userData = await userRepository.updateUser(id, updatedUser);
24+
const userData = await prisma.user.update({
25+
where: { id: typeof id === "number" ? id : Number(id) },
26+
data,
27+
});
2328

2429
return userData;
2530
}
2631

2732
export async function getOrCreateUser(email: string): Promise<User> {
28-
const existingUser = await userRepository.getUserByEmail(email);
33+
let existingUser = await prisma.user.findUnique({
34+
where: { email },
35+
});
2936

3037
if (!existingUser) {
31-
const newUser: CreateUserDTO = {
32-
email,
33-
password: null,
34-
isGuest: true,
35-
name: null,
36-
};
37-
38-
const user = await userRepository.createUser(newUser);
39-
40-
return user;
38+
existingUser = await prisma.user.create({
39+
data: {
40+
email,
41+
password: null,
42+
isGuest: true,
43+
name: null,
44+
},
45+
});
4146
}
4247

4348
return existingUser;

0 commit comments

Comments
 (0)