Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ export class RemoteGetAnimalsUseCase implements GetAnimalsUseCase {
sort,
}) => {
const mapApiProperties: MapApiProperties<AnimalModel, AnimalApiResponse> = {
name: 'name',
breed: 'breed',
id: 'id',
name: 'identifier',
breed: 'breed.breedName',
}

const url = this.url.replace(':propertyId', String(propertyId))
Expand All @@ -48,8 +49,8 @@ export class RemoteGetAnimalsUseCase implements GetAnimalsUseCase {
return {
resources: body.content.map((item) => ({
id: item.id,
name: item.name,
breed: item.breed,
name: item.identifier,
breed: item.breed.breedName,
})),
totalPages: Math.ceil(body.numberOfElements / body.pageable.pageSize),
}
Expand Down
43 changes: 41 additions & 2 deletions src/app/modules/animals/domain/models/animals-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,44 @@ export type AnimalModel = WithId<{
breed: string
}>

// todo: refactor to be consistent with Api response
export type AnimalApiResponse = AnimalModel
// TODO: arrumar campos necessários para cada implementação dos campos seguintes a tela de animal
export type AnimalApiResponse = {
id: string
/*
property: {
id: number,
ocupationArea: ,
totalArea: 389.16,
soilMap: null,
latitude: 365,
longitude: 365,
leased: true,
user: {
id: 2,
username: fulano2@test.com,
displayName: Fulano 2,
cpf: 222.222.222-22,
county: null,
cep: 2222.2222,
street: Rua teste2,
houseNumber: 22,
phone: 2222,
professionalRegister: 2222,
graduationYear: 2002
}
},
*/
// type: string,
identifier: string
breed: {
id: number
breedName: string
}
/*
bornDate: Date,
bornWeight: number,
previousWeight: number,
currentWeight: number,
ecc: number
*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type { ListApiResponse } from '@/core/domain/types'

export function makeRemoteGetAnimalsUseCase(): GetAnimalsUseCase {
return new RemoteGetAnimalsUseCase(
// TODO: refatoração do back-end pra restrição por request mapping
'properties/:propertyId/animals',
makeApiHttpClient<
AnimalModel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
NotFoundError,
UnexpectedError,
} from '@/core/domain/errors'
import { BreedApiModel, BreedModel } from '@/core/domain/models/breed-model'
import { Option } from '@/core/domain/types'

import type {
BreedApiResponse,

Check failure on line 12 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

'BreedApiResponse' is defined but never used
BreedModel,
} from '@/core/domain/models/breeds-model'
import type { ListApiResponse, MapApiProperties } from '@/core/domain/types'

Check failure on line 15 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

'MapApiProperties' is defined but never used

Check failure on line 15 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

'ListApiResponse' is defined but never used
import type { GetAllBreedsUseCase } from '@/core/domain/use-cases/breeds-use-cases'

export class RemoteGetAllBreedsUseCase implements GetAllBreedsUseCase {
Expand All @@ -18,32 +20,23 @@
private readonly url: string,
private readonly httpClient: HttpClient<
BreedModel,
BreedApiResponse,
ListApiResponse<BreedApiResponse[]>
BreedApiModel,
BreedApiModel[]
>
) {}

execute: GetAllBreedsUseCase['execute'] = async ({ filters }) => {
const mapApiProperties: MapApiProperties<BreedModel, BreedApiResponse> = {
id: 'id',
name: 'breedName',
}

execute: GetAllBreedsUseCase['execute'] = async () => {
const { statusCode, body } = await this.httpClient.request({
url: `${this.url}/search`,
method: 'post',
filters,
mapApiProperties,
url: this.url,
method: 'get',
})

if (statusCode === HttpStatusCode.ok && !!body) {
return {
resources: body.content.map((item) => ({
id: item.id,
name: item.breedName,
})),
totalPages: Math.ceil(body.numberOfElements / body.pageable.pageSize),
}
let response: Option[] = [];

Check failure on line 35 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

Delete `;`

Check failure on line 35 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

'response' is never reassigned. Use 'const' instead
body.forEach((item) => {
response.push({label: item.breedName, value: item.id.toString()} as Option);

Check failure on line 37 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

Replace `label:·item.breedName,·value:·item.id.toString()}·as·Option);` with `⏎··········label:·item.breedName,⏎··········value:·item.id.toString(),⏎········}·as·Option)`
});

Check failure on line 38 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

Delete `;`
return response;

Check failure on line 39 in src/core/data/use-cases/breeds-use-cases/remote-get-all-breeds-use-case.ts

View workflow job for this annotation

GitHub Actions / setup

Delete `;`
}

if (statusCode === HttpStatusCode.forbidden) {
Expand Down
9 changes: 9 additions & 0 deletions src/core/domain/models/breed-model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export type BreedModel = {
id: string,

Check failure on line 2 in src/core/domain/models/breed-model.ts

View workflow job for this annotation

GitHub Actions / setup

Replace `··id:·string,` with `id:·string`
name: string,

Check failure on line 3 in src/core/domain/models/breed-model.ts

View workflow job for this annotation

GitHub Actions / setup

Replace `··name:·string,` with `name:·string`
}

export type BreedApiModel = {
id: string,
breedName: string,
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
import { RemoteGetAllBreedsUseCase } from '@/core/data/use-cases/breeds-use-cases'
import { makeApiHttpClient } from '@/core/main/factories/http'

import type {
BreedApiResponse,
BreedModel,
} from '@/core/domain/models/breeds-model'
import type { ListApiResponse } from '@/core/domain/types'
import type { GetAllBreedsUseCase } from '@/core/domain/use-cases/breeds-use-cases'
import { BreedModel } from '@/core/domain/models/breed-model'

export function makeRemoteGetAllBreedsUseCase(): GetAllBreedsUseCase {
return new RemoteGetAllBreedsUseCase(
'breeds',
makeApiHttpClient<
BreedModel,
BreedApiResponse,
ListApiResponse<BreedApiResponse[]>
>()
makeApiHttpClient<BreedModel, BreedModel, BreedModel[]>()
)
}
23 changes: 4 additions & 19 deletions src/core/presentation/hooks/queries/all-breeds-query.hook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,8 @@ import toast from 'react-hot-toast'
import { makeRemoteGetAllBreedsUseCase } from '@/core/main/factories/use-cases/breeds-use-cases'
import { toOption } from '@/core/utils/object/to-option'

import type { BreedModel } from '@/core/domain/models/breeds-model'
import type { Filters } from '@/core/domain/types'

type Props = {
filters: Filters<BreedModel>
}

export function useAllBreedsQuery({ filters }: Props) {
const getAllBreeds = makeRemoteGetAllBreedsUseCase()
export function useAllBreedsQuery(search: string) {
const getAllBreedsUseCase = makeRemoteGetAllBreedsUseCase()

const {
data,
Expand All @@ -23,16 +16,8 @@ export function useAllBreedsQuery({ filters }: Props) {
isLoading,
refetch: refetchAllBreeds,
} = useQuery({
queryKey: ['all-breeds', { filters }],
queryFn: () =>
getAllBreeds.execute({
filters,
pagination: {
page: 0,
perPage: 30,
},
}),
enabled: !!filters,
queryKey: ['allBreeds', search],
queryFn: () => getAllBreedsUseCase.execute(search),
})

useEffect(() => {
Expand Down