Files
calebburke.dev/web/src/api/flashcards-api.ts
T

66 lines
1.7 KiB
TypeScript

import http from "@/api/http-client"
import { type FiltersOptions, type ModelOrder, type Policy, type WhereOptions } from "@/api/base-api"
export type Flashcard = {
id: number
flashcardDeckId: number
creatorId: number
cardType: string
front: string
back: string | null
createdAt: string
updatedAt: string
}
export type FlashcardWhereOptions = WhereOptions<Flashcard, "flashcardDeckId" | "creatorId" | "cardType">
export type FlashcardFiltersOptions = FiltersOptions<{
search: string | string[]
}>
export type FlashcardQueryOptions = {
where?: FlashcardWhereOptions
filters?: FlashcardFiltersOptions
order?: ModelOrder[]
page?: number
perPage?: number
}
export const flashcardsApi = {
async list(params: FlashcardQueryOptions = {}): Promise<{
flashcards: Flashcard[]
totalCount: number
}> {
const { data } = await http.get("/api/flashcards", { params })
return data
},
async get(flashcardId: number): Promise<{
flashcard: Flashcard
policy: Policy
}> {
const { data } = await http.get(`/api/flashcards/${flashcardId}`)
return data
},
async create(attributes: Partial<Flashcard>): Promise<{
flashcard: Flashcard
}> {
const { data } = await http.post("/api/flashcards", attributes)
return data
},
async update(
flashcardId: number,
attributes: Partial<Flashcard>
): Promise<{
flashcard: Flashcard
}> {
const { data } = await http.patch(`/api/flashcards/${flashcardId}`, attributes)
return data
},
async delete(flashcardId: number): Promise<void> {
const { data } = await http.delete(`/api/flashcards/${flashcardId}`)
return data
},
}
export default flashcardsApi