Skip to content

Commit dee0d1a

Browse files
committed
Scheduling_route
1 parent 20c1a7e commit dee0d1a

File tree

4 files changed

+88
-3
lines changed

4 files changed

+88
-3
lines changed

src/pages/api/users/[username]/blocked-dates.api.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default async function handle(
4343

4444
const blockedDatesRaw: Array<{ date: number }> = await prisma.$queryRaw`
4545
SELECT
46-
EXTRACT(DAY FROM S.date) date,
46+
EXTRACT(DAY FROM S.date) AS date,
4747
COUNT(S.date) AS amount,
4848
((UTI.time_end_in_minutes - UTI.time_start_in_minutes) / 60) AS size
4949
FROM schedulings S
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { prisma } from '@/lib/prisma'
2+
import { z } from 'zod'
3+
import { NextApiRequest, NextApiResponse } from 'next'
4+
import dayjs from 'dayjs'
5+
6+
export default async function handle(
7+
req: NextApiRequest,
8+
res: NextApiResponse,
9+
) {
10+
if (req.method !== 'POST') {
11+
return res.status(405).end()
12+
}
13+
14+
const username = String(req.query.username)
15+
16+
const user = await prisma.user.findUnique({
17+
where: {
18+
username,
19+
},
20+
})
21+
22+
if (!user) {
23+
return res.status(400).json({ message: 'User does not exist.' })
24+
}
25+
26+
const createSchedulingBody = z.object({
27+
name: z.string(),
28+
email: z.string().email(),
29+
observations: z.string(),
30+
date: z.coerce.date(),
31+
})
32+
33+
const { name, email, observations, date } = createSchedulingBody.parse(
34+
req.body,
35+
)
36+
37+
const schedulingDate = dayjs(date).startOf('hour')
38+
39+
if (schedulingDate.isBefore(new Date())) {
40+
return res.status(400).json({
41+
message: 'Date is in the past.',
42+
})
43+
}
44+
45+
const conflictingScheduling = await prisma.scheduling.findFirst({
46+
where: {
47+
user_id: user.id,
48+
date: schedulingDate.toDate(),
49+
},
50+
})
51+
52+
if (conflictingScheduling) {
53+
return res.status(400).json({
54+
message: 'There is another scheduling at the same time.',
55+
})
56+
}
57+
58+
await prisma.scheduling.create({
59+
data: {
60+
name,
61+
email,
62+
observations,
63+
date: schedulingDate.toDate(),
64+
user_id: user.id,
65+
},
66+
})
67+
68+
return res.status(201).end()
69+
}

src/pages/api/users/time-intervals.api.ts

-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,5 @@ export default async function handler(
4545
})
4646
}),
4747
)
48-
4948
return res.status(201).end()
5049
}

src/pages/schedule/[username]/ScheduleForm/ConfirmStep/index.tsx

+18-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { z } from 'zod'
55
import { zodResolver } from '@hookform/resolvers/zod'
66
import { useForm } from 'react-hook-form'
77
import dayjs from 'dayjs'
8+
import { useRouter } from 'next/router'
9+
import { api } from '@/lib/axios'
810

911
const confirmFormSchema = z.object({
1012
name: z
@@ -33,7 +35,22 @@ export function ConfirmStep({
3335
resolver: zodResolver(confirmFormSchema),
3436
})
3537

36-
function handleConfirmScheduling(data: ConfirmFormData) { }
38+
const router = useRouter()
39+
const username = String(router.query.username)
40+
41+
async function handleConfirmScheduling(data: ConfirmFormData) {
42+
const { name, email, observations } = data
43+
44+
await api.post(`/user/${username}/schedule`, {
45+
name,
46+
email,
47+
observations,
48+
date: schedulingDate,
49+
})
50+
// await router.push(`/schedule/${username}`)
51+
onCancelConfirmation() // para retornar para a pagina anterior.
52+
// a linha 50 esta correta.
53+
}
3754

3855
const describeDate = dayjs(schedulingDate).format(
3956
'DD [ de ] MMMM [ de ] YYYY',

0 commit comments

Comments
 (0)