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 { return this.userRepository.getAll(userId) } getUserWithTaskById(userId: UserId, filter: FilterTasks): Promise { return this.userRepository.getWithTaskById(userId,filter) } getUserById(userId: UserId): Promise { return this.userRepository.getBy({id:userId.value}) } async findOrCreateUser(user:User):Promise{ 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 { return this.userRepository.sendInvitation(data) } createUserDb(data: User): Promise { return this.userRepository.createDb(data) } updateUserClerk(data: Partial): Promise { return this.userRepository.updateClerk(data) } updateUserDb(data: User): Promise { return this.userRepository.updateDb(data) } deleteUserClerk(userId: UserId): Promise { return this.userRepository.deleteClerk(userId) } deleteUserDb(userId: UserId): Promise { return this.userRepository.deleteDb(userId) } banUser(userId: UserId): Promise { return this.userRepository.banUser(userId) } unbanUser(userId: UserId): Promise { return this.userRepository.unbanUser(userId) } updateUserMetadataClerk(data: UpdateUserMetadata): Promise { return this.userRepository.updateUserMetadataClerk(data) } } export const defaultUserService = new UserServiceImpl(defaultUserRepository)