2024-05-27 12:01:52 +00:00
|
|
|
import { config } from "@/config";
|
|
|
|
|
import { IAdapter, Password, RepositoryBuilder } from "@/contexts/common/domain";
|
2024-06-10 17:16:39 +00:00
|
|
|
import { Email, Language, Name, UniqueID } from "@shared/contexts";
|
2024-05-27 12:01:52 +00:00
|
|
|
import { IUserRepository, User, UserRole } from "../domain";
|
2024-05-18 16:51:31 +00:00
|
|
|
|
|
|
|
|
export const existsUserByID = async (
|
|
|
|
|
id: UniqueID,
|
|
|
|
|
adapter: IAdapter,
|
2024-05-27 12:01:52 +00:00
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
2024-05-18 16:51:31 +00:00
|
|
|
): Promise<boolean> => {
|
|
|
|
|
return await adapter
|
|
|
|
|
.startTransaction()
|
|
|
|
|
.complete(async (t) => repository({ transaction: t }).existsUserWithId(id));
|
|
|
|
|
};
|
|
|
|
|
|
2024-05-20 09:01:40 +00:00
|
|
|
export const existsUserByName = async (
|
|
|
|
|
name: Name,
|
|
|
|
|
adapter: IAdapter,
|
2024-05-27 12:01:52 +00:00
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
2024-05-20 09:01:40 +00:00
|
|
|
): Promise<boolean> => {
|
|
|
|
|
return await adapter
|
|
|
|
|
.startTransaction()
|
2024-05-27 12:01:52 +00:00
|
|
|
.complete(async (t) => repository({ transaction: t }).existsUserWithName(name));
|
2024-05-20 09:01:40 +00:00
|
|
|
};
|
|
|
|
|
|
2024-05-18 16:51:31 +00:00
|
|
|
export const findUserByID = async (
|
|
|
|
|
id: UniqueID,
|
|
|
|
|
adapter: IAdapter,
|
2024-05-27 12:01:52 +00:00
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
2024-05-18 16:51:31 +00:00
|
|
|
): Promise<User | null> => {
|
|
|
|
|
return await adapter
|
|
|
|
|
.startTransaction()
|
|
|
|
|
.complete(async (t) => repository({ transaction: t }).getById(id));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const existsUserByEmail = async (
|
|
|
|
|
email: Email,
|
|
|
|
|
adapter: IAdapter,
|
2024-05-27 12:01:52 +00:00
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
2024-05-18 16:51:31 +00:00
|
|
|
): Promise<boolean> => {
|
|
|
|
|
return await adapter
|
|
|
|
|
.startTransaction()
|
2024-05-27 12:01:52 +00:00
|
|
|
.complete(async (t) => repository({ transaction: t }).existsUserWithEmail(email));
|
2024-05-18 16:51:31 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const findUserByEmail = async (
|
|
|
|
|
email: Email,
|
|
|
|
|
adapter: IAdapter,
|
2024-05-27 12:01:52 +00:00
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
2024-05-18 16:51:31 +00:00
|
|
|
): Promise<User | null> => {
|
|
|
|
|
return await adapter
|
|
|
|
|
.startTransaction()
|
2024-05-27 12:01:52 +00:00
|
|
|
.complete(async (t) => repository({ transaction: t }).findUserByEmail(email));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const initializeAdmin = async (
|
|
|
|
|
adapter: IAdapter,
|
|
|
|
|
repository: RepositoryBuilder<IUserRepository>
|
|
|
|
|
) => {
|
|
|
|
|
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,
|
2024-06-10 17:16:39 +00:00
|
|
|
language: Language.createFromCode(config.admin.language).object,
|
2024-05-27 12:01:52 +00:00
|
|
|
roles: [UserRole.ROLE_ADMIN],
|
|
|
|
|
},
|
|
|
|
|
UniqueID.generateNewID().object
|
|
|
|
|
).object;
|
|
|
|
|
await repository({ transaction: t }).create(admin);
|
|
|
|
|
console.log("Usuario administrador creado");
|
|
|
|
|
}
|
|
|
|
|
});
|
2024-05-18 16:51:31 +00:00
|
|
|
};
|