Skip to content

Commit a265865

Browse files
committed
Front test
1 parent 3867229 commit a265865

File tree

12 files changed

+1388
-20
lines changed

12 files changed

+1388
-20
lines changed

frontend/src/client/sdk.gen.ts

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ import type {
4444
UtilsTestEmailData,
4545
UtilsTestEmailResponse,
4646
UtilsHealthCheckResponse,
47+
TicketsReadTicketsData,
48+
TicketsReadTicketsResponse,
49+
TicketsCreateTicketData,
50+
TicketsCreateTicketResponse,
51+
TicketsReadTicketData,
52+
TicketsReadTicketResponse,
53+
TicketsUpdateTicketData,
54+
TicketsUpdateTicketResponse,
55+
TicketsDeleteTicketData,
56+
TicketsDeleteTicketResponse,
57+
CommentsCreateCommentData,
58+
CommentsCreateCommentResponse,
4759
} from "./types.gen"
4860

4961
export class ItemsService {
@@ -521,3 +533,156 @@ export class UtilsService {
521533
})
522534
}
523535
}
536+
537+
export class TicketsService {
538+
/**
539+
* Read Tickets
540+
* Retrieve tickets.
541+
* @param data The data for the request.
542+
* @param data.skip
543+
* @param data.limit
544+
* @param data.status
545+
* @param data.category
546+
* @returns TicketsPublic Successful Response
547+
* @throws ApiError
548+
*/
549+
public static readTickets(
550+
data: TicketsReadTicketsData = {},
551+
): CancelablePromise<TicketsReadTicketsResponse> {
552+
return __request(OpenAPI, {
553+
method: "GET",
554+
url: "/api/v1/tickets/",
555+
query: {
556+
skip: data.skip,
557+
limit: data.limit,
558+
status: data.status,
559+
category: data.category,
560+
},
561+
errors: {
562+
422: "Validation Error",
563+
},
564+
})
565+
}
566+
567+
/**
568+
* Create Ticket
569+
* Create new ticket.
570+
* @param data The data for the request.
571+
* @param data.requestBody
572+
* @returns TicketPublic Successful Response
573+
* @throws ApiError
574+
*/
575+
public static createTicket(
576+
data: TicketsCreateTicketData,
577+
): CancelablePromise<TicketsCreateTicketResponse> {
578+
return __request(OpenAPI, {
579+
method: "POST",
580+
url: "/api/v1/tickets/",
581+
body: data.requestBody,
582+
mediaType: "application/json",
583+
errors: {
584+
422: "Validation Error",
585+
},
586+
})
587+
}
588+
589+
/**
590+
* Read Ticket
591+
* Get ticket by ID.
592+
* @param data The data for the request.
593+
* @param data.id
594+
* @returns TicketDetailPublic Successful Response
595+
* @throws ApiError
596+
*/
597+
public static readTicket(
598+
data: TicketsReadTicketData,
599+
): CancelablePromise<TicketsReadTicketResponse> {
600+
return __request(OpenAPI, {
601+
method: "GET",
602+
url: "/api/v1/tickets/{id}",
603+
path: {
604+
id: data.id,
605+
},
606+
errors: {
607+
422: "Validation Error",
608+
},
609+
})
610+
}
611+
612+
/**
613+
* Update Ticket
614+
* Update a ticket.
615+
* @param data The data for the request.
616+
* @param data.id
617+
* @param data.requestBody
618+
* @returns TicketPublic Successful Response
619+
* @throws ApiError
620+
*/
621+
public static updateTicket(
622+
data: TicketsUpdateTicketData,
623+
): CancelablePromise<TicketsUpdateTicketResponse> {
624+
return __request(OpenAPI, {
625+
method: "PUT",
626+
url: "/api/v1/tickets/{id}",
627+
path: {
628+
id: data.id,
629+
},
630+
body: data.requestBody,
631+
mediaType: "application/json",
632+
errors: {
633+
422: "Validation Error",
634+
},
635+
})
636+
}
637+
638+
/**
639+
* Delete Ticket
640+
* Delete a ticket.
641+
* @param data The data for the request.
642+
* @param data.id
643+
* @returns Message Successful Response
644+
* @throws ApiError
645+
*/
646+
public static deleteTicket(
647+
data: TicketsDeleteTicketData,
648+
): CancelablePromise<TicketsDeleteTicketResponse> {
649+
return __request(OpenAPI, {
650+
method: "DELETE",
651+
url: "/api/v1/tickets/{id}",
652+
path: {
653+
id: data.id,
654+
},
655+
errors: {
656+
422: "Validation Error",
657+
},
658+
})
659+
}
660+
}
661+
662+
export class CommentsService {
663+
/**
664+
* Create Comment
665+
* Add a comment to a ticket.
666+
* @param data The data for the request.
667+
* @param data.ticket_id
668+
* @param data.requestBody
669+
* @returns CommentPublic Successful Response
670+
* @throws ApiError
671+
*/
672+
public static createComment(
673+
data: CommentsCreateCommentData,
674+
): CancelablePromise<CommentsCreateCommentResponse> {
675+
return __request(OpenAPI, {
676+
method: "POST",
677+
url: "/api/v1/tickets/{ticket_id}/comments",
678+
path: {
679+
ticket_id: data.ticket_id,
680+
},
681+
body: data.requestBody,
682+
mediaType: "application/json",
683+
errors: {
684+
422: "Validation Error",
685+
},
686+
})
687+
}
688+
}

frontend/src/client/types.gen.ts

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,3 +219,97 @@ export type UtilsTestEmailData = {
219219
export type UtilsTestEmailResponse = Message
220220

221221
export type UtilsHealthCheckResponse = boolean
222+
223+
export type TicketCategory = "Suporte" | "Manutenção" | "Dúvida"
224+
225+
export type TicketPriority = "Baixa" | "Média" | "Alta"
226+
227+
export type TicketStatus = "Aberto" | "Em andamento" | "Encerrado"
228+
229+
export type CommentBase = {
230+
content: string
231+
}
232+
233+
export type CommentCreate = CommentBase
234+
235+
export type CommentPublic = CommentBase & {
236+
id: string
237+
created_at: string
238+
}
239+
240+
export type TicketBase = {
241+
title: string
242+
description?: string | null
243+
category: TicketCategory
244+
priority: TicketPriority
245+
status?: TicketStatus
246+
}
247+
248+
export type TicketCreate = TicketBase
249+
250+
export type TicketUpdate = {
251+
title?: string | null
252+
description?: string | null
253+
category?: TicketCategory | null
254+
priority?: TicketPriority | null
255+
status?: TicketStatus | null
256+
}
257+
258+
export type TicketPublic = TicketBase & {
259+
id: string
260+
user_id: string
261+
created_at: string
262+
updated_at: string
263+
}
264+
265+
export type TicketDetailPublic = TicketPublic & {
266+
comments: Array<CommentPublic>
267+
}
268+
269+
export type TicketsPublic = {
270+
data: Array<TicketPublic>
271+
count: number
272+
page: number
273+
}
274+
275+
// API Request/Response types
276+
export type TicketsReadTicketsData = {
277+
limit?: number
278+
skip?: number
279+
status?: TicketStatus
280+
category?: TicketCategory
281+
}
282+
283+
export type TicketsReadTicketsResponse = TicketsPublic
284+
285+
export type TicketsCreateTicketData = {
286+
requestBody: TicketCreate
287+
}
288+
289+
export type TicketsCreateTicketResponse = TicketPublic
290+
291+
export type TicketsReadTicketData = {
292+
id: string
293+
}
294+
295+
export type TicketsReadTicketResponse = TicketDetailPublic
296+
297+
export type TicketsUpdateTicketData = {
298+
id: string
299+
requestBody: TicketUpdate
300+
}
301+
302+
export type TicketsUpdateTicketResponse = TicketPublic
303+
304+
export type TicketsDeleteTicketData = {
305+
id: string
306+
}
307+
308+
export type TicketsDeleteTicketResponse = Message
309+
310+
export type CommentsCreateCommentData = {
311+
ticket_id: string
312+
requestBody: CommentCreate
313+
}
314+
315+
export type CommentsCreateCommentResponse = CommentPublic
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { IconButton } from "@chakra-ui/react"
2+
import { BsThreeDotsVertical } from "react-icons/bs"
3+
import { MenuContent, MenuRoot, MenuTrigger } from "../ui/menu"
4+
5+
import type { TicketPublic } from "@/client"
6+
import DeleteTicket from "../Tickets/DeleteTicket"
7+
import EditTicket from "../Tickets/EditTicket"
8+
import ViewTicket from "../Tickets/ViewTicket"
9+
10+
interface TicketActionsMenuProps {
11+
ticket: TicketPublic
12+
}
13+
14+
export const TicketActionsMenu = ({ ticket }: TicketActionsMenuProps) => {
15+
return (
16+
<MenuRoot>
17+
<MenuTrigger asChild>
18+
<IconButton variant="ghost" color="inherit">
19+
<BsThreeDotsVertical />
20+
</IconButton>
21+
</MenuTrigger>
22+
<MenuContent>
23+
<ViewTicket ticketId={ticket.id} />
24+
<EditTicket ticket={ticket} />
25+
<DeleteTicket id={ticket.id} />
26+
</MenuContent>
27+
</MenuRoot>
28+
)
29+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Table } from "@chakra-ui/react"
2+
import { SkeletonText } from "../ui/skeleton"
3+
4+
const PendingTickets = () => (
5+
<Table.Root size={{ base: "sm", md: "md" }}>
6+
<Table.Header>
7+
<Table.Row>
8+
<Table.ColumnHeader w="sm">ID</Table.ColumnHeader>
9+
<Table.ColumnHeader w="sm">Title</Table.ColumnHeader>
10+
<Table.ColumnHeader w="sm">Category</Table.ColumnHeader>
11+
<Table.ColumnHeader w="sm">Priority</Table.ColumnHeader>
12+
<Table.ColumnHeader w="sm">Status</Table.ColumnHeader>
13+
<Table.ColumnHeader w="sm">Actions</Table.ColumnHeader>
14+
</Table.Row>
15+
</Table.Header>
16+
<Table.Body>
17+
{[...Array(5)].map((_, index) => (
18+
<Table.Row key={index}>
19+
<Table.Cell>
20+
<SkeletonText noOfLines={1} />
21+
</Table.Cell>
22+
<Table.Cell>
23+
<SkeletonText noOfLines={1} />
24+
</Table.Cell>
25+
<Table.Cell>
26+
<SkeletonText noOfLines={1} />
27+
</Table.Cell>
28+
<Table.Cell>
29+
<SkeletonText noOfLines={1} />
30+
</Table.Cell>
31+
<Table.Cell>
32+
<SkeletonText noOfLines={1} />
33+
</Table.Cell>
34+
<Table.Cell>
35+
<SkeletonText noOfLines={1} />
36+
</Table.Cell>
37+
</Table.Row>
38+
))}
39+
</Table.Body>
40+
</Table.Root>
41+
)
42+
43+
export default PendingTickets

0 commit comments

Comments
 (0)