import { Injectable } from '@nestjs/common' import { isEmpty, omit } from 'lodash' import { CompetitionCompetitor } from '../../../models' import { HttpService } from '../../../services/http' import { BaseRepository } from '../../base.repository' const ATTRIBUTES = ` id competition_id patient_id patient_name patient_photo_url score position created_at is_subscriber history(order_by: {created_at: desc}) { id competitor_id done_at score value position created_at } patient { id name document_number cell_phone photo_url } ` const INSERT = ` mutation insert($object: competition_competitor_insert_input!) { object: insert_competition_competitor_one(object: $object) { ${ATTRIBUTES} } } ` const GET = ` query get($id: uuid!) { result: competition_competitor(where: {id: {_eq: $id}}) { ${ATTRIBUTES} } } ` const GET_ALL_BY_COMPETITION = ` query getAll($competitionId: uuid!) { result: competition_competitor(where: {competition_id: {_eq: $competitionId}}) { ${ATTRIBUTES} } } ` const FIND_ALL_BY_PATIENT = ` query get($patientId: String!) { result: competition_competitor(where: {patient_id: {_eq: $patientId}}) { ${ATTRIBUTES} } } ` @Injectable() export class CompetitionCompetitorRepository extends BaseRepository { constructor(protected readonly httpService: HttpService) { super(httpService, 'competition_competitor') } async create(object: CompetitionCompetitor): Promise { const qv = { object: omit(object.toPlain(), ['history']) } const { data } = await this.fetchGraphQL({ body: { query: INSERT, variables: qv }, }) return CompetitionCompetitor.toInstance({ ...object.toPlain(), ...data.object }) } async get(id: string): Promise { const { data } = await this.fetchGraphQL({ body: { query: GET, variables: { id } }, }) return isEmpty(data.result) ? null : CompetitionCompetitor.toInstance(data.result[0]) } async getAllByCompetition(competitionId: string): Promise { const { data } = await this.fetchGraphQL({ body: { query: GET_ALL_BY_COMPETITION, variables: { competitionId } }, }) return isEmpty(data.result) ? [] : data.result.map(row => CompetitionCompetitor.toInstance(row)) } async findAllByPatient(patientId: string): Promise { const { data } = await this.fetchGraphQL({ body: { query: FIND_ALL_BY_PATIENT, variables: { patientId } }, }) return isEmpty(data.result) ? [] : data.result.map(row => CompetitionCompetitor.toInstance(row)) } }