task-managment / src / server / user / application / facade.ts
facade.ts
Raw
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<User[]> {
    return this.userService.getAllUsers(userId);
  }
  async getUserWithTaskById(
    userId: UserId,
    filter: FilterTasks
  ): Promise<UserById> {
    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<User> {
    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<User> {
    try {
      return await this.userService.getUserById(userId);
    } catch (error) {
      throw new Error("Error getting user");
    }
  }
  async createUserDb(data: User): Promise<User> {
    try {
      return await this.userService.createUserDb(data);
    } catch (error) {
      throw error;
    }
  }
  async sendInvitation(data: SendInvitation): Promise<void> {
    try {
      return await this.userService.sendInvitation(data);
    } catch (error) {
      throw error;
    }
  }
  async updateUserDb(data: User): Promise<User> {
    try {
      return await this.userService.updateUserDb(data);
    } catch (error) {
      throw error
    }
  }
  updateUserClerk(data: User): Promise<User> {
    return this.userService.updateUserClerk(data);
  }

  async banUser(userId: UserId): Promise<void> {
    try {
      await this.userService.banUser(userId);
    } catch (error) {
      throw new Error("Error banning user");
    }
  }

  async unbanUser(userId: UserId): Promise<void> {
    try {
      await this.userService.unbanUser(userId);
    } catch (error) {
      throw new Error("Error unbanning user");
    }
  }

  async deleteUserDb(userId: UserId): Promise<User> {
    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<void> {
    try {
      return await this.userService.deleteUserClerk(userId);
    } catch (error) {
      throw new Error("Error deleting user");
    }
  }
}

export const userFacadeService = new UserFacadeImpl(defaultUserService);