back/src/infra/repository/database/AquariumRepositoryDatabase.ts
import { Aquarium, Indicator } from '../../../domain/entity'import { AquariumRepository } from 'domain/repository'import { Connection } from 'infra/database' export class AquariumRepositoryDatabase implements AquariumRepository { constructor (readonly connection: Connection) {} async remove (idAquarium: number): Promise<void> { await this.connection.query('DELETE FROM aquariums WHERE id = $1', [idAquarium]) } async save (aquarium: Aquarium): Promise<Aquarium> { const data = await this.connection.query('INSERT INTO aquariums (name) VALUES ($1) RETURNING *', [aquarium.name]) return new Aquarium(data[0].id, data[0].name) } async list (): Promise<Aquarium[]> { const aquariumsData = await this.connection.query('SELECT * FROM aquariums', []) const aquariums: Aquarium[] = [] for (const aquariumData of aquariumsData) { aquariums.push(new Aquarium(aquariumData.id, aquariumData.name)) } return aquariums } async get (idAquarium: number): Promise<Aquarium> { const [aquariumData] = await this.connection.query('SELECT * FROM aquariums WHERE id = $1', [idAquarium]) const indicatorsWithAquarium = await this.connection.query('SELECT * FROM indicators WHERE aquarium_id = $1', [idAquarium]) const aquarium = new Aquarium(aquariumData.id, aquariumData.name) indicatorsWithAquarium.forEach((indicator: Indicator) => { aquarium.indicators.push(indicator) }) return aquarium } async clean (): Promise<void> { await this.connection.query('DELETE FROM aquariums', []) }}