import { FilterTasks } from "@/server/task/domain/models"; import { UserId, User, UserById, SendInvitation } from "../domain/models"; import { UserFacade, UserService } from "./service-definition"; import { defaultUserService } from "./user-service-impl"; import { generateToken, setCookie, VARIABLES_CONFIG } from "@/lib/db/util"; class UserFacadeImpl implements UserFacade { constructor(private userService: UserService) {} getAllUsers(userId: UserId): Promise { return this.userService.getAllUsers(userId); } async getUserWithTaskById( userId: UserId, filter: FilterTasks ): Promise { try { return await this.userService.getUserWithTaskById(userId, filter); } catch (error) { console.log("err user", error); throw new Error("error geting user by id"); } } async findOrCreateUser(user:User): Promise { try { const existingUser = await this.userService.findOrCreateUser(user); if (existingUser && !user?.existInDb) { await this.userService.updateUserMetadataClerk({seccionId:user?.id,existInDb:true,rol:existingUser.rol as any}) } const exp = 3600000; const payload = { id: existingUser?.id, role: user?.rol, exp:exp }; const token = generateToken(payload,exp) setCookie(VARIABLES_CONFIG.VERIFICATION_TOKEN!, token,{maxAge:exp/1000}) return existingUser; } catch (error) { console.log('error finding or creating user db',error) throw new Error("Error finding or creating user"); } } async getUserById(userId: UserId): Promise { try { return await this.userService.getUserById(userId); } catch (error) { throw new Error("Error getting user"); } } async createUserDb(data: User): Promise { try { return await this.userService.createUserDb(data); } catch (error) { throw error; } } async sendInvitation(data: SendInvitation): Promise { try { return await this.userService.sendInvitation(data); } catch (error) { throw error; } } async updateUserDb(data: User): Promise { try { return await this.userService.updateUserDb(data); } catch (error) { throw error } } updateUserClerk(data: User): Promise { return this.userService.updateUserClerk(data); } async banUser(userId: UserId): Promise { try { await this.userService.banUser(userId); } catch (error) { throw new Error("Error banning user"); } } async unbanUser(userId: UserId): Promise { try { await this.userService.unbanUser(userId); } catch (error) { throw new Error("Error unbanning user"); } } async deleteUserDb(userId: UserId): Promise { try { return await this.userService.deleteUserDb(userId); } catch (error) { console.log('error deleting user',error) throw new Error("Error deleting user"); } } async deleteUserClerk(userId: UserId): Promise { try { return await this.userService.deleteUserClerk(userId); } catch (error) { throw new Error("Error deleting user"); } } } export const userFacadeService = new UserFacadeImpl(defaultUserService);