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)