feat(auth): add signInUseCase (test red until DI lands)
This commit is contained in:
34
packages/auth/src/application/use-cases/sign-in.use-case.ts
Normal file
34
packages/auth/src/application/use-cases/sign-in.use-case.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { AuthenticationError } from "../../entities/errors";
|
||||
import type { Cookie } from "../../entities/cookie";
|
||||
import type { Session } from "../../entities/session";
|
||||
import { authContainer } from "../../di/container";
|
||||
import { AUTH_SYMBOLS } from "../../di/symbols";
|
||||
import type { IUsersRepository } from "../repositories/users-repository.interface";
|
||||
import type { IAuthenticationService } from "../services/authentication-service.interface";
|
||||
|
||||
export async function signInUseCase(input: {
|
||||
username: string;
|
||||
password: string;
|
||||
}): Promise<{ session: Session; cookie: Cookie }> {
|
||||
const usersRepository = authContainer.get<IUsersRepository>(
|
||||
AUTH_SYMBOLS.IUsersRepository,
|
||||
);
|
||||
const authService = authContainer.get<IAuthenticationService>(
|
||||
AUTH_SYMBOLS.IAuthenticationService,
|
||||
);
|
||||
|
||||
const existingUser = await usersRepository.getUserByUsername(input.username);
|
||||
if (!existingUser) {
|
||||
throw new AuthenticationError("User does not exist");
|
||||
}
|
||||
|
||||
const validPassword = await authService.verifyPassword(
|
||||
existingUser.passwordHash,
|
||||
input.password,
|
||||
);
|
||||
if (!validPassword) {
|
||||
throw new AuthenticationError("Incorrect username or password");
|
||||
}
|
||||
|
||||
return await authService.createSession(existingUser);
|
||||
}
|
||||
Reference in New Issue
Block a user