import { config } from "@/config"; import { IAdapter, Password, RepositoryBuilder } from "@/contexts/common/domain"; import { Email, Language, Name, UniqueID } from "@shared/contexts"; import { IUserRepository, User, UserRole } from "../domain"; export const existsUserByID = async ( id: UniqueID, adapter: IAdapter, repository: RepositoryBuilder ): Promise => { return await adapter .startTransaction() .complete(async (t) => repository({ transaction: t }).existsUserWithId(id)); }; export const existsUserByName = async ( name: Name, adapter: IAdapter, repository: RepositoryBuilder ): Promise => { return await adapter .startTransaction() .complete(async (t) => repository({ transaction: t }).existsUserWithName(name)); }; export const findUserByID = async ( id: UniqueID, adapter: IAdapter, repository: RepositoryBuilder ): Promise => { return await adapter .startTransaction() .complete(async (t) => repository({ transaction: t }).getById(id)); }; export const existsUserByEmail = async ( email: Email, adapter: IAdapter, repository: RepositoryBuilder ): Promise => { return await adapter .startTransaction() .complete(async (t) => repository({ transaction: t }).existsUserWithEmail(email)); }; export const findUserByEmail = async ( email: Email, adapter: IAdapter, repository: RepositoryBuilder ): Promise => { return await adapter .startTransaction() .complete(async (t) => repository({ transaction: t }).findUserByEmail(email)); }; export const initializeAdmin = async ( adapter: IAdapter, repository: RepositoryBuilder ) => { return await adapter.startTransaction().complete(async (t) => { const adminExists = await repository({ transaction: t }).existsAdminUser(); if (!adminExists) { const admin = User.create( { name: Name.create(config.admin.name).object, email: Email.create(config.admin.email).object, password: Password.createFromPlainTextPassword(config.admin.password).object, language: Language.createFromCode(config.admin.language).object, roles: [UserRole.ROLE_ADMIN], }, UniqueID.generateNewID().object ).object; await repository({ transaction: t }).create(admin); console.log("Usuario administrador creado"); } }); };