import { ReadStream } from 'fs' import { inject, injectable } from 'inversify' import { Repository } from 'typeorm' import TYPES from '../../Bootstrap/Types' import { User } from '../../Domain/User/User' import { UserRepositoryInterface } from '../../Domain/User/UserRepositoryInterface' @injectable() export class MySQLUserRepository implements UserRepositoryInterface { constructor( @inject(TYPES.ORMUserRepository) private ormRepository: Repository, ) {} async save(user: User): Promise { return this.ormRepository.save(user) } async remove(user: User): Promise { return this.ormRepository.remove(user) } async streamAll(): Promise { return this.ormRepository.createQueryBuilder('user').stream() } async streamTeam(memberEmail?: string): Promise { const queryBuilder = this.ormRepository.createQueryBuilder() if (memberEmail !== undefined) { queryBuilder.where('email = :email', { email: memberEmail }) } else { queryBuilder.where('email LIKE :email', { email: '%@standardnotes.com' }) } return queryBuilder.stream() } async findOneByUuid(uuid: string): Promise { return this.ormRepository .createQueryBuilder('user') .where('user.uuid = :uuid', { uuid }) .cache(`user_uuid_${uuid}`, 60000) .getOne() } async findOneByEmail(email: string): Promise { return this.ormRepository .createQueryBuilder('user') .where('user.email = :email', { email }) .cache(`user_email_${email}`, 60000) .getOne() } }