Files
stream.graff.tech-new/server/src/services/auth/login.ts
T

59 lines
1.5 KiB
TypeScript

import { userService } from "./user";
import { sessionService } from "./session";
import type { LoginResult, SessionMetadata } from "./types";
/**
* Сервис авторизации
*/
export const loginService = {
/**
* Авторизация пользователя
*/
async login(
email: string,
password: string,
metadata: SessionMetadata
): Promise<LoginResult | null> {
// Найти пользователя по email
const user = await userService.findByEmail(email);
if (!user) {
return null;
}
// Проверить пароль
const isPasswordValid = await userService.verifyPassword(
password,
user.password
);
if (!isPasswordValid) {
return null;
}
// Создать новую сессию
const { sessionId, accessToken } = await sessionService.create(
user.id,
metadata
);
// Получить пользователя с полными данными (филиал и компания)
const userWithRelations = await userService.findByIdWithRelations(user.id);
// Вычислить дату истечения токена
const expiresAt = new Date();
expiresAt.setDate(expiresAt.getDate() + 7);
return {
user: userWithRelations
? userService.sanitizeWithRelations(userWithRelations)
: userService.sanitize(user),
session: {
id: sessionId,
token: accessToken,
expiresAt: expiresAt.toISOString(),
},
};
},
};