task-managment / src / server / user / application / user-service-impl.ts
user-service-impl.ts
Raw
import { FilterTasks } from "@/server/task/domain/models";
import { UserId, User, UserById, SendInvitation, UpdateUserMetadata } from "../domain/models";
import { UserRepository } from "../domain/repositories";
import { UserService } from "./service-definition";
import { defaultUserRepository } from "../infrastructure/repositories-impl";



class UserServiceImpl implements UserService {

    constructor(
        private userRepository:UserRepository
    ){

    }

    getAllUsers(userId: UserId): Promise<User[]> {
        return this.userRepository.getAll(userId)
    }
    getUserWithTaskById(userId: UserId, filter: FilterTasks): Promise<UserById> {
        return this.userRepository.getWithTaskById(userId,filter)
    }

    getUserById(userId: UserId): Promise<User> {
        return this.userRepository.getBy({id:userId.value})
    }

    async findOrCreateUser(user:User):Promise<User>{
        const existingUserDb = await this.userRepository.getBy({isDeleted:false,email:user.email})
        if(existingUserDb){
            return existingUserDb
        }
        const created= await this.userRepository.createDb(user);
        return created

    }

    sendInvitation(data: SendInvitation): Promise<void> {
        return this.userRepository.sendInvitation(data)
    }
    createUserDb(data: User): Promise<User> {
        return this.userRepository.createDb(data)
    }
    updateUserClerk(data: Partial<User>): Promise<User> {
        return this.userRepository.updateClerk(data)
    }
    updateUserDb(data: User): Promise<User> {
        return this.userRepository.updateDb(data)
    }
    deleteUserClerk(userId: UserId): Promise<void> {
        return this.userRepository.deleteClerk(userId)
    }
    deleteUserDb(userId: UserId): Promise<User> {
        return this.userRepository.deleteDb(userId)
    }

    banUser(userId: UserId): Promise<void> {
        return this.userRepository.banUser(userId)
    }
    unbanUser(userId: UserId): Promise<void> {
        return this.userRepository.unbanUser(userId)
    }
    updateUserMetadataClerk(data: UpdateUserMetadata): Promise<void> {
        return this.userRepository.updateUserMetadataClerk(data)
    }
  
}

export const defaultUserService = new UserServiceImpl(defaultUserRepository)