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

46 lines
1.5 KiB
TypeScript

import { userService } from "./user";
import type { RegisterData, UserResponse } from "./types";
// Роль по умолчанию для новых пользователей
const DEFAULT_ROLE_NAME = "manager" as const;
/**
* Сервис регистрации
*/
export const registerService = {
/**
* Регистрация нового пользователя
* @param data - данные для регистрации
* @param callerRole - роль вызывающего пользователя (если авторизован)
*/
async register(
data: RegisterData,
callerRole?: string
): Promise<UserResponse | null> {
// Проверить, существует ли пользователь
const existingUser = await userService.findByEmail(data.email);
if (existingUser) {
return null;
}
// Захешировать пароль
const hashedPassword = await userService.hashPassword(data.password);
// Определить роль для нового пользователя
// Только администраторы могут указывать кастомную роль
const role =
callerRole === "admin" && data.role ? data.role : DEFAULT_ROLE_NAME;
// Создать пользователя
const newUser = await userService.create({
email: data.email,
password: hashedPassword,
fullName: data.fullName,
role,
});
return userService.sanitize(newUser);
},
};