Skip to content

Commit 305c539

Browse files
authored
Merge pull request #42 from utfprapps-pb/feat/perennial-forage
feat: perennial forage page
2 parents 5651769 + 2b63bd3 commit 305c539

File tree

116 files changed

+3009
-127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+3009
-127
lines changed

components.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"prefix": ""
1212
},
1313
"aliases": {
14-
"components": "@/presentation/components",
14+
"components": "src/presentation/components",
1515
"utils": "@/main/utils"
1616
}
1717
}

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"@radix-ui/react-dropdown-menu": "^2.1.2",
3030
"@radix-ui/react-label": "^2.1.0",
3131
"@radix-ui/react-popover": "^1.1.2",
32+
"@radix-ui/react-select": "^2.1.2",
3233
"@radix-ui/react-slot": "^1.1.0",
3334
"@radix-ui/react-tabs": "^1.1.1",
3435
"@radix-ui/react-tooltip": "^1.1.3",
@@ -38,8 +39,10 @@
3839
"class-variance-authority": "^0.7.0",
3940
"clsx": "^2.1.1",
4041
"cmdk": "^1.0.0",
42+
"date-fns": "^4.1.0",
4143
"lucide-react": "^0.453.0",
4244
"react": "^18.3.1",
45+
"react-day-picker": "8.10.1",
4346
"react-dom": "^18.3.1",
4447
"react-hook-form": "^7.53.0",
4548
"react-hot-toast": "^2.4.1",

pnpm-lock.yaml

Lines changed: 87 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/seed/data/index.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
export * from './perennialForages.mjs'
12
export * from './properties.mjs'
23
export * from './users.mjs'
4+
export * from './vegetables.mjs'
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { faker } from '@faker-js/faker/locale/pt_BR'
2+
3+
export const perennialForagesData = Array.from(
4+
{
5+
length: faker.number.int({
6+
min: 1,
7+
max: 100,
8+
}),
9+
},
10+
() => ({
11+
id: faker.string.uuid(),
12+
cultivation: faker.food.vegetable(),
13+
area: String(
14+
faker.number.float({
15+
min: 1,
16+
max: 1000,
17+
})
18+
),
19+
averageCost: String(
20+
faker.number.float({
21+
min: 1,
22+
max: 1000,
23+
})
24+
),
25+
usefulLife: String(
26+
faker.number.int({
27+
min: 1,
28+
max: 100,
29+
})
30+
),
31+
formation: faker.date.past(),
32+
type: faker.helpers.arrayElement(['LEASED_LAND', 'OWNED_LAND']),
33+
observation: faker.lorem.sentence({
34+
min: 10,
35+
max: 20,
36+
}),
37+
})
38+
)

scripts/seed/data/vegetables.mjs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { faker } from '@faker-js/faker/locale/pt_BR'
2+
3+
export const allVegetablesData = Array.from(
4+
{
5+
length: faker.number.int({
6+
min: 50,
7+
max: 150,
8+
}),
9+
},
10+
() => ({
11+
id: faker.string.uuid(),
12+
name: faker.food.vegetable(),
13+
})
14+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { RemoteCreate } from './remoteCreate'
2+
import { RemoteDelete } from './remoteDelete'
3+
import { RemoteGetAll } from './remoteGetAll'
4+
import { RemoteGetOne } from './remoteGetOne'
5+
import { RemoteUpdate } from './remoteUpdate'
6+
7+
export const PerennialForageData = {
8+
RemoteCreate,
9+
RemoteDelete,
10+
RemoteGetAll,
11+
RemoteGetOne,
12+
RemoteUpdate,
13+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { type IHttpClient, HttpStatusCode } from '@/data/protocols/http'
2+
import {
3+
BadRequestError,
4+
ForbiddenError,
5+
UnexpectedError,
6+
} from '@/domain/errors'
7+
8+
import type { ICreatePerennialForage } from '@/domain/useCases/perennialForage'
9+
10+
export class RemoteCreate implements ICreatePerennialForage {
11+
constructor(
12+
private readonly url: string,
13+
private readonly httpClient: IHttpClient
14+
) {}
15+
16+
execute: ICreatePerennialForage['execute'] = async ({
17+
propertyId,
18+
perennialForage,
19+
}) => {
20+
const url = this.url.replace(':propertyId', propertyId)
21+
22+
const { statusCode } = await this.httpClient.request({
23+
url,
24+
method: 'post',
25+
body: perennialForage,
26+
})
27+
28+
if (statusCode === HttpStatusCode.created) return
29+
30+
if (statusCode === HttpStatusCode.badRequest) throw new BadRequestError()
31+
32+
if (statusCode === HttpStatusCode.forbidden) {
33+
throw new ForbiddenError(
34+
'Você não tem permissão para criar uma nova forrageira perene'
35+
)
36+
}
37+
38+
throw new UnexpectedError()
39+
}
40+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { type IHttpClient, HttpStatusCode } from '@/data/protocols/http'
2+
import { UnexpectedError, NotFoundError, ForbiddenError } from '@/domain/errors'
3+
4+
import type { IDeletePerennialForage } from '@/domain/useCases/perennialForage'
5+
6+
export class RemoteDelete implements IDeletePerennialForage {
7+
constructor(
8+
private readonly url: string,
9+
private readonly httpClient: IHttpClient
10+
) {}
11+
12+
execute: IDeletePerennialForage['execute'] = async ({
13+
propertyId,
14+
perennialForageId,
15+
}) => {
16+
const url = this.url.replace(':propertyId', propertyId)
17+
18+
const { statusCode } = await this.httpClient.request({
19+
url: `${url}/${perennialForageId}`,
20+
method: 'delete',
21+
})
22+
23+
if (statusCode === HttpStatusCode.noContent) return
24+
25+
if (statusCode === HttpStatusCode.notFound) {
26+
throw new NotFoundError('Forrageira perene')
27+
}
28+
29+
if (statusCode === HttpStatusCode.forbidden) {
30+
throw new ForbiddenError(
31+
'Você não tem permissão para excluir uma forrageira perene'
32+
)
33+
}
34+
35+
throw new UnexpectedError()
36+
}
37+
}

0 commit comments

Comments
 (0)