import { uuid } from 'uuidv4'; import IUsersRepository from '@domains/users/interfaces/IUsersRepository'; import ICreateUserDTO from '@domains/users/dtos/ICreateUserDTO'; import User from '@domains/users/infra/typeorm/entities/User'; import IFindProvidersDTO from '@domains/users/dtos/IFindProvidersDTO'; export default class FakeUsersRepository implements IUsersRepository { private users: User[] = []; public async create(userData: ICreateUserDTO): Promise<User> { const user = Object.assign(new User(), { id: uuid(), ...userData, }); this.users.push(user); return user; } public async findByEmail(email: User['email']): Promise<User | undefined> { const userFound = this.users.find(user => user.email === email); return userFound; } public async findById(id: User['id']): Promise<User | undefined> { const userFound = this.users.find(user => user.id === id); return userFound; } public async findProviders({ exceptUserId, }: IFindProvidersDTO): Promise<User[]> { const providers = this.users.filter( user => user.id !== exceptUserId && user.is_provider, ); return providers; } async save(user: User): Promise<User> { const userIndex = this.users.findIndex(findUser => findUser.id === user.id); this.users[userIndex] = user; return user; } }