46 lines
1.5 KiB
TypeScript
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);
|
|
},
|
|
};
|