import { config } from "@/config"; import { IAdapter, Password, RepositoryBuilder } from "@/contexts/common/domain"; import { Dealer, IDealerRepository } from "@/contexts/sales/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"); } }); }; export const initializeSampleUser = async ( adapter: IAdapter, repository: RepositoryBuilder ) => { return await adapter.startTransaction().complete(async (t) => { const email = Email.create(config.sample_dealer.email).object; const userExists = await repository({ transaction: t }).existsUserWithEmail(email); if (!userExists) { const user = User.create( { name: Name.create(config.sample_dealer.name).object, email, password: Password.createFromPlainTextPassword(config.sample_dealer.password).object, language: Language.createFromCode(config.sample_dealer.language).object, roles: [UserRole.ROLE_USER], }, UniqueID.generateNewID().object ).object; await repository({ transaction: t }).create(user); console.log("Usuario creado"); return user; } }); }; export const initializeSampleDealer = async ( user: User, adapter: IAdapter, repository: RepositoryBuilder ) => { return await adapter.startTransaction().complete(async (t) => { const dealerExists = await repository({ transaction: t }).getByUserId(user.id); if (!dealerExists) { const dealer = Dealer.create( { name: Name.create(config.sample_dealer.name).object, user_id: user.id, }, UniqueID.generateNewID().object ).object; await repository({ transaction: t }).create(dealer); console.log("Dealer creado"); } }); };