commit 174cdd6323116383cd74abf4080ae252aa027943 Author: Mohammad Khyata Date: Fri Mar 27 16:03:58 2026 +0300 init diff --git a/.github/skills/crud-page/SKILL.md b/.github/skills/crud-page/SKILL.md new file mode 100644 index 0000000..aa0b51c --- /dev/null +++ b/.github/skills/crud-page/SKILL.md @@ -0,0 +1,182 @@ +--- +name: crud-page +description: "Create CRUD resource pages, forms, schemas, and API clients for the carage-erp dashboard. Use when: adding a new resource page, creating a CRUD feature, building a list/create/edit/delete page, scaffolding a new module, adding a new entity to the dashboard. Covers API client, Zod schema, form component, and page component creation." +--- + +# CRUD Page Generator + +Create fully functional CRUD resource pages following the established codebase patterns. This skill covers the full stack: API client → Zod schema → form component → page component. + +## When to Use + +- User asks to create a new resource/entity page (e.g. "create a vendors page", "add invoices CRUD") +- User asks to add list/create/edit/delete functionality for a domain entity +- User asks to scaffold a new module or feature page +- User wants to extend the dashboard with a new data management page + +## Decision: ResourcePage vs Manual DataTable + +**Use `ResourcePage` (preferred)** when the resource needs full CRUD (list + create + edit + delete in a dialog). This is the standard pattern. + +**Use manual `DataTable` + `useDataTableQuery`** only when the page is read-only or has highly custom layout needs. + +Always prefer `ResourcePage` unless the user explicitly needs something different. + +## Procedure + +Follow these steps **in order**. Each step produces one file. Check the [reference files](./references/) for complete templates and patterns. + +### Step 1: Check if API Client Exists + +Look in `packages/api/src/clients/` for an existing client. Also check `packages/api/src/clients/index.ts` for all registered clients, and `packages/api/src/api.ts` for the factory. + +- If client exists → skip to Step 3 +- If client doesn't exist → continue to Step 2 + +### Step 2: Create API Client + +Read the [API Client Reference](./references/api-client.md) for patterns and template. + +Create the domain client file at `packages/api/src/clients/.ts`: + +1. Define `RESOURCE_ROUTES` const with `INDEX` and `BY_ID` routes (and any extras) +2. Create a class extending `CrudClient` with the route types +3. Add any domain-specific methods beyond standard CRUD +4. Register in `packages/api/src/clients/index.ts` (export class + routes) +5. Register in `packages/api/src/api.ts` (import + add to `createApi()`) + +**Route pattern**: `"/api/"` for INDEX, `"/api//{id}"` for BY_ID. + +**IMPORTANT**: Routes must exist in the OpenAPI schema (`packages/api/types/index.ts`) for type safety. If the route doesn't exist in the schema yet, inform the user and ask if they want to proceed with `any` types or wait for schema update. + +### Step 3: Create Zod Schema + +Read the [Schema Reference](./references/schema.md) for patterns and template. + +Create `apps/dashboard/modules//.schema.ts`: + +1. Define `relationFieldSchema` (reuse if already exported) for foreign-key fields +2. Build the Zod object schema with all form fields +3. Use `.optional()` for non-required fields, `.min(1, "...")` for required strings +4. Use `z.union([z.string().email(...), z.literal("")]).optional()` for optional emails +5. Export the schema, the inferred type, and `relationFieldSchema` if new + +### Step 4: Create Form Component + +Read the [Form Reference](./references/form.md) for the complete template. + +Create `apps/dashboard/modules//-form.tsx`: + +1. Define default values matching the schema +2. Create `mapToFormValues(data)` — transforms API shape → form shape using `toRelation()` +3. Create `mapFormToPayload(values)` — transforms form shape → API shape using `toId()` +4. Use `useResourceForm()` for form initialization + edit pre-filling +5. Use `useFormMutation()` for submit with automatic validation error mapping +6. Render with `Rhform` + `RhfTextField` / `RhfSelectField` / `RhfAsyncSelectField` etc. +7. Include error alert, submit button with loading/edit states + +### Step 5: Create Page Component + +Read the [Page Reference](./references/page.md) for the complete template. + +Create `apps/dashboard/app/(authenticated)/
//page.tsx`: + +1. Add `"use client"` directive +2. Import `ResourcePage`, `ColumnHeader`, the form, client type, and routes +3. Configure: `pageTitle`, `title`, `routeKey`, `getClient`, `columns`, `renderForm` +4. Use `columns` callback to receive `actionsColumn` helper +5. Add sortable column headers with `` +6. Include `actionsColumn()` as last column + +### Step 6: Verify + +- Ensure all imports resolve +- Check that route constants match OpenAPI paths +- Confirm the client is registered in both `clients/index.ts` and `api.ts` + +## Key Conventions + +### Naming + +| Item | Pattern | Example | +|---|---|---| +| Client file | `packages/api/src/clients/.ts` | `job-cards.ts` | +| Client class | `Client` | `JobCardsClient` | +| Routes const | `_ROUTES` | `JOB_CARD_ROUTES` | +| Schema file | `modules//.schema.ts` | `job-card.schema.ts` | +| Form file | `modules//-form.tsx` | `job-card-form.tsx` | +| Page file | `app/(authenticated)/
//page.tsx` | `sales/job-cards/page.tsx` | +| Zod schema | `FormSchema` | `jobCardFormSchema` | +| Form values type | `FormValues` | `JobCardFormValues` | +| Form component | `Form` | `JobCardForm` | +| Page component | `Page` (default export) | `JobCardsPage` | + +### Relation Fields (Foreign Keys) + +- Stored in form as `{ value: string, label: string } | null` +- Use `toRelation(id, name)` to convert API data → form value +- Use `toId(relation)` to convert form value → API payload +- Schema uses `relationFieldSchema = z.object({ value: z.string(), label: z.string() }).nullable()` +- Rendered with `` (fetches options via React Query) + +### Async Select Pattern + +```tsx +const mapLookupOption = (item: any) => ({ value: String(item.id), label: item.name }) +const STORE_OBJECT = { getOptionValue: (o: any) => o, getOptionLabel: (o: any) => o.label } + + api.resource.listSomething()} + mapOption={mapLookupOption} + {...STORE_OBJECT} +/> +``` + +### Available Form Field Components + +| Component | Use For | +|---|---| +| `RhfTextField` | Text, email, phone, URL inputs | +| `RhfTextareaField` | Multi-line text | +| `RhfCheckboxField` | Boolean toggles | +| `RhfSelectField` | Static option dropdowns | +| `RhfAsyncSelectField` | Server-fetched single-select combobox | +| `RhfAsyncMultiSelectField` | Server-fetched multi-select combobox | + +### Imports Cheat Sheet + +```tsx +// Page +import { ResourcePage } from '@/shared/data-view/resource-page' +import { ColumnHeader } from '@/shared/data-view/table-view' +import type { Client } from '@repo/api' +import { _ROUTES } from '@repo/api' + +// Form +import { Rhform, RhfTextField, RhfSelectField, RhfAsyncSelectField } from "@/shared/components/form" +import { useResourceForm } from "@/shared/hooks/use-resource-form" +import { useFormMutation } from "@/shared/hooks/use-form-mutation" +import { useAuthApi } from "@/shared/useApi" +import { toRelation, toId } from "@/shared/lib/utils" +import { Button } from "@/shared/components/ui/button" +import { Alert, AlertTitle } from "@/shared/components/ui/alert" +import { FieldGroup } from "@/shared/components/ui/field" +import { toast } from "sonner" + +// Schema +import { z } from "zod" +``` + +## Extending the CRUD Codebase + +If a feature requires functionality not covered by existing utilities (e.g. inline editing, tab-based forms, file uploads, nested resources), you are encouraged to extend the shared infrastructure: + +- Add new form field components in `shared/components/form/controls/` and `shared/components/form/fields/` +- Add new hooks in `shared/hooks/` +- Extend `ResourcePage` props if needed +- Add new column helper factories in `shared/data-view/table-view/` +- Keep extensions generic and reusable — follow the same patterns as existing code diff --git a/.github/skills/crud-page/references/api-client.md b/.github/skills/crud-page/references/api-client.md new file mode 100644 index 0000000..ebf921c --- /dev/null +++ b/.github/skills/crud-page/references/api-client.md @@ -0,0 +1,140 @@ +# API Client Reference + +## File Location + +`packages/api/src/clients/.ts` + +## Standard CrudClient Pattern (Preferred) + +Use this when the resource has standard CRUD endpoints that exist in the OpenAPI schema. + +```ts +import { CrudClient } from "../infra/crud-client" +import type { ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" + +export const _ROUTES = { + INDEX: "/api/", + BY_ID: "/api//{id}", + // Add extra routes as needed: + // EXPORT: "/api//export", + // IMPORT: "/api//import", + // RELATED: "/api/", +} as const satisfies Record + +export class Client extends CrudClient< + typeof _ROUTES.INDEX, + typeof _ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, _ROUTES.INDEX, _ROUTES.BY_ID) + } + + // Add domain-specific methods: + // async listCategories() { + // return this.get(_ROUTES.RELATED) + // } + // + // async export() { + // return this.get(_ROUTES.EXPORT) + // } +} +``` + +### CrudClient Gives You For Free + +| Method | HTTP | Description | +|---|---|---| +| `list(query?)` | `GET /api/` | Paginated list with query params | +| `show(id)` | `GET /api//{id}` | Single item fetch | +| `create(payload)` | `POST /api/` | Create new item | +| `update(id, payload)` | `PUT /api//{id}` | Update existing item | +| `destroy(id)` | `DELETE /api//{id}` | Delete item | + +## Minimal CrudClient (No Custom Methods) + +For simple resources with only standard CRUD: + +```ts +import { CrudClient } from "../infra/crud-client" +import type { ApiClientOptions } from "../infra/client" +import type { ApiPath } from "../infra/types" + +export const _ROUTES = { + INDEX: "/api/", + BY_ID: "/api//{id}", +} as const satisfies Record + +export class Client extends CrudClient< + typeof _ROUTES.INDEX, + typeof _ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, _ROUTES.INDEX, _ROUTES.BY_ID) + } +} +``` + +## Registration + +After creating the client, register it in two files: + +### 1. `packages/api/src/clients/index.ts` + +```ts +export { Client, _ROUTES } from "./" +``` + +### 2. `packages/api/src/api.ts` + +Add the import at the top: +```ts +import { Client } from "./clients/" +``` + +Add to the `createApi()` return object: +```ts +export function createApi(options?: ApiClientOptions) { + return { + // ...existing clients... + : new Client(undefined, options), + } +} +``` + +## Real Example: CustomersClient + +```ts +import { CrudClient } from "../infra/crud-client" +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" + +export const CUSTOMER_ROUTES = { + INDEX: "/api/customers", + BY_ID: "/api/customers/{id}", + EXPORT: "/api/customers/export", + IMPORT: "/api/customers/import", + CUSTOMER_TYPES: "/api/customer-types", +} as const satisfies Record + +export class CustomersClient extends CrudClient< + typeof CUSTOMER_ROUTES.INDEX, + typeof CUSTOMER_ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, CUSTOMER_ROUTES.INDEX, CUSTOMER_ROUTES.BY_ID) + } + + async listCustomerTypes() { + return this.get(CUSTOMER_ROUTES.CUSTOMER_TYPES) + } + + async export() { + return this.get(CUSTOMER_ROUTES.EXPORT) + } + + async import(payload: ApiRequestBody) { + return this.post(CUSTOMER_ROUTES.IMPORT, payload) + } +} +``` diff --git a/.github/skills/crud-page/references/form.md b/.github/skills/crud-page/references/form.md new file mode 100644 index 0000000..fff168e --- /dev/null +++ b/.github/skills/crud-page/references/form.md @@ -0,0 +1,234 @@ +# Form Reference + +## File Location + +`apps/dashboard/modules//-form.tsx` + +## Complete Template + +```tsx +"use client" + +import { AlertTriangle, Plus, Save } from "lucide-react" + +import { Button } from "@/shared/components/ui/button" +import { Alert, AlertTitle } from "@/shared/components/ui/alert" +import { FieldGroup } from "@/shared/components/ui/field" +import { + Rhform, + RhfTextField, + RhfSelectField, + RhfAsyncSelectField, + // RhfTextareaField, + // RhfCheckboxField, + // RhfAsyncMultiSelectField, +} from "@/shared/components/form" +import { toast } from "sonner" +import { useAuthApi } from "@/shared/useApi" +import { useResourceForm } from "@/shared/hooks/use-resource-form" +import { useFormMutation } from "@/shared/hooks/use-form-mutation" +import { toRelation, toId } from "@/shared/lib/utils" + +import { + FormSchema, + type FormValues, +} from "./.schema" +import { _ROUTES } from "@repo/api" + +// ── Constants ── + +// Static select options (if needed): +// const STATUS_OPTIONS = [ +// { value: "active", label: "Active" }, +// { value: "inactive", label: "Inactive" }, +// ] + +// ── Props ── + +export type FormProps = { + resourceId?: string | null + initialData?: unknown + onSuccess?: () => void +} + +// ── Default values ── + +const DEFAULT_VALUES: FormValues = { + // Match every field in the Zod schema: + // name: "", + // email: "", + // category: null, // relation fields default to null + // is_active: true, // booleans +} + +// ── Mapping helpers ── + +function mapToFormValues(data: unknown): FormValues { + const d = (data as any)?.data ?? data ?? {} + + return { + // String fields: + // name: d.name || "", + // email: d.email || "", + + // Relation fields (API returns id + name separately): + // category: toRelation(d.category_id, d.category_name), + + // Booleans: + // is_active: d.is_active ?? true, + } +} + +function mapFormToPayload(values: FormValues) { + return { + // String fields — use `|| undefined` to send null for empty strings: + // name: values.name, + // email: values.email || undefined, + + // Relation fields — extract the numeric ID: + // category_id: toId(values.category), + + // Booleans: + // is_active: values.is_active, + } +} + +// ── Shared mapOption for async selects ── + +const mapLookupOption = (item: any) => ({ + value: String(item.id), + label: item.name, +}) + +const STORE_OBJECT = { getOptionValue: (o: any) => o, getOptionLabel: (o: any) => o.label } + +// ── Component ── + +export function Form({ resourceId, initialData, onSuccess }: FormProps) { + const api = useAuthApi() + + const { form, isEditing } = useResourceForm<FormValues, any>({ + schema: FormSchema, + defaultValues: DEFAULT_VALUES, + resourceId, + initialData, + initialize: (id) => api..show(id), + queryKey: [_ROUTES.BY_ID, resourceId], + mapToFormValues: mapToFormValues, + }) + + const { mutate, error, isPending } = useFormMutation(form, { + mutationFn: (values: FormValues) => { + const payload = mapFormToPayload(values) + const promise = isEditing && resourceId + ? api..update(resourceId, payload) + : api..create(payload) + toast.promise(promise, { + loading: isEditing ? "Updating ..." : "Creating ...", + success: isEditing ? " updated successfully" : " created successfully", + error: isEditing ? "Failed to update " : "Failed to create ", + }) + return promise + }, + onSuccess: () => { + form.reset() + onSuccess?.() + }, + }) + + return ( + mutate(values)}> + {error && ( + + + + {isEditing ? "Failed to update " : "Failed to create "} + + {error.message} + + )} + + + {/* Text fields */} + {/* */} + + {/* Grid layout for side-by-side fields */} + {/*
+ + +
*/} + + {/* Static select */} + {/* */} + + {/* Async select (fetches options from API) */} + {/* api.categories.list()} + mapOption={mapLookupOption} + {...STORE_OBJECT} + /> */} + + {/* Textarea */} + {/* */} + + {/* Checkbox */} + {/* */} + + +
+
+ ) +} +``` + +## Key Patterns + +### mapToFormValues + +Transforms API response → form values. Always handle: +- Null safety: `d.field || ""` +- Relation fields: `toRelation(d.relation_id, d.relation_name)` +- Nested data: `(data as any)?.data ?? data ?? {}` +- Booleans: `d.field ?? defaultValue` + +### mapFormToPayload + +Transforms form values → API request body. Always handle: +- Empty strings to undefined: `values.field || undefined` +- Relation to ID: `toId(values.relation)` +- Keep required fields as-is: `values.name` + +### useResourceForm + +Initializes react-hook-form with Zod validation. Handles both create and edit modes: +- `resourceId` null → create mode (uses `defaultValues`) +- `resourceId` set → edit mode (fetches via `initialize`, maps with `mapToFormValues`) + +### useFormMutation + +Wraps `useMutation` with automatic Laravel validation error mapping to form fields. No need to manually handle `ApiError.validationErrors`. + +### Toast Pattern + +Always use `toast.promise()` wrapping the API call for consistent loading/success/error feedback. + +## Layout Conventions + +- Use `` to wrap all fields +- Use `
` for side-by-side fields +- Place the submit button at the bottom inside `` +- Show error alert above fields when mutation fails diff --git a/.github/skills/crud-page/references/page.md b/.github/skills/crud-page/references/page.md new file mode 100644 index 0000000..5f94ca6 --- /dev/null +++ b/.github/skills/crud-page/references/page.md @@ -0,0 +1,225 @@ +# Page Reference + +## File Location + +`apps/dashboard/app/(authenticated)/
//page.tsx` + +Where `
` is the navigation section (e.g. `sales`, `inventory`, `hr`) and `` is the resource in kebab-case plural. + +## Complete Template (ResourcePage Pattern) + +```tsx +"use client" + +import { ResourcePage } from '@/shared/data-view/resource-page' +import { ColumnHeader } from '@/shared/data-view/table-view' +import { Form } from '@/modules//-form' +import { _ROUTES } from '@repo/api' +import type { Client } from '@repo/api' + +export default function Page() { + return ( + Client> + pageTitle="" + title="" + routeKey={_ROUTES.INDEX} + getClient={(api) => api.} + columns={({ actionsColumn }) => [ + { + accessorKey: "", + header: ({ column }) => , + }, + { + accessorKey: "", + header: ({ column }) => , + }, + // Add more columns as needed... + actionsColumn(), + ]} + renderForm={({ resourceId, initialData, onSuccess }) => ( + <Form + resourceId={resourceId} + initialData={initialData} + onSuccess={onSuccess} + /> + )} + /> + ) +} +``` + +## ResourcePage Props + +| Prop | Required | Description | +|---|---|---| +| `pageTitle` | No | Page heading text (e.g. "Customers") | +| `title` | Yes | Singular noun for button/dialog (e.g. "Customer" → "Add Customer") | +| `routeKey` | Yes | React Query cache key, use `ROUTES.INDEX` | +| `getClient` | Yes | Selects the domain client from the authenticated API | +| `columns` | Yes | Column definitions — use callback form to get `actionsColumn` helper | +| `renderForm` | Yes | Renders the form component inside the dialog | +| `queryOptions` | No | React Query overrides (`staleTime`, etc.) | + +## Column Patterns + +### Simple text column (sortable) +```tsx +{ + accessorKey: "name", + header: ({ column }) => , +}, +``` + +### Custom cell renderer +```tsx +{ + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.status} + + ), +}, +``` + +### Column with icon +```tsx +{ + accessorKey: "name", + header: ({ column }) => , + cell: ({ row }) => ( +
+ + {row.original.name} +
+ ), +}, +``` + +### Non-sortable column +```tsx +{ + accessorKey: "notes", + header: () => Notes, + enableSorting: false, +}, +``` + +### Actions column (always last) +```tsx +actionsColumn(), +``` + +## Real Example: Customers Page + +```tsx +"use client" + +import { ResourcePage } from '@/shared/data-view/resource-page' +import { ColumnHeader } from '@/shared/data-view/table-view' +import { CustomerForm } from '@/modules/customers/customer-form' +import { CUSTOMER_ROUTES } from '@repo/api' +import type { CustomersClient } from '@repo/api' +import { Building2Icon, UserIcon } from 'lucide-react' + +export default function CustomersPage() { + return ( + + pageTitle='Customers' + title="Customer" + routeKey={CUSTOMER_ROUTES.INDEX} + getClient={(api) => api.customers} + columns={({ actionsColumn }) => [ + { + accessorKey: "first_name", + header: ({ column }) => , + cell: ({ row }) => { + const customerName = row.original.first_name + const isCompany = row.original.customer_type?.name?.toLocaleLowerCase() === "company"; + const companyName = row.original.company_name + const name = isCompany && companyName + ? `${customerName} (${row.original.last_name})` + : customerName + return ( +
+ {isCompany + ? + : } + {name} +
+ ) + }, + }, + { + accessorKey: "email", + header: ({ column }) => , + }, + { + accessorKey: "phone", + header: ({ column }) => , + }, + actionsColumn(), + ]} + renderForm={({ resourceId, initialData, onSuccess }) => ( + + )} + /> + ) +} +``` + +## Alternative: Manual DataTable Pattern (Read-Only or Custom Layout) + +Use only when you don't need create/edit/delete in a dialog: + +```tsx +"use client" + +import { DashboardHeader } from '@/base/components/layout/dashboard' +import DashboardPage from '@/base/components/layout/dashboard/dashboard-page' +import { ColumnHeader, DataTable, useDataTableQuery } from '@/shared/data-view/table-view' +import { useAuthApi } from '@/shared/useApi' +import { _ROUTES } from '@repo/api' +import type { ColumnDef } from '@tanstack/react-table' + +const columns: ColumnDef[] = [ + { + accessorKey: "name", + header: ({ column }) => , + }, + // ... more columns +] + +export default function Page() { + const api = useAuthApi() + + const { data, isLoading, pagination, sorting, handleChange } = useDataTableQuery({ + queryKey: [_ROUTES.INDEX], + client: api., + }) + + const response = data as any + + return ( + }> + + + ) +} +``` diff --git a/.github/skills/crud-page/references/schema.md b/.github/skills/crud-page/references/schema.md new file mode 100644 index 0000000..5830ced --- /dev/null +++ b/.github/skills/crud-page/references/schema.md @@ -0,0 +1,143 @@ +# Schema Reference + +## File Location + +`apps/dashboard/modules//.schema.ts` + +## Template + +```ts +import { z } from "zod" + +// Reusable relation field schema — use for all foreign-key / lookup fields +const relationFieldSchema = z + .object({ value: z.string(), label: z.string() }) + .nullable() + +const FormSchema = z.object({ + // ── Relations (stored as { value, label } objects, mapped to IDs on submit) ── + // category: relationFieldSchema, + + // ── Required strings ── + // name: z.string().min(1, "Name is required"), + + // ── Optional strings ── + // description: z.string().optional(), + + // ── Optional email (allows empty string) ── + // email: z.union([ + // z.string().email("Enter a valid email address"), + // z.literal(""), + // ]).optional(), + + // ── Optional phone ── + // phone: z.string().optional(), + + // ── Boolean ── + // is_active: z.boolean().default(true), + + // ── Number ── + // quantity: z.coerce.number().min(0), + + // ── Date ── + // due_date: z.string().optional(), +}) + +type FormValues = z.inferFormSchema> + +export { FormSchema, relationFieldSchema } +export type { FormValues } +``` + +## Field Type Patterns + +### Required string +```ts +name: z.string().min(1, "Name is required"), +``` + +### Optional string +```ts +notes: z.string().optional(), +``` + +### Optional email (allows empty) +```ts +email: z.union([ + z.string().email("Enter a valid email address"), + z.literal(""), +]).optional(), +``` + +### Relation / Foreign key +```ts +const relationFieldSchema = z + .object({ value: z.string(), label: z.string() }) + .nullable() + +// In schema: +department: relationFieldSchema, +``` + +### Required relation +```ts +department: z + .object({ value: z.string(), label: z.string() }) + .refine((v) => v !== null, { message: "Department is required" }), +``` + +### Boolean with default +```ts +is_active: z.boolean().default(true), +``` + +### Number (from string input) +```ts +quantity: z.coerce.number().min(0, "Must be non-negative"), +price: z.coerce.number().min(0), +``` + +### Static enum select +```ts +status: z.enum(["active", "inactive", "pending"]).default("active"), +salutation: z.string().optional(), +``` + +## Real Example: CustomerFormSchema + +```ts +import { z } from "zod" + +const relationFieldSchema = z + .object({ value: z.string(), label: z.string() }) + .nullable() + +type RelationField = z.infer + +const customerFormSchema = z.object({ + customer_type: relationFieldSchema, + referral_source: relationFieldSchema, + payment_terms: relationFieldSchema, + country: relationFieldSchema, + state: relationFieldSchema, + salutation: z.string().optional(), + first_name: z.string().min(1, "First name is required"), + last_name: z.string().min(1, "Last name is required"), + company_name: z.string().optional(), + email: z.union([ + z.string().email("Enter a valid email address"), + z.literal(""), + ]).optional(), + phone: z.string().optional(), + alternate_phone: z.string().optional(), + address_line_1: z.string().optional(), + address_line_2: z.string().optional(), + city: z.string().optional(), + zip_code: z.string().optional(), +}) + +type CustomerFormValues = z.infer + +export { customerFormSchema, relationFieldSchema } +export type { CustomerFormValues, RelationField } +``` diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96fab4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..e69de29 diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 0000000..6716ff9 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,11 @@ +{ + "servers": { + "shadcn": { + "command": "npx", + "args": [ + "shadcn@latest", + "mcp" + ] + } + } +} diff --git a/Garage Management System.pdf b/Garage Management System.pdf new file mode 100644 index 0000000..d91fe0a Binary files /dev/null and b/Garage Management System.pdf differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..b0d02e5 --- /dev/null +++ b/README.md @@ -0,0 +1,159 @@ +# Turborepo starter + +This Turborepo starter is maintained by the Turborepo core team. + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest +``` + +## What's inside? + +This Turborepo includes the following packages/apps: et + +### Apps and Packages + +- `docs`: a [Next.js](https://nextjs.org/) app +- `web`: another [Next.js](https://nextjs.org/) app +- `@repo/ui`: a stub React component library shared by both `web` and `docs` applications +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +### Build + +To build all apps and packages, run the following command: + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed (recommended): + +```sh +cd my-turborepo +turbo build +``` + +Without global `turbo`, use your package manager: + +```sh +cd my-turborepo +npx turbo build +yarn dlx turbo build +pnpm exec turbo build +``` + +You can build a specific package by using a [filter](https://turborepo.dev/docs/crafting-your-repository/running-tasks#using-filters): + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed: + +```sh +turbo build --filter=docs +``` + +Without global `turbo`: + +```sh +npx turbo build --filter=docs +yarn exec turbo build --filter=docs +pnpm exec turbo build --filter=docs +``` + +### Develop + +To develop all apps and packages, run the following command: + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed (recommended): + +```sh +cd my-turborepo +turbo dev +``` + +Without global `turbo`, use your package manager: + +```sh +cd my-turborepo +npx turbo dev +yarn exec turbo dev +pnpm exec turbo dev +``` + +You can develop a specific package by using a [filter](https://turborepo.dev/docs/crafting-your-repository/running-tasks#using-filters): + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed: + +```sh +turbo dev --filter=web +``` + +Without global `turbo`: + +```sh +npx turbo dev --filter=web +yarn exec turbo dev --filter=web +pnpm exec turbo dev --filter=web +``` + +### Remote Caching + +> [!TIP] +> Vercel Remote Cache is free for all plans. Get started today at [vercel.com](https://vercel.com/signup?utm_source=remote-cache-sdk&utm_campaign=free_remote_cache). + +Turborepo can use a technique known as [Remote Caching](https://turborepo.dev/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. + +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup?utm_source=turborepo-examples), then enter the following commands: + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed (recommended): + +```sh +cd my-turborepo +turbo login +``` + +Without global `turbo`, use your package manager: + +```sh +cd my-turborepo +npx turbo login +yarn exec turbo login +pnpm exec turbo login +``` + +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). + +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: + +With [global `turbo`](https://turborepo.dev/docs/getting-started/installation#global-installation) installed: + +```sh +turbo link +``` + +Without global `turbo`: + +```sh +npx turbo link +yarn exec turbo link +pnpm exec turbo link +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turborepo.dev/docs/crafting-your-repository/running-tasks) +- [Caching](https://turborepo.dev/docs/crafting-your-repository/caching) +- [Remote Caching](https://turborepo.dev/docs/core-concepts/remote-caching) +- [Filtering](https://turborepo.dev/docs/crafting-your-repository/running-tasks#using-filters) +- [Configuration Options](https://turborepo.dev/docs/reference/configuration) +- [CLI Usage](https://turborepo.dev/docs/reference/command-line-reference) diff --git a/apps/dashboard b/apps/dashboard new file mode 160000 index 0000000..078e538 --- /dev/null +++ b/apps/dashboard @@ -0,0 +1 @@ +Subproject commit 078e5383bae07bf1eaddc6236f25b5b2e98c52f6 diff --git a/docs/dashboard/crud/data-fetching.md b/docs/dashboard/crud/data-fetching.md new file mode 100644 index 0000000..cb20325 --- /dev/null +++ b/docs/dashboard/crud/data-fetching.md @@ -0,0 +1,278 @@ +# Data Fetching + +This document covers the full data-fetching stack: API client creation, authentication injection, query state management, and URL synchronization. + +--- + +## Layer Overview + +``` +useAuthApi() + └─ createApi({ headers: { Authorization: "Bearer " } }) + └─ new CustomersClient(...) ← one per domain (CrudClient subclass) + └─ ApiClient ← openapi-fetch wrapper, type-safe from OpenAPI schema +``` + +``` +useDataTableQuery({ queryKey, client, queryOptions }) + └─ React Query useQuery + └─ client.list({ page, per_page, sort_by, sort_order }) + └─ nuqs useQueryStates ← URL ↔ pagination & sort params +``` + +--- + +## `useAuthApi` — Authenticated API Factory + +**File:** `shared/useApi.ts` + +```ts +import { useAuthApi } from "@/shared/useApi" + +const api = useAuthApi() +// api.customers, api.vehicles, api.employees, … +``` + +Reads the JWT token from the `useAuthStore` Zustand store and passes it as the `Authorization: Bearer ` header. Called inside any component or hook that needs to make authenticated requests. + +> **Note:** `createApi()` is called on every render. If performance is a concern, wrap in `useMemo` (see [Enhancement Plan](./enhancement-plan.md)). + +### Server-Side Variant + +For `async` server components or server actions: + +```ts +import { getAuthApi } from "@/shared/api" + +const api = await getAuthApi() // reads token from cookies (Next.js server-side) +``` + +--- + +## `CrudClient` — Generic CRUD Base Class + +**File:** `packages/api/src/infra/crud-client.ts` + +All domain clients extend `CrudClient`. It provides four standard operations: + +| Method | HTTP | Endpoint | +|---|---|---| +| `list(query?)` | `GET` | `indexRoute` (e.g. `/api/customers`) | +| `create(payload)` | `POST` | `indexRoute` | +| `update(id, payload)` | `PUT` | `byIdRoute` (e.g. `/api/customers/{id}`) | +| `destroy(id)` | `DELETE` | `byIdRoute` | + +All methods are **fully type-safe** — parameter types, request body shapes, and response types are all derived from the OpenAPI schema via `packages/api/types/index.ts`. + +### Exported Type Utilities + +```ts +// Extract the list response type from a client class +type CrudListResponse // e.g. { data: Customer[], meta: { last_page, total, ... } } + +// Extract a single item type from the list data array +type CrudListItem // e.g. Customer + +// Extract query params accepted by list() +type CrudListParams + +// Base interface: all list items have `id: number` +type BaseCrudItem = { id: number } +``` + +### Example: Creating a Domain Client + +```ts +// packages/api/src/clients/my-resource.ts +import { CrudClient } from "../infra/crud-client" + +export const MY_ROUTES = { + INDEX: "/api/my-resources", + BY_ID: "/api/my-resources/{id}", +} as const + +export class MyResourceClient extends CrudClient< + typeof MY_ROUTES.INDEX, + typeof MY_ROUTES.BY_ID +> { + constructor(baseUrl?: string, options?: ApiClientOptions) { + super(baseUrl, options, MY_ROUTES.INDEX, MY_ROUTES.BY_ID) + } + + // Add domain-specific endpoints here: + async listCategories() { + return this.get("/api/my-resource-categories") + } +} +``` + +Then register it in `packages/api/src/api.ts`: + +```ts +export function createApi(options?: ApiClientOptions) { + return { + // ... + myResources: new MyResourceClient(undefined, options), + } +} +``` + +--- + +## `ApiClient` — Low-Level HTTP Client + +**File:** `packages/api/src/infra/client.ts` + +Wraps `openapi-fetch`. All requests are typed against `paths` from `packages/api/types/index.ts`, which is generated from the OpenAPI schema. + +### Error Handling + +Failed requests throw an `ApiError`: + +```ts +class ApiError extends Error { + status: number // HTTP status code + statusText: string + endpoint: string + method: string + payload?: { + message?: string + errors?: Record // Laravel validation errors + } + + get validationErrors(): Record | undefined +} +``` + +### `ApiError` in Form Context + +In mutation `onError` handlers, check for validation errors and apply them to individual form fields: + +```ts +onError: (err) => { + if (err instanceof ApiError && err.validationErrors) { + Object.entries(err.validationErrors).forEach(([field, messages]) => { + form.setError(field as any, { message: messages[0] }) + }) + } +} +``` + +--- + +## `useDataTableQuery` — Paginated List + URL State + +**File:** `shared/data-view/table-view/use-data-table-query.ts` + +Wraps React Query + `nuqs` to keep the table's pagination and sort state synchronized with the URL. + +```ts +const tableQuery = useDataTableQuery({ + queryKey: ["customers"], // React Query cache key prefix + client, // Any object with a .list(query?) method + queryOptions, // Optional React Query overrides (staleTime, etc.) +}) +``` + +### Returns + +| Key | Description | +|---|---| +| `data` | The raw API response (`CrudListResponse`) | +| `isLoading` | True during initial fetch | +| `pagination` | `{ page, pageSize, pageCount: 1, total: 0 }` — pageCount/total come from `data.meta` | +| `sorting` | `SortingState` derived from URL params | +| `params` | Raw parsed URL params (`page`, `per_page`, `sort_by`, `sort_order`) | +| `setParams` | Direct URL param setter | +| `handleChange` | Normalized event handler for `DataTable` (see below) | +| `invalidateQuery` | Busts the cache (called after mutations) | + +### URL Query Parameters + +| Param | Default | Description | +|---|---|---| +| `page` | `1` | Current page (1-based) | +| `per_page` | `10` | Rows per page | +| `sort_by` | `null` | Column `accessorKey` to sort by | +| `sort_order` | `null` | `"asc"` or `"desc"` | + +### `handleChange` Event Types + +```ts +// Triggered by DataViewPagination (page navigation, rows per page) +{ type: "pagination", pagination: { page, pageSize, ... } } + +// Triggered by ColumnHeader sort dropdown +{ type: "sorting", sorting: [{ id: "email", desc: false }] } +// → resets page to 1 automatically +``` + +--- + +## `DataTable` — Table UI + +**File:** `shared/data-view/table-view/data-table.tsx` + +Thin wrapper around TanStack Table v8 with manual server-side pagination and sorting: + +```tsx + +``` + +While `isLoading` is `true`, the table renders `pageSize` skeleton rows instead of data. + +### `ColumnHeader` — Sortable Column Header + +```tsx +import { ColumnHeader } from "@/shared/data-view/table-view" + +{ + accessorKey: "email", + header: ({ column }) => , +} +``` + +Renders a sort dropdown (Asc / Desc / Clear) if the column `canSort`. Shows a plain `` otherwise. + +--- + +## Auth Store + +**File:** `shared/stores/auth-store.ts` + +A Zustand store that holds the authenticated user state: + +| Key | Type | Description | +|---|---|---| +| `token` | `string \| undefined` | JWT access token | +| `user` | `AuthUser \| undefined` | Authenticated user profile | +| `isAuthenticated` | `boolean` | True when token + user are set | +| `login(token, user, expiresIn?)` | fn | Persists to cookie + sets store | +| `logout()` | fn | Calls API logout, clears cookie + store | +| `hydrate()` | fn | Reads cookies on app boot (call in root layout) | + +--- + +## Type System — OpenAPI-Derived Types + +The entire API type surface is generated from `packages/api/open-api/schema.yaml` via scripts in `packages/api/scripts/`. The generated output is `packages/api/types/index.ts`. + +Key exported type helpers from `packages/api/src/infra/types.ts`: + +| Type | Description | +|---|---| +| `ApiPath` | Union of all known API paths | +| `ApiPathByMethod` | All paths that support HTTP method `M` | +| `ApiQueryParams` | Query parameter shape for a given path+method | +| `ApiRequestBody` | Request body shape | +| `ApiResponse` | Successful response shape | +| `ApiPathParams` | URL path parameters (e.g. `{ id: string }`) | + +These types flow through `CrudClient` → `useDataTableQuery` → `ResourcePage` → feature page, providing end-to-end type safety without any manual typing. diff --git a/docs/dashboard/crud/enhancement-plan.md b/docs/dashboard/crud/enhancement-plan.md new file mode 100644 index 0000000..5cda5c3 --- /dev/null +++ b/docs/dashboard/crud/enhancement-plan.md @@ -0,0 +1,225 @@ +# Enhancement Plan + +This document identifies current gaps and improvement opportunities in the CRUD flow. Items are grouped by priority and annotated with implementation effort. + +--- + +## Summary + +The current CRUD pattern is clean, composable, and type-safe. Most issues are edge cases or developer-experience refinements rather than critical bugs. The highest-priority items are the ones marked **High**. + +--- + +## High Priority + +### 1. `useAuthApi` — Missing Memoization + +**File:** `shared/useApi.ts` + +**Problem:** `createApi()` is called on every render. Every component that calls `useAuthApi()` creates new `ApiClient` instances per render cycle. This can cause unintended React Query cache misses or stale closures in edge cases. + +**Fix:** + +```ts +// shared/useApi.ts +import { useMemo } from "react" + +export const useAuthApi = () => { + const token = useAuthStore(s => s.token) + return useMemo( + () => createApi({ headers: token ? { Authorization: `Bearer ${token}` } : undefined }), + [token], + ) +} +``` + +**Effort:** XS (2 lines) — no API changes required. + +--- + +### 2. Edit Mode — No Server Re-fetch on Dialog Open + +**File:** `shared/hooks/use-resource-form.ts`, `modules/customers/customer-form.tsx` + +**Problem:** When the "Edit" button is clicked, `useResourcePage` passes `selectedItem` (the in-memory table row) as `initialData`. The form is pre-populated from this snapshot. However: + +- The snapshot may be stale if the item was modified elsewhere. +- On page refresh with `?dialog=true&resourceId=5` in the URL, `selectedItem` is `null` (not hydrated) → the form opens empty. + +**Fix:** Add an `initialize` function to each feature form that fetches the full resource by ID: + +```ts +// In CustomerForm (use-resource-form options) +initialize: (id) => api.customers.show(id), // requires CrudClient.show() +queryKey: [CUSTOMER_ROUTES.BY_ID, resourceId], + +// In CrudClient (packages/api/src/infra/crud-client.ts) +async show(id: string) { + return this.get(this.byIdRoute, { params: { id } } as never) +} +``` + +**Effort:** S — needs `CrudClient.show()` added and each form updated to pass `initialize`. + +--- + +### 3. `FormDialog` — Single Dialog Limitation + +**File:** `shared/components/form-dialog.tsx` + +**Problem:** Dialog state is keyed to fixed URL params `dialog` and `resourceId`. If two independent `FormDialog` instances are on the same page (e.g., a main resource form and a nested "Add Customer" side panel), they share the same URL params and will conflict. + +**Fix:** Accept a configurable `paramKey` prop: + +```ts +export const createFormDialogParams = (key: string) => ({ + [`${key}_dialog`]: parseAsBoolean.withDefault(false), + [`${key}_resourceId`]: parseAsString, +}) +``` + +**Effort:** S — requires updating `FormDialog`, `useFormDialog`, and `useResourcePage` to accept a `paramKey`. + +--- + +## Medium Priority + +### 4. No Global Search / Filter Support + +**File:** `shared/data-view/table-view/use-data-table-query.ts`, `shared/data-view/table-view/search-params.ts` + +**Problem:** `dataTableSearchParams` only supports `page`, `per_page`, `sort_by`, `sort_order`. There is no standard way to add resource-specific filters (e.g., search by name, filter by status). + +**Proposed:** Add an optional `filters` object to `useDataTableQuery` that maps to additional query params: + +```ts +useDataTableQuery({ + queryKey: ["customers"], + client, + filters: { + search: parseAsString, + status: parseAsStringEnum(["active", "inactive"] as const), + }, +}) +// → adds ?search=&status= params and includes them in client.list() +``` + +**Effort:** M — requires a design decision and updates to `use-data-table-query`, `data-table.tsx`, and `resource-page`. + +--- + +### 5. Grid View — Not Implemented + +**File:** `shared/data-view/grid-view/` (empty directory) + +**Problem:** The `grid-view` folder was scaffolded but never implemented. The data-view layer is clearly designed to support multiple views (table/grid), but no toggle exists. + +**Proposed:** +- Implement a `GridView` component that accepts the same `DataViewProps` as `DataTable`. +- Add a view toggle (Table | Grid) in the `ResourcePage` header or `DashboardHeader`. +- Persist the selected view in a URL param (`?view=grid`). + +**Effort:** M–L depending on grid card design requirements. + +--- + +### 6. `useMutation` Error Handling — Not Reusable + +**File:** `modules/customers/customer-form.tsx` (and all other feature forms) + +**Problem:** The pattern of mapping `ApiError.validationErrors` to `form.setError` is duplicated in every form's `onError` handler. + +**Fix:** Extract a `useFormMutation` hook: + +```ts +// shared/hooks/use-form-mutation.ts +export function useFormMutation( + form: UseFormReturn, + options: UseMutationOptions, +) { + return useMutation({ + ...options, + onError: (err, vars, ctx) => { + if (err instanceof ApiError && err.validationErrors) { + Object.entries(err.validationErrors).forEach(([field, msgs]) => { + form.setError(field as keyof TValues as any, { message: msgs[0] }) + }) + } + options.onError?.(err, vars, ctx) + }, + }) +} +``` + +**Effort:** XS — purely additive. Existing forms can be migrated incrementally. + +--- + +### 7. `CUSTOMER_CREATED_EVENT` — Unused Custom Event + +**File:** `modules/customers/customer-form.tsx` + +**Problem:** `CustomerForm` dispatches `window.dispatchEvent(new CustomEvent("customer:created"))` on success, but nothing in the codebase listens to this event. Cache invalidation is already handled via `onSuccess` → `invalidateQuery()`. The event dispatch is dead code. + +**Fix:** Remove the event dispatch from `CustomerForm` (and the `CUSTOMER_CREATED_EVENT` export) unless there is a known future use case, such as notifying a sibling component outside the React tree. + +**Effort:** XS. + +--- + +### 8. Pagination Meta Split — Inconsistency + +**File:** `shared/data-view/table-view/use-data-table-query.ts` + +**Problem:** `useDataTableQuery` returns `pagination` with `pageCount: 1, total: 0` as placeholders. The real values come from `data.meta` and are calculated inside `ResourcePage.tsx`. This means: + +- `useResourcePage` consumers who render the table directly (outside `ResourcePage`) need to duplicate the `pageCount`/`total` derivation. +- The `pagination` object returned by the hook is misleading until data loads. + +**Fix:** Either move the meta derivation inside `useDataTableQuery` (requiring it to accept a response shape hint), or document this as an intentional split and annotate it. + +**Effort:** XS–S. + +--- + +## Low Priority / Nice to Have + +### 9. Row Selection for Bulk Actions + +There is no row selection or bulk-delete support. TanStack Table supports `rowSelection` state natively. Adding a checkbox column and a "Delete selected" toolbar would benefit resource-heavy pages. + +### 10. Error Boundary Around Table and Form + +If a render error occurs inside `DataTable` or a feature form, it will bubble up and crash the whole page. Wrapping with `` (e.g., via `react-error-boundary`) would improve resilience. + +### 11. `ConfirmDialog` — Not Enforced in Layout + +**Problem:** `` must be manually mounted in `app/(authenticated)/layout.tsx`. There is no lint rule or runtime warning if it is missing. If a developer forgets to add it to a new layout, `confirm()` calls will silently resolve to `false` (no dialog shown, deletion blocked). + +**Fix:** Add a development-mode warning inside the `confirm()` function if the store's `resolve` is never set after a timeout. + +### 12. Column Visibility / Hide + +`ColumnHeader` has a "Hide" dropdown menu item (via `column.toggleVisibility(false)`), but there is no global "Show columns" control to restore hidden columns. Either remove the hide option or add a column visibility popup to `DataTable`. + +### 13. `dataTableSearchParamsCache` — Imported but Unused in App Router + +`dataTableSearchParamsCache` is exported but the pages use `"use client"` throughout. If server components are introduced for any list page, the cache needs wiring in the layout via `nuqs`'s `SearchParamsProvider`. + +--- + +## Checklist + +- [x] #1 — Memoize `useAuthApi` +- [x] #2 — Add `CrudClient.show()` and wire `initialize` in feature forms +- [x] #3 — Make `FormDialog` param key configurable +- [ ] #4 — Design and implement filter/search param support in `useDataTableQuery` +- [ ] #5 — Implement `GridView` and view toggle +- [x] #6 — Extract `useFormMutation` hook +- [x] #7 — Remove unused `CUSTOMER_CREATED_EVENT` +- [x] #8 — Move pagination meta derivation into `useDataTableQuery` +- [ ] #9 — Row selection + bulk actions +- [ ] #10 — Error boundaries +- [x] #11 — Dev-mode warning for missing `ConfirmDialog` +- [ ] #12 — Column visibility restore control +- [ ] #13 — Wire `SearchParamsProvider` if server components are adopted diff --git a/docs/dashboard/crud/form-system.md b/docs/dashboard/crud/form-system.md new file mode 100644 index 0000000..00e2ef1 --- /dev/null +++ b/docs/dashboard/crud/form-system.md @@ -0,0 +1,308 @@ +# Form System + +This document covers the generic form infrastructure used by all resource forms in the dashboard. + +--- + +## Layer Overview + +``` + ← Feature-specific form component + └─ useResourceForm(...) ← State: RHF form + optional fetch for edit mode + └─ useMutation(...) ← Create or update mutation with toast + └─ ← FormProvider +
wrapper + └─ ← RHF-connected text input + └─ ← RHF-connected static select + └─ ← RHF-connected async combobox (fetches options) + └─ + + + ) +} +``` + +--- + +## Zod Schema Conventions + +**File:** `modules//.schema.ts` + +### Relation Fields + +Relation fields (foreign-key selects) use a shared `relationFieldSchema`: + +```ts +import { z } from "zod" + +const relationFieldSchema = z + .object({ value: z.string(), label: z.string() }) + .nullable() + +// In the schema: +const mySchema = z.object({ + category: relationFieldSchema, // → { value: "3", label: "Electronics" } | null + name: z.string().min(1, "Name is required"), +}) +``` + +### Email Validation Pattern + +Use union to allow empty strings: + +```ts +email: z.union([ + z.string().email("Enter a valid email address"), + z.literal(""), +]).optional(), +``` + +--- + +## `extractItems` — Response Unwrapper + +Used internally by `RhfAsyncSelectField` to normalize different API response shapes: + +```ts +// Handles all of: +extractItems([{ id: 1, name: "A" }]) // → same array +extractItems({ data: [{ id: 1, name: "A" }] }) // → data array +extractItems({ data: { data: [{ id: 1, name: "A" }] } }) // → nested data +``` + +This handles both plain arrays, standard Laravel list responses, and nested pagination wrappers. diff --git a/docs/dashboard/crud/overview.md b/docs/dashboard/crud/overview.md new file mode 100644 index 0000000..2c670dc --- /dev/null +++ b/docs/dashboard/crud/overview.md @@ -0,0 +1,128 @@ +# CRUD Pattern — Overview + +This document describes the full-stack CRUD pattern used across the dashboard. Every resource page (Customers, Vendors, Employees, etc.) is built from the same thin layer of generic, composable utilities. + +--- + +## Architecture Layers + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ Feature Page (apps/dashboard/app/…/page.tsx) │ +│ • Declares columns, title, routeKey, getClient, renderForm │ +└──────────────────┬───────────────────────────────────────────────┘ + │ uses +┌──────────────────▼───────────────────────────────────────────────┐ +│ ResourcePage (shared/data-view/resource-page) │ +│ • Combines DashboardPage + FormDialog + DataTable │ +│ • Delegates state to useResourcePage │ +└──────┬───────────────────────────────┬────────────────────────────┘ + │ │ +┌──────▼──────────────┐ ┌────────────▼───────────────────────────┐ +│ useResourcePage │ │ DataTable (shared/data-view/table-view)│ +│ • useDataTableQuery │ │ • TanStack Table (manual mode) │ +│ • form dialog state │ │ • Pagination, sorting, skeleton │ +│ • delete mutation │ │ • DataViewProvider context │ +└──────┬──────────────┘ └────────────────────────────────────────┘ + │ +┌──────▼──────────────────────────────────────────────────────────┐ +│ useAuthApi → createApi() → CrudClient → openapi-fetch │ +│ (packages/api — fully type-safe from OpenAPI schema) │ +└─────────────────────────────────────────────────────────────────┘ + │ +┌──────▼──────────────────────────────────────────────────────────┐ +│ Feature Form (modules//-form.tsx) │ +│ • useResourceForm (react-hook-form + Zod + optional fetch) │ +│ • useMutation (create / update) │ +│ • RhfTextField / RhfSelectField / RhfAsyncSelectField … │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## Key Files + +| Layer | File | Purpose | +|---|---|---| +| Feature page | `app/(authenticated)/sales/customers/page.tsx` | Minimal feature config | +| Generic page shell | `shared/data-view/resource-page/resource-page.tsx` | Layout + wiring | +| Page logic hook | `shared/data-view/resource-page/use-resource-page.ts` | State + mutations | +| Table | `shared/data-view/table-view/data-table.tsx` | TanStack Table UI | +| Table data hook | `shared/data-view/table-view/use-data-table-query.ts` | React Query + URL state | +| Form dialog | `shared/components/form-dialog.tsx` | URL-driven dialog trigger | +| Confirm dialog | `shared/components/confirm-dialog.tsx` | Imperative async confirm | +| Form state hook | `shared/hooks/use-resource-form.ts` | RHF + Zod + optional re-fetch | +| Form field wrappers | `shared/components/form/` | RhfTextField, RhfSelectField, … | +| API layer | `packages/api/src/infra/crud-client.ts` | Generic CRUD HTTP client | +| Auth API hook | `shared/useApi.ts` | Creates authenticated API instance | + +--- + +## Data Flow — Read (LIST) + +``` +URL params change (page / sort) + → useDataTableQuery re-runs queryFn + → client.list({ page, per_page, sort_by, sort_order }) + → CrudClient.list() + → ApiClient.get(indexRoute, { query }) + → openapi-fetch GET /api/customers + ← { data: [...], meta: { last_page, total, ... } } + → DataTable renders rows + pagination +``` + +## Data Flow — Write (CREATE / UPDATE) + +``` +User fills form → submits + → useMutation mutationFn + → api.customers.create(payload) or .update(id, payload) + → CrudClient.create() / .update() + → ApiClient.post() / .put() + → openapi-fetch POST|PUT /api/customers[/{id}] + ← 200/201 response + → onSuccess: invalidateQuery() → list refreshes + → onError: ApiError.validationErrors → form.setError(field, msg) +``` + +## Data Flow — Delete + +``` +User clicks Delete in actions column + → confirm({ title, description, variant: "destructive" }) → awaits boolean + → if confirmed: deleteItem(id) + → useMutation → client.destroy(id) + → ApiClient.delete() + ← success + → invalidateQuery() +``` + +--- + +## Creating a New Feature Page + +To add a new resource page following this pattern: + +1. Create schema: `modules//.schema.ts` +2. Create form: `modules//-form.tsx` +3. Create page: `app/(authenticated)/
//page.tsx` + +The page needs only 5 props on ``: + +```tsx + + title="My Resource" + pageTitle="My Resources" + routeKey={MY_ROUTES.INDEX} + getClient={(api) => api.myClient} + columns={({ actionsColumn }) => [ + { accessorKey: "name", header: () => }, + actionsColumn(), + ]} + renderForm={({ resourceId, initialData, onSuccess }) => ( + + )} +/> +``` + +See the [Resource Page](./resource-page.md), [Data Fetching](./data-fetching.md), and [Form System](./form-system.md) docs for details on each layer. diff --git a/docs/dashboard/crud/resource-page.md b/docs/dashboard/crud/resource-page.md new file mode 100644 index 0000000..36a8742 --- /dev/null +++ b/docs/dashboard/crud/resource-page.md @@ -0,0 +1,179 @@ +# Resource Page + +The `ResourcePage` component is the primary generic shell for any CRUD list page. It composes layout, table, dialog, and state management into a single, reusable component. + +--- + +## Files + +| File | Description | +|---|---| +| `shared/data-view/resource-page/resource-page.tsx` | The React component | +| `shared/data-view/resource-page/use-resource-page.ts` | The state/logic hook | +| `shared/data-view/resource-page/index.ts` | Public exports | + +--- + +## `` Component + +### Props + +```ts +type ResourcePageProps = { + // Required + title: string // Used for the "Add" button label and dialog title + routeKey: string // React Query cache key (e.g. CUSTOMER_ROUTES.INDEX) + getClient: (api: ApiInstance) => TClient // Selects the domain client from the API + columns: // Column definitions or a factory receiving helpers + | ColumnDef>[] + | ((helpers: ResourcePageColumnHelpers) => ColumnDef>[]) + renderForm: (props: ResourceFormProps) => React.ReactNode + + // Optional + pageTitle?: string // Heading text (defaults to undefined) + queryOptions?: Omit, "queryKey" | "queryFn"> +} +``` + +### `ResourcePageColumnHelpers` + +Passed to the `columns` callback, providing three pre-wired helpers: + +| Helper | Type | Description | +|---|---|---| +| `actionsColumn(options?)` | `ColumnDef` | Pre-built Edit + Delete dropdown column | +| `openEdit(row)` | `(row: TItem) => void` | Opens dialog with row pre-filled | +| `deleteItem(id)` | `(id: string) => Promise` | Deletes with toast + confirmation | + +The `actionsColumn` factory (`createActionsColumn`) can be further customized: +```ts +actionsColumn({ + onEdit: (row) => customOpen(row), + onDelete: async (row) => { + // completely override delete behavior + }, +}) +``` + +### `ResourceFormProps` + +Passed to the `renderForm` callback: + +| Prop | Type | Description | +|---|---|---| +| `resourceId` | `string \| null` | `null` on create; the item's `id` string on edit | +| `initialData` | `TItem \| null` | The full row object on edit (from the table's in-memory state) | +| `onSuccess` | `() => void` | Call this after a successful mutation to refresh the list | + +--- + +## `useResourcePage` Hook + +Encapsulates all state and logic. Returned by `ResourcePage` internally but also exported for use in custom page layouts. + +```ts +const page = useResourcePage({ routeKey, getClient, queryOptions }) +``` + +### Returns + +| Key | Type | Description | +|---|---|---| +| `data` | `CrudListResponse` | Raw API response | +| `isLoading` | `boolean` | True while initial fetch is in progress | +| `pagination` | `DataViewPaginationState` | `{ page, pageSize, pageCount, total }` | +| `sorting` | `DataViewSorting` | Current sort state | +| `handleChange` | `(event: DataViewChangeEvent) => void` | Handles pagination and sort events | +| `invalidateQuery` | `() => void` | Busts the React Query cache for the current query key | +| `selectedItem` | `TItem \| null` | The row being edited (populated by `openEdit`) | +| `openEdit(row)` | fn | Sets `selectedItem` and opens dialog | +| `openCreate()` | fn | Clears `selectedItem` and opens dialog | +| `openDialog(id?)` | fn | Low-level dialog open (sets `?dialog=true&resourceId=id` in URL) | +| `closeDialog()` | fn | Closes dialog (removes URL params) | +| `isDialogOpen` | `boolean` | Current dialog open state | +| `dialogResourceId` | `string \| null` | Current resource ID from URL | +| `deleteItem(id)` | `(id: string) => Promise` | Mutation that destroys a resource | +| `actionsColumn(options?)` | fn | Generates the actions `ColumnDef` | +| `client` | `TClient` | The domain API client | +| `api` | `ApiInstance` | Full authenticated API object | + +--- + +## `FormDialog` — URL-Driven Dialog + +`FormDialog` and its companion hook `useFormDialog` manage dialog open/close state **via URL query parameters**: + +| URL param | Value | Meaning | +|---|---|---| +| `dialog` | `true` / absent | Dialog open/closed | +| `resourceId` | string / absent | ID of the item being edited | + +This means sharing or refreshing the URL with `?dialog=true&resourceId=5` will reopen the dialog on the same item (as long as `initialData` is in memory—see [Enhancement Plan](./enhancement-plan.md)). + +### `useFormDialog` + +```ts +const { isOpen, resourceId, open, close } = useFormDialog() + +open("5") // opens dialog in edit mode +open() // opens dialog in create mode +close() // closes dialog, clears resourceId +``` + +--- + +## `ConfirmDialog` — Imperative Async Confirm + +`ConfirmDialog` is a **singleton store-driven dialog** mounted once in the root layout. It exposes an imperative `confirm()` function: + +```ts +import { confirm } from "@/shared/components/confirm-dialog" + +const ok = await confirm({ + title: "Delete this item?", + description: "This action cannot be undone.", + confirmLabel: "Delete", + variant: "destructive", // shows destructive styling + trash icon +}) + +if (ok) { /* proceed */ } +``` + +> **Important:** `` must be rendered once in the root layout. If it is not mounted, `confirm()` will open a dialog that is never displayed. + +--- + +## `createActionsColumn` + +A standalone factory for generating the standard Edit + Delete column: + +```ts +import { createActionsColumn } from "@/shared/data-view/table-view" + +createActionsColumn({ + onEdit: (row) => openEdit(row), + onDelete: async (row) => { + const confirmed = await confirm({ ... }) + if (confirmed) await deleteItem(String(row.id)) + }, +}) +``` + +--- + +## Component Tree + +``` + + └─ + ├─ + │ └─ ← "Add Customer" button + Dialog shell + │ └─ renderForm(resourceId) ← Feature-specific form + └─ + └─ + └─ + ├─ ← Shares state via context + ├─ TanStack Table (manual pagination + sorting) + ├─ Skeleton rows while loading + └─ ← Page controls + rows-per-page +``` diff --git a/docs/dashboard/feature-checklist.md b/docs/dashboard/feature-checklist.md new file mode 100644 index 0000000..fc8c704 --- /dev/null +++ b/docs/dashboard/feature-checklist.md @@ -0,0 +1,261 @@ +# Garage Management System — Feature Implementation Checklist + +> **Generated**: March 27, 2026 +> **Reference**: Postman API Collection (`packages/api/postman/collection.json`) +> **Ordered by**: Dependency level (no dependencies → most complex relations) + +--- + +## How to Read This Checklist + +- **✅ Full** = Page + Module (Form + Schema) + API Client all exist +- **🔧 API Only** = API Client exists, but no dashboard page/module yet +- **⬜ Not Started** = No implementation found +- **Depends on** = Other resources that must exist before this one (based on foreign keys in Postman collection) + +--- + +## Level 0 — Zero Dependencies (Standalone Reference Data) + +These resources have no foreign key references. They are the foundation. + +| # | Resource | Status | Implementation Details | +|---|----------|--------|----------------------| +| 1 | Auth (Login / Profile / Logout) | ✅ Full | Page: `(auth)/login` · Module: `auth/` · Client: `AuthClient` | +| 2 | Countries | 🔧 API Only | Client: `GeoClient` — used by Customer form | +| 3 | Customer Types | 🔧 API Only | Client: `CustomersClient.listCustomerTypes()` | +| 4 | Referral Sources | 🔧 API Only | Client: `ReferralSourcesClient` | +| 5 | Payment Terms | 🔧 API Only | Client: `PaymentTermsClient` | +| 6 | Payment Modes | 🔧 API Only | Client: `PaymentsClient` | +| 7 | Shop Types | ✅ Full | Page: `settings/shop-type` · Module: `settings/shop-type/` · Client: `ShopTypesClient` | +| 8 | Vehicle Body Types | 🔧 API Only | Client: `VehicleAttributesClient` — inline form in Vehicles | +| 9 | Vehicle Fuel Types | 🔧 API Only | Client: `VehicleAttributesClient` — inline form in Vehicles | +| 10 | Vehicle Transmissions | 🔧 API Only | Client: `VehicleAttributesClient` — inline form in Vehicles | +| 11 | Vehicle Colors | 🔧 API Only | Client: `VehicleAttributesClient` — inline form in Vehicles | +| 12 | Document Types | 🔧 API Only | Client: `VehicleDocumentsClient` | +| 13 | Unit Types | 🔧 API Only | Client: `InventoryClient` — inline form in Services | +| 14 | Labels | 🔧 API Only | Client: `LabelsClient` | +| 15 | Insurance Types | 🔧 API Only | Client: `InsuranceTypesClient` | +| 16 | Inspection Categories | 🔧 API Only | Client: `InspectionsClient` — inline form in Inspections | +| 17 | Check Point Labels | 🔧 API Only | Client: `InspectionsClient` | +| 18 | Quick Remarks | 🔧 API Only | Client: `EstimatesClient` | +| 19 | Quick Notes | 🔧 API Only | Client: `EstimatesClient` | +| 20 | Reasons | 🔧 API Only | Client: `LabelsClient` (or standalone) | +| 21 | Task Types | 🔧 API Only | Client: `TasksClient` | +| 22 | Task Sections | 🔧 API Only | Client: `TasksClient` | +| 23 | Invoice Labels | 🔧 API Only | Client: exists in collection | +| 24 | Holiday Years | 🔧 API Only | Client: exists in collection | +| 25 | Taxes | 🔧 API Only | Client: exists in collection | +| 26 | Departments | 🔧 API Only | Client: `DepartmentsClient` — inline form in Services | +| 27 | Labor Rates | 🔧 API Only | Client: `InventoryClient` | +| 28 | Vendors | 🔧 API Only | Client: `VendorsClient` | +| 29 | Shop Calendars | ✅ Full | Page: `productivity/shop-calendars` · Module: `shop-calendars/` · Client: `ShopCalendarsClient` | +| 30 | Shop Timings | ✅ Full | Page: `productivity/shop-timings` · Module: `shop-timings/` · Client: `ShopTimingsClient` | +| 31 | Settings | 🔧 API Only | Client: exists in collection (GET/PUT only) | + +--- + +## Level 1 — Single-Level Dependencies + +These depend only on Level 0 resources. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 32 | States | 🔧 API Only | Countries | Client: `GeoClient` | +| 33 | Inventory Categories | 🔧 API Only | Shop Types | Client: `InventoryClient` — inline form in Services | +| 34 | Vendor Addresses | 🔧 API Only | Vendors, Countries, States | Client: `VendorsClient.createAddress()` | +| 35 | Holidays | 🔧 API Only | Holiday Years | Client: exists in collection | +| 36 | Make and Models | 🔧 API Only | Shop Types, Body Types, Fuel Types, Transmissions | Client: exists in collection | + +--- + +## Level 2 — Core Business Entities + +These depend on Level 0 + Level 1 resources and are used by many higher-level features. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 37 | Customers | ✅ Full | Customer Types, Referral Sources, Payment Terms, Countries, States | Page: `sales/customers` · Module: `customers/` · Client: `CustomersClient` | +| 38 | Vehicles | ✅ Full | Shop Types, Body Types, Fuel Types, Transmissions, Colors | Page: `sales/vehicles` · Module: `vehicles/` · Client: `VehiclesClient` · 5 inline forms | +| 39 | Expense Items | 🔧 API Only | Inventory Categories, Unit Types, Departments | Client: `ExpensesClient` | + +--- + +## Level 3 — Operational Resources + +These depend on Level 0–2 resources. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 40 | Employees | ✅ Full | Departments, Shop Calendars, Shop Timings | Page: `productivity/employees` · Module: `employees/` · Client: `EmployeesClient` | +| 41 | Parts | ✅ Full | Shop Types, Inventory Categories, Unit Types, Departments, Vendors | Page: `items/parts` · Module: `parts/` · Client: `PartsClient` | +| 42 | Services | ✅ Full | Shop Types, Inventory Categories, Unit Types, Departments | Page: `items/services` · Module: `services/` · Client: `ServicesClient` · 4 inline forms | +| 43 | Vehicle Documents | 🔧 API Only | Vehicles, Document Types | Client: `VehicleDocumentsClient` | +| 44 | Vehicle Mileage | 🔧 API Only | Vehicles | Client: `VehicleDocumentsClient` | +| 45 | Time Sheets | 🔧 API Only | Employees | Client: exists in collection | +| 46 | Invoice Sequences | 🔧 API Only | Departments | Client: exists in collection | + +--- + +## Level 4 — Composite Service Resources + +These depend on Level 0–3 resources. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 47 | Service Groups | ✅ Full | Shop Types, Inventory Categories, Unit Types, Departments | Page: `items/service-group` · Module: `service-groups/` · Client: `ServiceGroupsClient` | +| 48 | Service Group Includes | 🔧 API Only | Service Groups | Client: part of Service Group Details | +| 49 | Service Group Services | 🔧 API Only | Service Groups, Services, Labor Rates, Taxes | Client: part of Service Group Details | +| 50 | Service Group Parts | 🔧 API Only | Service Groups, Parts, Taxes | Client: part of Service Group Details | +| 51 | Service Group Pricings | 🔧 API Only | Service Groups, Shop Types, Labor Rates, Fuel Types, Body Types | Client: part of Service Group Details | + +--- + +## Level 5 — Workflow & Operations + +These are core garage workflow features depending on customers, vehicles, employees, etc. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 52 | Inspections | ✅ Full | Customers, Vehicles, Departments, Inspection Categories, Employees | Page: N/A (module exists) · Module: `inspections/` · Client: `InspectionsClient` · 1 inline form | +| 53 | Inspection Check Points | 🔧 API Only | Inspections, Check Point Labels | Client: `InspectionsClient` | +| 54 | Estimates | 🔧 API Only | Customers, Vehicles, Departments, Labels | Client: `EstimatesClient` | +| 55 | Job Cards | 🔧 API Only | Customers, Vehicles, Departments, Labels, Employees | Client: `JobCardsClient` (richest API — status workflow, remarks, attachments) | + +--- + +## Level 6 — Financial & Scheduling + +These depend on Job Cards and other Level 5 resources. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 56 | Appointments | 🔧 API Only | Customers, Vehicles, Departments, Job Cards, Employees, Labels | Client: `AppointmentsClient` | +| 57 | Tasks | 🔧 API Only | Task Types, Task Sections, Job Cards, Employees, Departments | Client: `TasksClient` | +| 58 | Purchase Orders | 🔧 API Only | Job Cards, Vendors, Departments, Labels, Parts | Client: `PurchaseOrdersClient` | +| 59 | Bills | 🔧 API Only | Job Cards, Vendors, Vendor Addresses, Payment Terms, Departments, Labels, Parts | Client: `ExpensesClient` | +| 60 | Expenses | 🔧 API Only | Job Cards, Expense Items, Vendors, Departments, Labels | Client: `ExpensesClient` | +| 61 | Payment Received | 🔧 API Only | Job Cards, Payment Modes, Customers | Client: `PaymentsClient` | +| 62 | Inventory Adjustments | 🔧 API Only | Parts, Job Cards, Invoices, Reasons | Client: exists in collection | + +--- + +## Level 7 — Invoicing & Credit System (Most Complex) + +These are the most complex resources with the deepest dependency chains. + +| # | Resource | Status | Depends On | Implementation Details | +|---|----------|--------|------------|----------------------| +| 63 | Invoices | 🔧 API Only | Customers, Vehicles, Departments, Invoice Sequences, Labels, Inspection Categories, Parts, Services, Expense Items, Service Groups | Client: exists in collection | +| 64 | Invoice Documents | 🔧 API Only | Invoices, Customers, Vehicles, Document Types | Client: exists in collection | +| 65 | Invoice Notes | 🔧 API Only | Invoices | Client: exists in collection | +| 66 | Credit Notes | 🔧 API Only | Customers, Parts, Services, Expenses, Inspection Categories, Labels | Client: exists in collection | +| 67 | Payment Mades | 🔧 API Only | Vendors, Employees, Bills, Expenses, Payment Modes | Client: exists in collection | +| 68 | Vendor Credits | 🔧 API Only | Vendors, Departments, Parts, Services, Expenses, Labels | Client: exists in collection | + +--- + +## Summary + +### Implementation Progress + +| Category | Total | ✅ Full | 🔧 API Only | ⬜ Not Started | +|----------|-------|---------|-------------|----------------| +| Level 0 — Standalone | 31 | 4 | 27 | 0 | +| Level 1 — Single Dep | 5 | 0 | 5 | 0 | +| Level 2 — Core Entities | 3 | 2 | 1 | 0 | +| Level 3 — Operational | 7 | 3 | 4 | 0 | +| Level 4 — Composite | 5 | 1 | 4 | 0 | +| Level 5 — Workflows | 4 | 1 | 3 | 0 | +| Level 6 — Financial | 7 | 0 | 7 | 0 | +| Level 7 — Invoicing | 6 | 0 | 6 | 0 | +| **Total** | **68** | **11** | **57** | **0** | + +### Pages with Full UI (11 total) + +1. Auth (Login) +2. Shop Types (Settings) +3. Shop Calendars (Productivity) +4. Shop Timings (Productivity) +5. Customers (Sales) +6. Vehicles (Sales) +7. Employees (Productivity) +8. Parts (Items) +9. Services (Items) +10. Service Groups (Items) +11. Inspections (Module only — no page route yet) + +### API Clients Without Pages — Priority Recommendations + +Based on the roadmap (Phase 1 — Garage Operations), these are the highest-priority missing pages: + +1. **Job Cards** — Core garage workflow, API client is the most feature-rich +2. **Estimates** — Pre-job-card workflow +3. **Appointments** — Scheduling system +4. **Inspections Page** — Module exists but no page route +5. **Departments** — Referenced by almost every form +6. **Vendors** — Needed for Parts purchasing and Bills +7. **Invoices** — Phase 2 but API is ready + +--- + +## Dependency Graph (Simplified) + +``` +Level 0 (Foundation) +├── Auth, Countries, Shop Types, Customer Types, Referral Sources +├── Payment Terms, Payment Modes, Document Types, Unit Types, Labels +├── Vehicle Attributes (Body, Fuel, Transmission, Colors) +├── Inspection Categories, Check Point Labels, Insurance Types +├── Quick Remarks/Notes, Reasons, Task Types/Sections +├── Holiday Years, Taxes, Departments, Labor Rates +├── Vendors, Shop Calendars, Shop Timings, Invoice Labels, Settings +│ +Level 1 (Single Dependency) +├── States → Countries +├── Inventory Categories → Shop Types +├── Vendor Addresses → Vendors + Countries + States +├── Holidays → Holiday Years +├── Make and Models → Shop Types + Vehicle Attributes +│ +Level 2 (Core Entities) +├── Customers → Customer Types + Referral Sources + Payment Terms + Geo +├── Vehicles → Shop Types + Vehicle Attributes +├── Expense Items → Inventory Categories + Unit Types + Departments +│ +Level 3 (Operational) +├── Employees → Departments + Shop Calendars + Shop Timings +├── Parts → Shop Types + Inventory Categories + Unit Types + Departments + Vendors +├── Services → Shop Types + Inventory Categories + Unit Types + Departments +├── Vehicle Documents → Vehicles + Document Types +├── Vehicle Mileage → Vehicles +├── Time Sheets → Employees +├── Invoice Sequences → Departments +│ +Level 4 (Composite) +├── Service Groups → Shop Types + Inv. Categories + Unit Types + Departments +├── SG Includes/Services/Parts/Pricings → Service Groups + ... +│ +Level 5 (Workflows) +├── Inspections → Customers + Vehicles + Departments + Insp. Categories + Employees +├── Inspection Check Points → Inspections + Check Point Labels +├── Estimates → Customers + Vehicles + Departments + Labels +├── Job Cards → Customers + Vehicles + Departments + Labels + Employees +│ +Level 6 (Financial) +├── Appointments → Customers + Vehicles + Departments + Job Cards + Employees +├── Tasks → Task Types + Task Sections + Job Cards + Employees + Departments +├── Purchase Orders → Job Cards + Vendors + Departments + Labels + Parts +├── Bills → Job Cards + Vendors + Payment Terms + Departments + Labels + Parts +├── Expenses → Job Cards + Expense Items + Vendors + Departments + Labels +├── Payment Received → Job Cards + Payment Modes + Customers +├── Inventory Adjustments → Parts + Job Cards + Invoices + Reasons +│ +Level 7 (Invoicing — Most Complex) +├── Invoices → Customers + Vehicles + Departments + Inv. Sequences + Labels + Parts + Services + Expenses + Service Groups +├── Invoice Documents → Invoices + Customers + Vehicles + Document Types +├── Invoice Notes → Invoices +├── Credit Notes → Customers + Parts + Services + Expenses + Insp. Categories + Labels +├── Payment Mades → Vendors + Employees + Bills + Expenses + Payment Modes +└── Vendor Credits → Vendors + Departments + Parts + Services + Expenses + Labels +``` diff --git a/package.json b/package.json new file mode 100644 index 0000000..0a6864d --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "carage-erp", + "private": true, + "scripts": { + "build": "turbo run build", + "dev": "turbo run dev", + "lint": "turbo run lint", + "start": "turbo run start", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "check-types": "turbo run check-types", + "test:e2e": "turbo run test:e2e" + }, + "devDependencies": { + "prettier": "^3.7.4", + "turbo": "^2.8.20", + "typescript": "5.9.2" + }, + "packageManager": "pnpm@9.0.0", + "engines": { + "node": ">=18" + } +} diff --git a/packages/api/open-api/schema.json b/packages/api/open-api/schema.json new file mode 100644 index 0000000..f422857 --- /dev/null +++ b/packages/api/open-api/schema.json @@ -0,0 +1,28678 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Reparee API", + "description": "All authenticated API endpoints. Set base_url and auth_token in collection variables.", + "version": "1.0.0" + }, + "servers": [ + { + "url": "http://{{base_url}}" + } + ], + "components": { + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer" + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ], + "tags": [ + { + "name": "Auth" + }, + { + "name": "Referral Sources" + }, + { + "name": "Customers" + }, + { + "name": "Customer Types" + }, + { + "name": "Countries & States" + }, + { + "name": "Payment Terms" + }, + { + "name": "Shop Types" + }, + { + "name": "Vehicle Body Types" + }, + { + "name": "Vehicle Fuel Types" + }, + { + "name": "Vehicle Transmissions" + }, + { + "name": "Vehicle Colors" + }, + { + "name": "Vehicles" + }, + { + "name": "Document Types" + }, + { + "name": "Vehicle Documents" + }, + { + "name": "Vehicle Mile and Kms" + }, + { + "name": "Departments" + }, + { + "name": "Employees" + }, + { + "name": "Unit Types" + }, + { + "name": "Inventory Categories" + }, + { + "name": "Labor Rates" + }, + { + "name": "Vendors" + }, + { + "name": "Inspection Categories" + }, + { + "name": "Inspections" + }, + { + "name": "Labels" + }, + { + "name": "Insurance Types" + }, + { + "name": "Estimates" + }, + { + "name": "Quick Remark" + }, + { + "name": "Quick Notes" + }, + { + "name": "Reasons" + }, + { + "name": "Check Point Label" + }, + { + "name": "Inspection Check Points" + }, + { + "name": "Job Cards" + }, + { + "name": "Payment Modes" + }, + { + "name": "Payment Received" + }, + { + "name": "Parts" + }, + { + "name": "Purchase Orders" + }, + { + "name": "Services" + }, + { + "name": "Expense Items" + }, + { + "name": "Bills" + }, + { + "name": "Expenses" + }, + { + "name": "Task Types" + }, + { + "name": "Task Sections" + }, + { + "name": "Tasks" + }, + { + "name": "Appointments" + }, + { + "name": "Invoice Sequences" + }, + { + "name": "Service Groups" + }, + { + "name": "Service Group Details" + }, + { + "name": "Invoice Labels" + }, + { + "name": "Invoices" + }, + { + "name": "Invoice Documents" + }, + { + "name": "Invoice Notes" + }, + { + "name": "Credit Notes" + }, + { + "name": "Payment Mades" + }, + { + "name": "Vendor Credits" + }, + { + "name": "Inventory Adjustments" + }, + { + "name": "Time Sheets" + }, + { + "name": "Shop Timings" + }, + { + "name": "Holiday Years" + }, + { + "name": "Shop Calenders" + }, + { + "name": "Holidays" + }, + { + "name": "Settings" + }, + { + "name": "Taxes" + }, + { + "name": "Make and Models" + } + ], + "paths": { + "/api/login": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Login", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "example": { + "email": "admin@admin.com", + "password": "12345678" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + } + } + }, + "example": { + "token": "1|YOUR_SANCTUM_TOKEN", + "user": { + "id": 1, + "name": "Admin", + "email": "admin@admin.com" + } + } + } + } + } + } + } + }, + "/api/profile": { + "get": { + "tags": [ + "Auth" + ], + "summary": "Profile", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "data": { + "id": 1, + "name": "Admin", + "email": "admin@admin.com", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/logout": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Logout", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Logged out successfully." + } + } + } + } + } + } + }, + "/api/referral-sources": { + "get": { + "tags": [ + "Referral Sources" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "first_page_url": { + "type": "string" + }, + "from": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "last_page_url": { + "type": "string" + }, + "links": { + "type": "array", + "items": {} + }, + "next_page_url": { + "type": "string", + "nullable": true + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "prev_page_url": { + "type": "string", + "nullable": true + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": { + "current_page": 1, + "data": [ + { + "id": 1, + "name": "Website", + "is_default": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "first_page_url": "http://localhost:8000/api/referral-sources?page=1", + "from": 1, + "last_page": 1, + "last_page_url": "http://localhost:8000/api/referral-sources?page=1", + "links": [], + "next_page_url": null, + "path": "http://localhost:8000/api/referral-sources", + "per_page": 10, + "prev_page_url": null, + "to": 1, + "total": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Referral Sources" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Website" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Referral source created successfully.", + "data": { + "id": 2, + "name": "Walk-in", + "is_default": false, + "created_at": "2026-03-23T12:05:00.000000Z", + "updated_at": "2026-03-23T12:05:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/referral-sources/{id}": { + "put": { + "tags": [ + "Referral Sources" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Website" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Referral source updated successfully.", + "data": { + "id": 1, + "name": "Website Ads", + "is_default": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Referral Sources" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Referral source deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-referral-source": { + "post": { + "tags": [ + "Referral Sources" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Default referral source updated successfully.", + "data": { + "id": 1, + "name": "Website", + "is_default": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:15:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/customers": { + "get": { + "tags": [ + "Customers" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "customer_type_id": { + "type": "integer" + }, + "salutation": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternate_phone": { + "type": "string" + }, + "opening_balance": { + "type": "integer" + }, + "credit_limit": { + "type": "integer" + }, + "website": { + "type": "string" + }, + "referral_source_id": { + "type": "integer" + }, + "payment_terms_id": { + "type": "integer" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "customer_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "referral_source": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "payment_term": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "days": { + "type": "integer" + } + } + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + }, + "state": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "customer_type_id": 1, + "salutation": "Mr", + "first_name": "John", + "last_name": "Doe", + "company_name": "Doe Holdings", + "email": "john@example.com", + "phone": "0501234567", + "alternate_phone": "0551234567", + "opening_balance": 0, + "credit_limit": 5000, + "website": "https://example.com", + "referral_source_id": 1, + "payment_terms_id": 1, + "address_line_1": "Street 10", + "address_line_2": "Near Central Plaza", + "country_id": 1, + "state_id": 1, + "city": "Dubai", + "zip_code": "00000", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "customer_type": { + "id": 1, + "name": "Retail" + }, + "referral_source": { + "id": 1, + "name": "Website" + }, + "payment_term": { + "id": 1, + "title": "Net 30", + "days": 30 + }, + "country": { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + }, + "state": { + "id": 1, + "name": "Dubai", + "code": "DU" + } + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Customers" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customer_type_id": { + "type": "integer" + }, + "salutation": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternate_phone": { + "type": "string" + }, + "referral_source_id": { + "type": "integer" + }, + "payment_terms_id": { + "type": "integer" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + } + } + }, + "example": { + "customer_type_id": 1, + "salutation": "Mr", + "first_name": "John", + "last_name": "Doe", + "company_name": "Doe Holdings", + "email": "john@example.com", + "phone": "0501234567", + "alternate_phone": "0551234567", + "referral_source_id": 1, + "payment_terms_id": 1, + "address_line_1": "Street 10", + "address_line_2": "Near Central Plaza", + "country_id": 1, + "state_id": 1, + "city": "Dubai", + "zip_code": "00000" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "customer_type_id": { + "type": "integer" + }, + "salutation": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternate_phone": { + "type": "string" + }, + "opening_balance": { + "type": "integer" + }, + "credit_limit": { + "type": "integer" + }, + "website": { + "type": "string" + }, + "referral_source_id": { + "type": "integer" + }, + "payment_terms_id": { + "type": "integer" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "customer_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "referral_source": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "payment_term": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "days": { + "type": "integer" + } + } + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + }, + "state": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Customer created successfully.", + "data": { + "id": 2, + "customer_type_id": 1, + "salutation": "Mr", + "first_name": "John", + "last_name": "Doe", + "company_name": "Doe Holdings", + "email": "john@example.com", + "phone": "0501234567", + "alternate_phone": "0551234567", + "opening_balance": 0, + "credit_limit": 5000, + "website": "https://example.com", + "referral_source_id": 1, + "payment_terms_id": 1, + "address_line_1": "Street 10", + "address_line_2": "Near Central Plaza", + "country_id": 1, + "state_id": 1, + "city": "Dubai", + "zip_code": "00000", + "created_at": "2026-03-23T12:20:00.000000Z", + "updated_at": "2026-03-23T12:20:00.000000Z", + "customer_type": { + "id": 1, + "name": "Retail" + }, + "referral_source": { + "id": 1, + "name": "Website" + }, + "payment_term": { + "id": 1, + "title": "Net 30", + "days": 30 + }, + "country": { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + }, + "state": { + "id": 1, + "name": "Dubai", + "code": "DU" + } + } + } + } + } + } + } + } + }, + "/api/customers/{id}": { + "put": { + "tags": [ + "Customers" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + } + } + }, + "example": { + "first_name": "John", + "last_name": "Doe" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "customer_type_id": { + "type": "integer" + }, + "salutation": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternate_phone": { + "type": "string" + }, + "opening_balance": { + "type": "integer" + }, + "credit_limit": { + "type": "integer" + }, + "website": { + "type": "string" + }, + "referral_source_id": { + "type": "integer" + }, + "payment_terms_id": { + "type": "integer" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "customer_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "referral_source": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "payment_term": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "days": { + "type": "integer" + } + } + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + }, + "state": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Customer updated successfully.", + "data": { + "id": 1, + "customer_type_id": 1, + "salutation": "Mr", + "first_name": "John", + "last_name": "Doe", + "company_name": "Doe Holdings", + "email": "john@example.com", + "phone": "0501234567", + "alternate_phone": "0551234567", + "opening_balance": 0, + "credit_limit": 5000, + "website": "https://example.com", + "referral_source_id": 1, + "payment_terms_id": 1, + "address_line_1": "Street 10", + "address_line_2": "Near Central Plaza", + "country_id": 1, + "state_id": 1, + "city": "Dubai", + "zip_code": "00000", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:30:00.000000Z", + "customer_type": { + "id": 1, + "name": "Retail" + }, + "referral_source": { + "id": 1, + "name": "Website" + }, + "payment_term": { + "id": 1, + "title": "Net 30", + "days": 30 + }, + "country": { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + }, + "state": { + "id": 1, + "name": "Dubai", + "code": "DU" + } + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Customers" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Customer deleted successfully." + } + } + } + } + } + } + }, + "/api/customers/export": { + "get": { + "tags": [ + "Customers" + ], + "summary": "Export", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "file_name": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Customers export generated successfully.", + "data": { + "file_name": "customers-2026-03-23-123000.xlsx" + } + } + } + } + } + } + } + }, + "/api/customers/import": { + "post": { + "tags": [ + "Customers" + ], + "summary": "Import", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "imported_count": { + "type": "integer" + }, + "failed_count": { + "type": "integer" + }, + "failed_rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "row": { + "type": "integer" + }, + "errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "values": { + "type": "object", + "properties": { + "email": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "example": { + "message": "Customer import completed successfully.", + "data": { + "imported_count": 10, + "failed_count": 1, + "failed_rows": [ + { + "row": 4, + "errors": [ + "The email has already been taken." + ], + "values": { + "email": "dup@example.com" + } + } + ] + } + } + } + } + } + } + } + }, + "/api/customer-types": { + "get": { + "tags": [ + "Customer Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Retail" + } + ] + } + } + } + } + } + } + }, + "/api/countries": { + "get": { + "tags": [ + "Countries & States" + ], + "summary": "Countries", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + }, + { + "id": 2, + "name": "Saudi Arabia", + "code": "SA" + } + ] + } + } + } + } + } + } + }, + "/api/states": { + "get": { + "tags": [ + "Countries & States" + ], + "summary": "States", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "country_id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "country_id": 1, + "name": "Dubai", + "code": "DU", + "country": { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + } + }, + { + "id": 2, + "country_id": 1, + "name": "Abu Dhabi", + "code": "AZ", + "country": { + "id": 1, + "name": "United Arab Emirates", + "code": "AE" + } + } + ] + } + } + } + } + } + } + }, + "/api/payment-terms": { + "get": { + "tags": [ + "Payment Terms" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "image": { + "type": "string", + "nullable": true + }, + "image_url": { + "type": "string", + "nullable": true + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_number": { + "type": "string", + "nullable": true + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "reg_date": { + "type": "string", + "nullable": true + }, + "mfg_date": { + "type": "string", + "nullable": true + }, + "parked_at": { + "type": "string", + "nullable": true + }, + "mileage": { + "type": "string" + }, + "owners_number": { + "type": "string" + }, + "front_tire_size": { + "type": "string", + "nullable": true + }, + "rear_tire_size": { + "type": "string", + "nullable": true + }, + "note": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_fuel_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_color": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "image": null, + "image_url": null, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_number": null, + "engine_size": "2.5L", + "drivetrain": "FWD", + "reg_date": null, + "mfg_date": null, + "parked_at": null, + "mileage": "10000", + "owners_number": "1", + "front_tire_size": null, + "rear_tire_size": null, + "note": "New vehicle", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "vehicle_body_type": { + "id": 1, + "title": "Sedan" + }, + "vehicle_fuel_type": { + "id": 1, + "title": "Petrol" + }, + "vehicle_transmission": { + "id": 1, + "title": "Automatic" + }, + "vehicle_color": { + "id": 1, + "title": "Red", + "code": "RD" + } + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Payment Terms" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Net 30" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/payment-terms/{id}": { + "put": { + "tags": [ + "Payment Terms" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Net 30" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Payment Terms" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-payment-term": { + "post": { + "tags": [ + "Payment Terms" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/shop-types": { + "get": { + "tags": [ + "Shop Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "shop_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "inspection": { + "type": "string" + }, + "image": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "Main Workshop", + "shop_type": "Car", + "note": "General automotive services", + "inspection": "shop_types/inspection/inspection-template.pdf", + "image": "shop_types/image/shop-type-car.jpg", + "is_default": true, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Shop Types" + ], + "summary": "Create", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "shop_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "is_default": { + "type": "string" + }, + "inspection": { + "type": "string", + "format": "binary" + }, + "image": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "shop_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "inspection": { + "type": "string" + }, + "image": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Shop type created successfully.", + "data": { + "id": 1, + "title": "Main Workshop", + "shop_type": "Car", + "note": "General automotive services", + "inspection": "shop_types/inspection/inspection-template.pdf", + "image": "shop_types/image/shop-type-car.jpg", + "is_default": true, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/shop-types/{id}": { + "post": { + "tags": [ + "Shop Types" + ], + "summary": "Update", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "_method": { + "type": "string" + }, + "title": { + "type": "string" + }, + "shop_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "is_default": { + "type": "string" + }, + "inspection": { + "type": "string", + "format": "binary" + }, + "image": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "shop_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "inspection": { + "type": "string" + }, + "image": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Shop type updated successfully.", + "data": { + "id": 1, + "title": "Main Workshop Updated", + "shop_type": "Car", + "note": "Updated note", + "inspection": "shop_types/inspection/inspection-template-v2.pdf", + "image": "shop_types/image/shop-type-car-v2.jpg", + "is_default": false, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Shop Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Shop type deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-body-types": { + "get": { + "tags": [ + "Vehicle Body Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "labor_name": { + "type": "string" + }, + "service_code": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "labor_matrix": { + "type": "string" + }, + "description": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "rate_type": { + "type": "string", + "nullable": true + }, + "labor_rate_id": { + "type": "string", + "nullable": true + }, + "labor_hours": { + "type": "string", + "nullable": true + }, + "sales_chart_of_account": { + "type": "string", + "nullable": true + }, + "selling_price": { + "type": "string" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "string", + "nullable": true + }, + "purchase_preferred_vendor_id": { + "type": "string", + "nullable": true + }, + "purchase_price": { + "type": "string", + "nullable": true + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "labor_rate": { + "type": "string", + "nullable": true + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "labor_name": "Oil Change", + "service_code": "SVC-001", + "unit_type_id": 1, + "labor_matrix": "Standard", + "description": "Full synthetic oil change", + "department_id": 1, + "sales_information": false, + "rate_type": null, + "labor_rate_id": null, + "labor_hours": null, + "sales_chart_of_account": null, + "selling_price": "75.00", + "purchase_information": false, + "purchase_chart_of_account": null, + "purchase_preferred_vendor_id": null, + "purchase_price": null, + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "category": { + "id": 1, + "title": "Oil & Maintenance" + }, + "unit_type": { + "id": 1, + "title": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + }, + "labor_rate": null + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Body Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Sedan" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "labor_name": { + "type": "string" + }, + "service_code": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "labor_matrix": { + "type": "string" + }, + "description": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "rate_type": { + "type": "string", + "nullable": true + }, + "labor_rate_id": { + "type": "string", + "nullable": true + }, + "labor_hours": { + "type": "string", + "nullable": true + }, + "sales_chart_of_account": { + "type": "string", + "nullable": true + }, + "selling_price": { + "type": "string" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "string", + "nullable": true + }, + "purchase_preferred_vendor_id": { + "type": "string", + "nullable": true + }, + "purchase_price": { + "type": "string", + "nullable": true + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "labor_rate": { + "type": "string", + "nullable": true + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "labor_name": "Oil Change", + "service_code": "SVC-001", + "unit_type_id": 1, + "labor_matrix": "Standard", + "description": "Full synthetic oil change", + "department_id": 1, + "sales_information": false, + "rate_type": null, + "labor_rate_id": null, + "labor_hours": null, + "sales_chart_of_account": null, + "selling_price": "75.00", + "purchase_information": false, + "purchase_chart_of_account": null, + "purchase_preferred_vendor_id": null, + "purchase_price": null, + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "category": { + "id": 1, + "title": "Oil & Maintenance" + }, + "unit_type": { + "id": 1, + "title": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + }, + "labor_rate": null + } + } + } + } + } + } + } + }, + "/api/vehicle-body-types/{id}": { + "put": { + "tags": [ + "Vehicle Body Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Sedan" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "labor_name": { + "type": "string" + }, + "service_code": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "labor_matrix": { + "type": "string" + }, + "description": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "rate_type": { + "type": "string", + "nullable": true + }, + "labor_rate_id": { + "type": "string", + "nullable": true + }, + "labor_hours": { + "type": "string", + "nullable": true + }, + "sales_chart_of_account": { + "type": "string", + "nullable": true + }, + "selling_price": { + "type": "string" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "string", + "nullable": true + }, + "purchase_preferred_vendor_id": { + "type": "string", + "nullable": true + }, + "purchase_price": { + "type": "string", + "nullable": true + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "labor_rate": { + "type": "string", + "nullable": true + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "labor_name": "Oil Change Premium", + "service_code": "SVC-001", + "unit_type_id": 1, + "labor_matrix": "Standard", + "description": "Full synthetic oil change", + "department_id": 1, + "sales_information": false, + "rate_type": null, + "labor_rate_id": null, + "labor_hours": null, + "sales_chart_of_account": null, + "selling_price": "85.00", + "purchase_information": false, + "purchase_chart_of_account": null, + "purchase_preferred_vendor_id": null, + "purchase_price": null, + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "category": { + "id": 1, + "title": "Oil & Maintenance" + }, + "unit_type": { + "id": 1, + "title": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + }, + "labor_rate": null + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Body Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-fuel-types": { + "get": { + "tags": [ + "Vehicle Fuel Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "Gasoline", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Fuel Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Gasoline" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "title": "Gasoline", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vehicle-fuel-types/{id}": { + "put": { + "tags": [ + "Vehicle Fuel Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Gasoline" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "title": "Gasoline", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Fuel Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-transmissions": { + "get": { + "tags": [ + "Vehicle Transmissions" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Transmissions" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Automatic" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vehicle-transmissions/{id}": { + "put": { + "tags": [ + "Vehicle Transmissions" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Automatic" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Transmissions" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-colors": { + "get": { + "tags": [ + "Vehicle Colors" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Colors" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Black" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vehicle-colors/{id}": { + "put": { + "tags": [ + "Vehicle Colors" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Black" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Colors" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicles": { + "get": { + "tags": [ + "Vehicles" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicles" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "mileage": { + "type": "string" + }, + "owners_number": { + "type": "string" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_size": "2.5L", + "drivetrain": "FWD", + "mileage": "10000", + "owners_number": "1", + "note": "New vehicle" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "image": { + "type": "string", + "nullable": true + }, + "image_url": { + "type": "string", + "nullable": true + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_number": { + "type": "string", + "nullable": true + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "reg_date": { + "type": "string", + "nullable": true + }, + "mfg_date": { + "type": "string", + "nullable": true + }, + "parked_at": { + "type": "string", + "nullable": true + }, + "mileage": { + "type": "string" + }, + "owners_number": { + "type": "string" + }, + "front_tire_size": { + "type": "string", + "nullable": true + }, + "rear_tire_size": { + "type": "string", + "nullable": true + }, + "note": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_fuel_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_color": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "image": null, + "image_url": null, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_number": null, + "engine_size": "2.5L", + "drivetrain": "FWD", + "reg_date": null, + "mfg_date": null, + "parked_at": null, + "mileage": "10000", + "owners_number": "1", + "front_tire_size": null, + "rear_tire_size": null, + "note": "New vehicle", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "vehicle_body_type": { + "id": 1, + "title": "Sedan" + }, + "vehicle_fuel_type": { + "id": 1, + "title": "Petrol" + }, + "vehicle_transmission": { + "id": 1, + "title": "Automatic" + }, + "vehicle_color": { + "id": 1, + "title": "Red", + "code": "RD" + } + } + } + } + } + } + } + } + }, + "/api/vehicles/{id}": { + "put": { + "tags": [ + "Vehicles" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mileage": { + "type": "string" + }, + "license_plate": { + "type": "string" + } + } + }, + "example": { + "mileage": "12000", + "license_plate": "ABC-123" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "image": { + "type": "string", + "nullable": true + }, + "image_url": { + "type": "string", + "nullable": true + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_number": { + "type": "string", + "nullable": true + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "reg_date": { + "type": "string", + "nullable": true + }, + "mfg_date": { + "type": "string", + "nullable": true + }, + "parked_at": { + "type": "string", + "nullable": true + }, + "mileage": { + "type": "string" + }, + "owners_number": { + "type": "string" + }, + "front_tire_size": { + "type": "string", + "nullable": true + }, + "rear_tire_size": { + "type": "string", + "nullable": true + }, + "note": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_fuel_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "vehicle_color": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "image": null, + "image_url": null, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_number": null, + "engine_size": "2.5L", + "drivetrain": "FWD", + "reg_date": null, + "mfg_date": null, + "parked_at": null, + "mileage": "12000", + "owners_number": "1", + "front_tire_size": null, + "rear_tire_size": null, + "note": "New vehicle", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "vehicle_body_type": { + "id": 1, + "title": "Sedan" + }, + "vehicle_fuel_type": { + "id": 1, + "title": "Petrol" + }, + "vehicle_transmission": { + "id": 1, + "title": "Automatic" + }, + "vehicle_color": { + "id": 1, + "title": "Red", + "code": "RD" + } + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicles" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicles/export": { + "get": { + "tags": [ + "Vehicles" + ], + "summary": "Export", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "customer_type_id": { + "type": "integer" + }, + "salutation": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternate_phone": { + "type": "string" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + } + } + } + }, + "pagination": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "first_page_url": { + "type": "string" + }, + "from": { + "type": "integer" + }, + "last_page_url": { + "type": "string" + }, + "next_page_url": { + "type": "string", + "nullable": true + }, + "path": { + "type": "string" + }, + "per_page": { + "type": "integer" + }, + "prev_page_url": { + "type": "string", + "nullable": true + }, + "to": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "customer_type_id": 1, + "salutation": "Mr", + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com", + "phone": "0501234567", + "alternate_phone": "0551234567", + "address_line_1": "Street 10", + "address_line_2": "Near Central Plaza", + "country_id": 1, + "state_id": 1, + "city": "Dubai", + "zip_code": "00000" + } + ], + "pagination": { + "current_page": 1, + "first_page_url": "{{base_url}}/api/get-vehicle-owners?page=1", + "from": 1, + "last_page_url": "{{base_url}}/api/get-vehicle-owners?page=1", + "next_page_url": null, + "path": "{{base_url}}/api/get-vehicle-owners", + "per_page": 10, + "prev_page_url": null, + "to": 1, + "total": 1 + } + } + } + } + } + } + } + }, + "/api/vehicles/import": { + "post": { + "tags": [ + "Vehicles" + ], + "summary": "Import", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "imported_count": { + "type": "integer" + }, + "failed_count": { + "type": "integer" + }, + "failed_rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "row": { + "type": "integer" + }, + "errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "values": { + "type": "object", + "properties": { + "service_code": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "example": { + "message": "Import completed successfully.", + "data": { + "imported_count": 10, + "failed_count": 1, + "failed_rows": [ + { + "row": 4, + "errors": [ + "The service code has already been taken." + ], + "values": { + "service_code": "SVC-001" + } + } + ] + } + } + } + } + } + } + } + }, + "/api/get-vehicle-owners": { + "get": { + "tags": [ + "Vehicles" + ], + "summary": "Get Vehicle Owners", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + } + }, + "/api/link-customer-to-vehicle": { + "post": { + "tags": [ + "Vehicles" + ], + "summary": "Link Customer to Vehicle", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + } + } + }, + "example": { + "customer_id": 1, + "vehicle_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "image": { + "type": "string", + "nullable": true + }, + "image_url": { + "type": "string", + "nullable": true + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "mileage": { + "type": "string" + }, + "note": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "customers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "image": null, + "image_url": null, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_size": "2.5L", + "drivetrain": "FWD", + "mileage": "10000", + "note": "New vehicle", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "customers": [ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john@example.com" + } + ] + } + } + } + } + } + } + } + }, + "/api/unlink-customer-from-vehicle": { + "post": { + "tags": [ + "Vehicles" + ], + "summary": "Unlink Customer from Vehicle", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + } + } + }, + "example": { + "customer_id": 1, + "vehicle_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "vehicle_body_type_id": { + "type": "integer" + }, + "vehicle_fuel_type_id": { + "type": "integer" + }, + "vehicle_transmission_id": { + "type": "integer" + }, + "vehicle_color_id": { + "type": "integer" + }, + "image": { + "type": "string", + "nullable": true + }, + "image_url": { + "type": "string", + "nullable": true + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "string" + }, + "sub_model": { + "type": "string" + }, + "license_plate": { + "type": "string" + }, + "vin_number": { + "type": "string" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "mileage": { + "type": "string" + }, + "note": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "customers": { + "type": "array", + "items": {} + } + } + } + } + }, + "example": { + "message": "Removed successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "vehicle_body_type_id": 1, + "vehicle_fuel_type_id": 1, + "vehicle_transmission_id": 1, + "vehicle_color_id": 1, + "image": null, + "image_url": null, + "make": "Toyota", + "model": "Camry", + "year": "2024", + "sub_model": "LE", + "license_plate": "ABC-123", + "vin_number": "1HGBH41JXMN109186", + "engine_size": "2.5L", + "drivetrain": "FWD", + "mileage": "10000", + "note": "New vehicle", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "customers": [] + } + } + } + } + } + } + } + }, + "/api/document-types": { + "get": { + "tags": [ + "Document Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Document Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Registration" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/document-types/{id}": { + "put": { + "tags": [ + "Document Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Registration" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Document Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-documents": { + "get": { + "tags": [ + "Vehicle Documents" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Documents" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vehicle_id": { + "type": "integer" + }, + "document_type_id": { + "type": "integer" + } + } + }, + "example": { + "vehicle_id": 1, + "document_type_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vehicle-documents/{id}": { + "put": { + "tags": [ + "Vehicle Documents" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {} + }, + "example": {} + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Documents" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vehicle-mile-and-kms": { + "get": { + "tags": [ + "Vehicle Mile and Kms" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vehicle Mile and Kms" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vehicle_id": { + "type": "integer" + }, + "mileage": { + "type": "integer" + } + } + }, + "example": { + "vehicle_id": 1, + "mileage": 50000 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vehicle-mile-and-kms/{id}": { + "put": { + "tags": [ + "Vehicle Mile and Kms" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mileage": { + "type": "integer" + } + } + }, + "example": { + "mileage": 51000 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vehicle Mile and Kms" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/departments": { + "get": { + "tags": [ + "Departments" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Departments" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "assignment_type": { + "type": "string" + } + } + }, + "example": { + "name": "Mechanical", + "assignment_type": "bays" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/departments/{id}": { + "put": { + "tags": [ + "Departments" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "example": { + "name": "Mechanical" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Departments" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-favorite-department": { + "post": { + "tags": [ + "Departments" + ], + "summary": "Set Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-favorite-department": { + "post": { + "tags": [ + "Departments" + ], + "summary": "Remove Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/employees": { + "get": { + "tags": [ + "Employees" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "track_attendance": { + "type": "boolean" + }, + "notify_owner_when_punch_in_out": { + "type": "boolean" + }, + "shop_calender_id": { + "type": "integer" + }, + "shop_timing_id": { + "type": "integer" + }, + "geo_fence_radius": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "shop_calender": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "shop_timing": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "has_active_time_sheet": { + "type": "boolean" + }, + "active_time_sheet": { + "type": "string", + "nullable": true + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com", + "phone": "0501234567", + "department_id": 1, + "position": "Technician", + "status": "active", + "type": "employee", + "track_attendance": true, + "notify_owner_when_punch_in_out": false, + "shop_calender_id": 1, + "shop_timing_id": 1, + "geo_fence_radius": 100, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:00:00.000000Z", + "department": { + "id": 1, + "name": "Mechanical" + }, + "shop_calender": { + "id": 1, + "title": "Default Calendar" + }, + "shop_timing": { + "id": 1, + "title": "Regular Shift" + }, + "has_active_time_sheet": false, + "active_time_sheet": null + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Employees" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "track_attendance": { + "type": "boolean" + }, + "notify_owner_when_punch_in_out": { + "type": "boolean" + }, + "shop_calender_id": { + "type": "integer" + }, + "shop_timing_id": { + "type": "integer" + }, + "geo_fence_radius": { + "type": "integer" + } + } + }, + "example": { + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com", + "phone": "0501234567", + "department_id": 1, + "position": "Technician", + "status": "active", + "type": "employee", + "track_attendance": true, + "notify_owner_when_punch_in_out": false, + "shop_calender_id": 1, + "shop_timing_id": 1, + "geo_fence_radius": 100 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "track_attendance": { + "type": "boolean" + }, + "notify_owner_when_punch_in_out": { + "type": "boolean" + }, + "shop_calender_id": { + "type": "integer" + }, + "shop_timing_id": { + "type": "integer" + }, + "geo_fence_radius": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "has_active_time_sheet": { + "type": "boolean" + }, + "active_time_sheet": { + "type": "string", + "nullable": true + } + } + } + } + }, + "example": { + "message": "Employee created successfully.", + "data": { + "id": 1, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com", + "phone": "0501234567", + "department_id": 1, + "position": "Technician", + "status": "active", + "type": "employee", + "track_attendance": true, + "notify_owner_when_punch_in_out": false, + "shop_calender_id": 1, + "shop_timing_id": 1, + "geo_fence_radius": 100, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:00:00.000000Z", + "department": { + "id": 1, + "name": "Mechanical" + }, + "has_active_time_sheet": false, + "active_time_sheet": null + } + } + } + } + } + } + } + }, + "/api/employees/{id}": { + "put": { + "tags": [ + "Employees" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "position": { + "type": "string" + }, + "shop_timing_id": { + "type": "integer" + } + } + }, + "example": { + "first_name": "Jane", + "last_name": "Smith", + "status": "inactive", + "position": "Senior Technician", + "shop_timing_id": 2 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "track_attendance": { + "type": "boolean" + }, + "notify_owner_when_punch_in_out": { + "type": "boolean" + }, + "shop_calender_id": { + "type": "integer" + }, + "shop_timing_id": { + "type": "integer" + }, + "geo_fence_radius": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "has_active_time_sheet": { + "type": "boolean" + }, + "active_time_sheet": { + "type": "string", + "nullable": true + } + } + } + } + }, + "example": { + "message": "Employee updated successfully.", + "data": { + "id": 1, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com", + "phone": "0501234567", + "department_id": 1, + "position": "Senior Technician", + "status": "inactive", + "type": "employee", + "track_attendance": true, + "notify_owner_when_punch_in_out": false, + "shop_calender_id": 1, + "shop_timing_id": 2, + "geo_fence_radius": 100, + "created_at": "2026-03-24T12:00:00.000000Z", + "updated_at": "2026-03-24T12:10:00.000000Z", + "has_active_time_sheet": false, + "active_time_sheet": null + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Employees" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Employee deleted successfully." + } + } + } + } + } + } + }, + "/api/unit-types": { + "get": { + "tags": [ + "Unit Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Unit Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Hour" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/unit-types/{id}": { + "put": { + "tags": [ + "Unit Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Hour" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Unit Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-favorite-unit-type": { + "post": { + "tags": [ + "Unit Types" + ], + "summary": "Set Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-favorite-unit-type": { + "post": { + "tags": [ + "Unit Types" + ], + "summary": "Remove Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/inventory-categories": { + "get": { + "tags": [ + "Inventory Categories" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Inventory Categories" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "shop_type_id": { + "type": "integer" + } + } + }, + "example": { + "title": "Parts", + "shop_type_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inventory-categories/{id}": { + "put": { + "tags": [ + "Inventory Categories" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Parts" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Inventory Categories" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-favorite-inventory-category": { + "post": { + "tags": [ + "Inventory Categories" + ], + "summary": "Set Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-favorite-inventory-category": { + "post": { + "tags": [ + "Inventory Categories" + ], + "summary": "Remove Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/labor-rates": { + "get": { + "tags": [ + "Labor Rates" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Labor Rates" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "rate": { + "type": "integer" + } + } + }, + "example": { + "title": "Standard", + "rate": 75 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/labor-rates/{id}": { + "put": { + "tags": [ + "Labor Rates" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "rate": { + "type": "integer" + } + } + }, + "example": { + "title": "Standard", + "rate": 80 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Labor Rates" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-favorite-labor-rate": { + "post": { + "tags": [ + "Labor Rates" + ], + "summary": "Set Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-favorite-labor-rate": { + "post": { + "tags": [ + "Labor Rates" + ], + "summary": "Remove Favorite", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/vendors": { + "get": { + "tags": [ + "Vendors" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vendors" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "example": { + "first_name": "Vendor", + "last_name": "Name", + "company_name": "ACME", + "email": "vendor@example.com" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vendors/{id}": { + "put": { + "tags": [ + "Vendors" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "company_name": { + "type": "string" + } + } + }, + "example": { + "company_name": "ACME Inc" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vendors" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/toggle-vendor-status": { + "post": { + "tags": [ + "Vendors" + ], + "summary": "Toggle Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/create-vendor-address": { + "post": { + "tags": [ + "Vendors" + ], + "summary": "Create Vendor Address", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "vendor_id": { + "type": "integer" + }, + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "example": { + "vendor_id": 1, + "address_line_1": "123 Main St", + "address_line_2": "Suite 100", + "country_id": 1, + "state_id": 1, + "city": "New York", + "zip_code": "10001", + "phone_number": "555-1234", + "title": "Main Office" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vendor-address/{id}": { + "get": { + "tags": [ + "Vendors" + ], + "summary": "Get Vendor Address", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-categories": { + "get": { + "tags": [ + "Inspection Categories" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Inspection Categories" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inspection_name": { + "type": "string" + } + } + }, + "example": { + "inspection_name": "Brake Check" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-categories/{id}": { + "put": { + "tags": [ + "Inspection Categories" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inspection_name": { + "type": "string" + } + } + }, + "example": { + "inspection_name": "Brake Check" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Inspection Categories" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/inspections": { + "get": { + "tags": [ + "Inspections" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Inspections" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "inspection_category_id": { + "type": "integer" + }, + "employee_id": { + "type": "integer" + }, + "order_number": { + "type": "string" + }, + "date": { + "type": "string" + }, + "time": { + "type": "string" + } + } + }, + "example": { + "title": "Pre-purchase", + "customer_id": 1, + "vehicle_id": 1, + "department_id": 1, + "inspection_category_id": 1, + "employee_id": 1, + "order_number": "ORD-001", + "date": "2026-03-16", + "time": "10:00:00" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspections/{id}": { + "put": { + "tags": [ + "Inspections" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "title": "Pre-purchase", + "note": "Updated note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Inspections" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/change-inspection-status": { + "post": { + "tags": [ + "Inspections" + ], + "summary": "Change Inspection Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "status": { + "type": "string" + } + } + }, + "example": { + "id": 1, + "status": "completed" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/labels": { + "get": { + "tags": [ + "Labels" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Labels" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Urgent", + "color_code": "#FF0000" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/labels/{id}": { + "put": { + "tags": [ + "Labels" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Urgent", + "color_code": "#FF0000" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Labels" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/insurance-types": { + "get": { + "tags": [ + "Insurance Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Insurance Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Comprehensive" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/insurance-types/{id}": { + "put": { + "tags": [ + "Insurance Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Comprehensive" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Insurance Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/estimates": { + "get": { + "tags": [ + "Estimates" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Estimates" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "estimate_number": { + "type": "string" + }, + "date": { + "type": "string" + }, + "has_insurance": { + "type": "boolean" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "remarks": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "example": { + "title": "Estimate 001", + "customer_id": 1, + "vehicle_id": 1, + "department_id": 1, + "estimate_number": "EST-001", + "date": "2026-03-16", + "has_insurance": false, + "label_ids": [ + 1 + ], + "remarks": [ + "Customer note" + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/estimates/{id}": { + "put": { + "tags": [ + "Estimates" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "remarks": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "example": { + "title": "Estimate 001", + "label_ids": [ + 1, + 2 + ], + "remarks": [ + "Updated note" + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Estimates" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/quick-remark": { + "get": { + "tags": [ + "Quick Remark" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Quick Remark" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + } + }, + "example": { + "description": "Needs follow-up" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/quick-remark/{id}": { + "put": { + "tags": [ + "Quick Remark" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + } + }, + "example": { + "description": "Needs follow-up" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Quick Remark" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/quick-notes": { + "get": { + "tags": [ + "Quick Notes" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Quick Notes" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + } + }, + "example": { + "description": "Quick note text" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/quick-notes/{id}": { + "put": { + "tags": [ + "Quick Notes" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + } + }, + "example": { + "description": "Updated note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Quick Notes" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/reasons": { + "get": { + "tags": [ + "Reasons" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "Customer request", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Reasons" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Customer request" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Reason created successfully.", + "data": { + "id": 1, + "title": "Customer request", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/reasons/{id}": { + "put": { + "tags": [ + "Reasons" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Updated reason title" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Reason updated successfully.", + "data": { + "id": 1, + "title": "Updated reason title", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Reasons" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Reason deleted successfully." + } + } + } + } + } + } + }, + "/api/check-point-label": { + "get": { + "tags": [ + "Check Point Label" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Check Point Label" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Pass", + "color_code": "#00FF00" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/check-point-label/{id}": { + "put": { + "tags": [ + "Check Point Label" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Pass", + "color_code": "#00FF00" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Check Point Label" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/inspection-check-points": { + "get": { + "tags": [ + "Inspection Check Points" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inspection_id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "record_type": { + "type": "string" + }, + "condition_rate": { + "type": "integer" + } + } + }, + "example": { + "inspection_id": 1, + "name": "Brake pads", + "description": "Check thickness", + "record_type": "record_conditions", + "condition_rate": 85 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-check-points/{id}": { + "put": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "record_type": { + "type": "string" + }, + "condition_rate": { + "type": "integer" + }, + "file": { + "type": "string", + "nullable": true + } + } + }, + "example": { + "name": "Brake pads", + "record_type": "record_conditions", + "condition_rate": 90, + "file": null + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/toggle-label-to-checkpoint": { + "post": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Toggle Label to Checkpoint", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inspection_check_point_id": { + "type": "integer" + }, + "check_point_label_id": { + "type": "integer" + } + } + }, + "example": { + "inspection_check_point_id": 1, + "check_point_label_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-check-points/change-status": { + "post": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Change Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inspection_check_point_id": { + "type": "integer" + }, + "status": { + "type": "string" + } + } + }, + "example": { + "inspection_check_point_id": 1, + "status": "passed" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-check-points/add-attachment": { + "post": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "inspection_check_point_id": { + "type": "string" + }, + "attachment": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-check-points/{id}/upload-media": { + "post": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Upload Media", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inspection-check-points/{id}/media": { + "delete": { + "tags": [ + "Inspection Check Points" + ], + "summary": "Remove Media", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/job-cards": { + "get": { + "tags": [ + "Job Cards" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "status": { + "type": "string" + } + } + }, + "example": { + "title": "Job Card 001", + "customer_id": 1, + "vehicle_id": 1, + "status": "draft" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}": { + "put": { + "tags": [ + "Job Cards" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "status": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "check_in_date": { + "type": "string" + }, + "km_in": { + "type": "integer" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "example": { + "title": "Job Card 001 Updated", + "status": "check_in", + "department_id": 1, + "check_in_date": "2026-03-18", + "km_in": 50000, + "label_ids": [ + 1 + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Job Cards" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/job-cards/{id}/change-date": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Change Date", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "order_date": { + "type": "string" + } + } + }, + "example": { + "order_date": "2026-03-18" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/change-status": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Change Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string" + } + } + }, + "example": { + "status": "in_progress" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/add-customer-remark": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Add Customer Remark", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "remark": { + "type": "string" + } + } + }, + "example": { + "remark": "Customer requested wash" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/edit-customer-remark": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Edit Customer Remark", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customer_remark_id": { + "type": "integer" + }, + "remark": { + "type": "string" + } + } + }, + "example": { + "customer_remark_id": 1, + "remark": "Updated remark" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/delete-customer-remark": { + "delete": { + "tags": [ + "Job Cards" + ], + "summary": "Delete Customer Remark", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/job-cards/{id}/add-shop-recommendation": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Add Shop Recommendation", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "recommendation": { + "type": "string" + } + } + }, + "example": { + "recommendation": "Replace brake pads" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/edit-shop-recommendation": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Edit Shop Recommendation", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "shop_recommendation_id": { + "type": "integer" + }, + "recommendation": { + "type": "string" + } + } + }, + "example": { + "shop_recommendation_id": 1, + "recommendation": "Updated recommendation" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/delete-shop-recommendation": { + "delete": { + "tags": [ + "Job Cards" + ], + "summary": "Delete Shop Recommendation", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/job-cards/{id}/add-attachment": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/delete-attachment": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/job-cards/{id}/change-service-writer-id": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Change Service Writer", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_writer_id": { + "type": "integer" + } + } + }, + "example": { + "service_writer_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/job-cards/{id}/change-sales-person-id": { + "post": { + "tags": [ + "Job Cards" + ], + "summary": "Change Sales Person", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sales_person_id": { + "type": "integer" + } + } + }, + "example": { + "sales_person_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/payment-mode": { + "get": { + "tags": [ + "Payment Modes" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Payment Modes" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Cash", + "is_default": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/payment-mode/{id}": { + "put": { + "tags": [ + "Payment Modes" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Bank Transfer", + "is_default": false + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Payment Modes" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/payment-recieved": { + "get": { + "tags": [ + "Payment Received" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Payment Received" + ], + "summary": "Create", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "job_card_id": { + "type": "string" + }, + "payment_mode_id": { + "type": "string" + }, + "customer_id": { + "type": "string" + }, + "amount_received": { + "type": "string" + }, + "payment_number": { + "type": "string" + }, + "payment_date": { + "type": "string" + }, + "note": { + "type": "string" + }, + "attachment_files[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/payment-recieved/{id}": { + "post": { + "tags": [ + "Payment Received" + ], + "summary": "Update", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "_method": { + "type": "string" + }, + "amount_received": { + "type": "string" + }, + "note": { + "type": "string" + }, + "delete_attachment_ids[]": { + "type": "string" + }, + "attachment_files[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Payment Received" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/parts": { + "get": { + "tags": [ + "Parts" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "part_number": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "manufactured_by": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "pricing_matrix": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "sales_chart_of_account": { + "type": "integer" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "integer" + }, + "purchase_preferred_vendor_id": { + "type": "integer" + }, + "purchase_price": { + "type": "string" + }, + "track_inventory": { + "type": "boolean" + }, + "opening_stock": { + "type": "integer" + }, + "as_on_date": { + "type": "string" + }, + "min_stock": { + "type": "integer" + }, + "max_stock": { + "type": "integer" + }, + "inventory_chart_of_account": { + "type": "integer" + }, + "tracking_type": { + "type": "integer" + }, + "inventory_purchase_price": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "title": "Brake Pad", + "sku": "BP-001", + "part_number": "BP-001-A", + "unit_type_id": 1, + "manufactured_by": "Bosch", + "description": "Front brake pad set", + "location": "Rack A-3", + "pricing_matrix": "Standard", + "department_id": 1, + "sales_information": true, + "selling_price": "45.00", + "sales_chart_of_account": 4000, + "purchase_information": true, + "purchase_chart_of_account": 5000, + "purchase_preferred_vendor_id": 1, + "purchase_price": "25.00", + "track_inventory": true, + "opening_stock": 10, + "as_on_date": "2026-03-20", + "min_stock": 2, + "max_stock": 50, + "inventory_chart_of_account": 3000, + "tracking_type": 1, + "inventory_purchase_price": "24.00", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Parts" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "selling_price": { + "type": "integer" + }, + "purchase_price": { + "type": "integer" + } + } + }, + "example": { + "shop_type_id": 1, + "category_id": 1, + "title": "Brake Pad", + "sku": "BP-001", + "unit_type_id": 1, + "department_id": 1, + "description": "Front brake pad set", + "selling_price": 45, + "purchase_price": 25 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "part_number": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "manufactured_by": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "pricing_matrix": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "sales_chart_of_account": { + "type": "integer" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "integer" + }, + "purchase_preferred_vendor_id": { + "type": "integer" + }, + "purchase_price": { + "type": "string" + }, + "track_inventory": { + "type": "boolean" + }, + "opening_stock": { + "type": "integer" + }, + "as_on_date": { + "type": "string" + }, + "min_stock": { + "type": "integer" + }, + "max_stock": { + "type": "integer" + }, + "inventory_chart_of_account": { + "type": "integer" + }, + "tracking_type": { + "type": "integer" + }, + "inventory_purchase_price": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "title": "Brake Pad", + "sku": "BP-001", + "part_number": "BP-001-A", + "unit_type_id": 1, + "manufactured_by": "Bosch", + "description": "Front brake pad set", + "location": "Rack A-3", + "pricing_matrix": "Standard", + "department_id": 1, + "sales_information": true, + "selling_price": "45.00", + "sales_chart_of_account": 4000, + "purchase_information": true, + "purchase_chart_of_account": 5000, + "purchase_preferred_vendor_id": 1, + "purchase_price": "25.00", + "track_inventory": true, + "opening_stock": 10, + "as_on_date": "2026-03-20", + "min_stock": 2, + "max_stock": 50, + "inventory_chart_of_account": 3000, + "tracking_type": 1, + "inventory_purchase_price": "24.00", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/parts/{id}": { + "put": { + "tags": [ + "Parts" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "title": "Brake Pad Updated", + "selling_price": 50 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "part_number": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "manufactured_by": { + "type": "string" + }, + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "pricing_matrix": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "sales_information": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "sales_chart_of_account": { + "type": "integer" + }, + "purchase_information": { + "type": "boolean" + }, + "purchase_chart_of_account": { + "type": "integer" + }, + "purchase_preferred_vendor_id": { + "type": "integer" + }, + "purchase_price": { + "type": "string" + }, + "track_inventory": { + "type": "boolean" + }, + "opening_stock": { + "type": "integer" + }, + "as_on_date": { + "type": "string" + }, + "min_stock": { + "type": "integer" + }, + "max_stock": { + "type": "integer" + }, + "inventory_chart_of_account": { + "type": "integer" + }, + "tracking_type": { + "type": "integer" + }, + "inventory_purchase_price": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "category_id": 1, + "title": "Brake Pad Updated", + "sku": "BP-001", + "part_number": "BP-001-A", + "unit_type_id": 1, + "manufactured_by": "Bosch", + "description": "Front brake pad set", + "location": "Rack A-3", + "pricing_matrix": "Standard", + "department_id": 1, + "sales_information": true, + "selling_price": "50.00", + "sales_chart_of_account": 4000, + "purchase_information": true, + "purchase_chart_of_account": 5000, + "purchase_preferred_vendor_id": 1, + "purchase_price": "25.00", + "track_inventory": true, + "opening_stock": 10, + "as_on_date": "2026-03-20", + "min_stock": 2, + "max_stock": 50, + "inventory_chart_of_account": 3000, + "tracking_type": 1, + "inventory_purchase_price": "24.00", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Parts" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/import-parts": { + "post": { + "tags": [ + "Parts" + ], + "summary": "Import", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "imported_count": { + "type": "integer" + }, + "failed_count": { + "type": "integer" + }, + "failed_rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "row": { + "type": "integer" + }, + "errors": { + "type": "array", + "items": { + "type": "string" + } + }, + "values": { + "type": "object", + "properties": { + "sku": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "example": { + "message": "Import completed successfully.", + "data": { + "imported_count": 8, + "failed_count": 1, + "failed_rows": [ + { + "row": 4, + "errors": [ + "The sku has already been taken." + ], + "values": { + "sku": "BP-001" + } + } + ] + } + } + } + } + } + } + } + }, + "/api/export-parts": { + "post": { + "tags": [ + "Parts" + ], + "summary": "Export", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "search": { + "type": "string" + }, + "shop_type_id": { + "type": "string", + "nullable": true + }, + "category_id": { + "type": "string", + "nullable": true + }, + "department_id": { + "type": "string", + "nullable": true + } + } + }, + "example": { + "search": "", + "shop_type_id": null, + "category_id": null, + "department_id": null + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Export generated successfully." + } + } + } + } + } + } + }, + "/api/toggle-part-status": { + "post": { + "tags": [ + "Parts" + ], + "summary": "Toggle Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Status updated successfully." + } + } + } + } + } + } + }, + "/api/purchase-orders": { + "get": { + "tags": [ + "Purchase Orders" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + }, + "shop_type_id": { + "type": "integer" + }, + "code": { + "type": "string" + }, + "inventory_category_id": { + "type": "integer" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "service_description": { + "type": "string" + }, + "show_as_lump_sum": { + "type": "boolean" + }, + "mark_as_recommended": { + "type": "boolean" + }, + "set_packaged_pricing": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "selling_chart_of_account": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "inventory_category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "service_name": "Engine Service Group", + "shop_type_id": 1, + "code": "SG-001", + "inventory_category_id": 1, + "unit_type_id": 1, + "department_id": 1, + "service_description": "Common engine services", + "show_as_lump_sum": false, + "mark_as_recommended": true, + "set_packaged_pricing": false, + "selling_price": "100.00", + "selling_chart_of_account": "4000", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "inventory_category": { + "id": 1, + "title": "Engine" + }, + "unit_type": { + "id": 1, + "name": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + } + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Purchase Orders" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "job_card_id": { + "type": "integer" + }, + "vendor_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "order_number": { + "type": "string" + }, + "order_date": { + "type": "string" + }, + "delivery_date": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "job_card_id": 1, + "vendor_id": 1, + "title": "PO-001", + "order_number": "PO-2026-001", + "order_date": "2026-03-19", + "delivery_date": "2026-03-25", + "department_id": 1, + "notes": "Urgent order", + "label_ids": [ + 1 + ], + "items": [ + { + "part_id": 1, + "quantity": 5, + "rate": 25, + "description": "Brake pads" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + }, + "shop_type_id": { + "type": "integer" + }, + "code": { + "type": "string" + }, + "inventory_category_id": { + "type": "integer" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "service_description": { + "type": "string" + }, + "show_as_lump_sum": { + "type": "boolean" + }, + "mark_as_recommended": { + "type": "boolean" + }, + "set_packaged_pricing": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "selling_chart_of_account": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "inventory_category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Service group created successfully.", + "data": { + "id": 1, + "service_name": "Engine Service Group", + "shop_type_id": 1, + "code": "SG-001", + "inventory_category_id": 1, + "unit_type_id": 1, + "department_id": 1, + "service_description": "Common engine services", + "show_as_lump_sum": false, + "mark_as_recommended": true, + "set_packaged_pricing": false, + "selling_price": "100.00", + "selling_chart_of_account": "4000", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "inventory_category": { + "id": 1, + "title": "Engine" + }, + "unit_type": { + "id": 1, + "name": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + } + } + } + } + } + } + } + } + }, + "/api/purchase-orders/{id}": { + "put": { + "tags": [ + "Purchase Orders" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "title": "PO-001 Updated", + "notes": "Updated notes", + "label_ids": [ + 1, + 2 + ], + "items": [ + { + "part_id": 1, + "quantity": 10, + "rate": 22, + "description": "Brake pads bulk" + } + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + }, + "shop_type_id": { + "type": "integer" + }, + "code": { + "type": "string" + }, + "inventory_category_id": { + "type": "integer" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "service_description": { + "type": "string" + }, + "show_as_lump_sum": { + "type": "boolean" + }, + "mark_as_recommended": { + "type": "boolean" + }, + "set_packaged_pricing": { + "type": "boolean" + }, + "selling_price": { + "type": "string" + }, + "selling_chart_of_account": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "inventory_category": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "unit_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "department": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Service group updated successfully.", + "data": { + "id": 1, + "service_name": "Engine Service Group Updated", + "shop_type_id": 1, + "code": "SG-001", + "inventory_category_id": 1, + "unit_type_id": 1, + "department_id": 1, + "service_description": "Common engine services", + "show_as_lump_sum": false, + "mark_as_recommended": true, + "set_packaged_pricing": false, + "selling_price": "125.00", + "selling_chart_of_account": "4000", + "is_active": true, + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "inventory_category": { + "id": 1, + "title": "Engine" + }, + "unit_type": { + "id": 1, + "name": "Hour" + }, + "department": { + "id": 1, + "name": "Service Department" + } + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Purchase Orders" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Service group deleted successfully." + } + } + } + } + } + } + }, + "/api/services": { + "get": { + "tags": [ + "Services" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Services" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "shop_type_id": { + "type": "integer" + }, + "category_id": { + "type": "integer" + }, + "labor_name": { + "type": "string" + }, + "service_code": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "labor_matrix": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "shop_type_id": 1, + "category_id": 1, + "labor_name": "Oil Change", + "service_code": "SVC-001", + "unit_type_id": 1, + "labor_matrix": "Standard", + "department_id": 1, + "description": "Full synthetic oil change", + "selling_price": 75 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/services/{id}": { + "put": { + "tags": [ + "Services" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "labor_name": { + "type": "string" + }, + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "labor_name": "Oil Change Premium", + "selling_price": 85 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Services" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/import-services": { + "post": { + "tags": [ + "Services" + ], + "summary": "Import", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Import completed successfully." + } + } + } + } + } + } + }, + "/api/export-services": { + "post": { + "tags": [ + "Services" + ], + "summary": "Export", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "search": { + "type": "string" + }, + "shop_type_id": { + "type": "string", + "nullable": true + }, + "category_id": { + "type": "string", + "nullable": true + }, + "department_id": { + "type": "string", + "nullable": true + } + } + }, + "example": { + "search": "", + "shop_type_id": null, + "category_id": null, + "department_id": null + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Export generated successfully." + } + } + } + } + } + } + }, + "/api/expense-items": { + "get": { + "tags": [ + "Expense Items" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Expense Items" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "item_type": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "item_name": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "selling_price": { + "type": "integer" + }, + "purchase_price": { + "type": "integer" + } + } + }, + "example": { + "item_type": "Office Supply", + "category_id": 1, + "item_name": "Printer Paper", + "sku": "EXP-001", + "unit_type_id": 1, + "department_id": 1, + "description": "A4 printer paper", + "selling_price": 15, + "purchase_price": 10 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/expense-items/{id}": { + "put": { + "tags": [ + "Expense Items" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "item_name": { + "type": "string" + }, + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "item_name": "Printer Paper A4", + "selling_price": 18 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Expense Items" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/toggle-expense-item-status": { + "post": { + "tags": [ + "Expense Items" + ], + "summary": "Toggle Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/bills": { + "get": { + "tags": [ + "Bills" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Bills" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "job_card_id": { + "type": "integer" + }, + "vendor_id": { + "type": "integer" + }, + "vendor_address_id": { + "type": "integer" + }, + "bill_date": { + "type": "string" + }, + "bill_due_date": { + "type": "string" + }, + "payment_terms_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "chart_of_account": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "title": "Bill 001", + "job_card_id": 1, + "vendor_id": 1, + "vendor_address_id": 1, + "bill_date": "2026-03-19", + "bill_due_date": "2026-04-19", + "payment_terms_id": 1, + "department_id": 1, + "notes": "Monthly bill", + "label_ids": [ + 1 + ], + "items": [ + { + "part_id": 1, + "quantity": 3, + "rate": 25, + "chart_of_account": null, + "description": "Brake pads" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/bills/{id}": { + "put": { + "tags": [ + "Bills" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "title": "Bill 001 Updated", + "notes": "Updated notes", + "label_ids": [ + 1, + 2 + ], + "items": [ + { + "part_id": 1, + "quantity": 5, + "rate": 22, + "description": "Brake pads bulk" + } + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Bills" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/expenses": { + "get": { + "tags": [ + "Expenses" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Expenses" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "job_card_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "vendor_id": { + "type": "integer" + }, + "invoice_number": { + "type": "string" + }, + "expense_date": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_item_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "chart_of_account": { + "type": "string", + "nullable": true + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "job_card_id": 1, + "title": "Office Supplies", + "category_id": 1, + "vendor_id": 1, + "invoice_number": "INV-001", + "expense_date": "2026-03-19", + "department_id": 1, + "notes": "Monthly office expense", + "status": "open", + "label_ids": [ + 1 + ], + "items": [ + { + "expense_item_id": 1, + "quantity": 2, + "rate": 15, + "chart_of_account": null, + "description": "Printer paper" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/expenses/{id}": { + "put": { + "tags": [ + "Expenses" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "status": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_item_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "title": "Office Supplies Updated", + "status": "paid", + "label_ids": [ + 1, + 2 + ], + "items": [ + { + "expense_item_id": 1, + "quantity": 5, + "rate": 12, + "description": "Printer paper bulk" + } + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Expenses" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/task-types": { + "get": { + "tags": [ + "Task Types" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Task Types" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Maintenance", + "is_default": false + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/task-types/{id}": { + "put": { + "tags": [ + "Task Types" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Maintenance Updated" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Task Types" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-task-type": { + "post": { + "tags": [ + "Task Types" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-default-task-type": { + "post": { + "tags": [ + "Task Types" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/task-sections": { + "get": { + "tags": [ + "Task Sections" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Task Sections" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "To Do", + "arrangement": 1, + "is_default": false + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/task-sections/{id}": { + "put": { + "tags": [ + "Task Sections" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "To Do Updated" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Task Sections" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-task-section": { + "post": { + "tags": [ + "Task Sections" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-default-task-section": { + "post": { + "tags": [ + "Task Sections" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/change-task-section-arrangement": { + "post": { + "tags": [ + "Task Sections" + ], + "summary": "Change Arrangement", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "arrangement": { + "type": "integer" + } + } + }, + "example": { + "id": 1, + "arrangement": 3 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/tasks": { + "get": { + "tags": [ + "Tasks" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Tasks" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "task_type_id": { + "type": "integer" + }, + "task_section_id": { + "type": "integer" + }, + "job_card_id": { + "type": "integer" + }, + "subject": { + "type": "string" + }, + "description": { + "type": "string" + }, + "owner_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "priority": { + "type": "integer" + }, + "due_date": { + "type": "string" + }, + "task_number": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "example": { + "task_type_id": 1, + "task_section_id": 1, + "job_card_id": 1, + "subject": "Replace brake pads", + "description": "Front and rear brake pads need replacement", + "owner_id": 1, + "department_id": 1, + "priority": 2, + "due_date": "2026-03-25", + "task_number": "TSK-001", + "status": "pending" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/tasks/{id}": { + "put": { + "tags": [ + "Tasks" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "priority": { + "type": "integer" + }, + "due_date": { + "type": "string" + } + } + }, + "example": { + "subject": "Replace brake pads - Updated", + "priority": 3, + "due_date": "2026-03-28" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Tasks" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/tasks/{id}/complete": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Complete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/appointments": { + "get": { + "tags": [ + "Appointments" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Appointments" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "date": { + "type": "string" + }, + "from_time": { + "type": "string" + }, + "to_time": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "service_writer_id": { + "type": "integer" + }, + "technician_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "job_card_id": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "example": { + "title": "Brake Inspection", + "date": "2026-03-25", + "from_time": "09:00", + "to_time": "10:00", + "customer_id": 1, + "vehicle_id": 1, + "service_writer_id": 1, + "technician_id": 1, + "department_id": 1, + "job_card_id": 1, + "notes": "Customer requested morning slot", + "label_ids": [ + 1 + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/appointments/{id}": { + "put": { + "tags": [ + "Appointments" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "date": { + "type": "string" + }, + "from_time": { + "type": "string" + }, + "to_time": { + "type": "string" + }, + "label_ids": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "example": { + "title": "Brake Inspection Updated", + "date": "2026-03-26", + "from_time": "14:00", + "to_time": "15:00", + "label_ids": [ + 1, + 2 + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Appointments" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/appointments/{id}/un-link-job-card": { + "post": { + "tags": [ + "Appointments" + ], + "summary": "Unlink Job Card", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/invoice-sequences": { + "get": { + "tags": [ + "Invoice Sequences" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Invoice Sequences" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "sequence_title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "auto_generate": { + "type": "boolean" + }, + "prefix": { + "type": "string" + }, + "start_number": { + "type": "integer" + }, + "department_id": { + "type": "integer" + } + } + }, + "example": { + "title": "Default Invoice Sequence", + "sequence_title": "INV 2026", + "is_default": true, + "auto_generate": true, + "prefix": "INV-", + "start_number": 1, + "department_id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoice-sequences/{id}": { + "put": { + "tags": [ + "Invoice Sequences" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "start_number": { + "type": "integer" + } + } + }, + "example": { + "title": "Updated Sequence", + "prefix": "INV-2026-", + "start_number": 100 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Invoice Sequences" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-invoice-sequence": { + "post": { + "tags": [ + "Invoice Sequences" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-default-invoice-sequence": { + "post": { + "tags": [ + "Invoice Sequences" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Removed successfully." + } + } + } + } + } + } + }, + "/api/service-groups": { + "get": { + "tags": [ + "Service Groups" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Service Groups" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_name": { + "type": "string" + }, + "shop_type_id": { + "type": "integer" + }, + "code": { + "type": "string" + }, + "inventory_category_id": { + "type": "integer" + }, + "unit_type_id": { + "type": "integer" + }, + "department_id": { + "type": "integer" + }, + "service_description": { + "type": "string" + }, + "show_as_lump_sum": { + "type": "boolean" + }, + "mark_as_recommended": { + "type": "boolean" + }, + "set_packaged_pricing": { + "type": "boolean" + }, + "selling_price": { + "type": "integer" + }, + "selling_chart_of_account": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + } + }, + "example": { + "service_name": "Engine Service Group", + "shop_type_id": 1, + "code": "SG-001", + "inventory_category_id": 1, + "unit_type_id": 1, + "department_id": 1, + "service_description": "Common engine services", + "show_as_lump_sum": false, + "mark_as_recommended": true, + "set_packaged_pricing": false, + "selling_price": 100, + "selling_chart_of_account": "4000", + "is_active": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/service-groups/{id}": { + "put": { + "tags": [ + "Service Groups" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_name": { + "type": "string" + }, + "selling_price": { + "type": "integer" + }, + "is_active": { + "type": "boolean" + } + } + }, + "example": { + "service_name": "Engine Service Group Updated", + "selling_price": 125, + "is_active": true + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service Groups" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/service-groups/{id}/add-label": { + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Add Label", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "label_id": { + "type": "integer" + } + } + }, + "example": { + "label_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "message": "Label added to service group successfully.", + "data": { + "id": 1, + "service_name": "Engine Service Group", + "labels": [ + { + "id": 1, + "title": "Recommended", + "color_code": "#00AAFF" + } + ] + } + } + } + } + } + } + } + }, + "/api/service-groups/{id}/delete-label": { + "delete": { + "tags": [ + "Service Group Details" + ], + "summary": "Delete Label", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "label_id": { + "type": "integer" + } + } + }, + "example": { + "label_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + }, + "labels": { + "type": "array", + "items": {} + } + } + } + } + }, + "example": { + "message": "Label removed from service group successfully.", + "data": { + "id": 1, + "service_name": "Engine Service Group", + "labels": [] + } + } + } + } + } + } + } + }, + "/api/service-group-includes": { + "get": { + "tags": [ + "Service Group Details" + ], + "summary": "Includes List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "service_group": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_name": { + "type": "string" + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "service_group_id": 1, + "title": "Basic inspection", + "arrangement": 1, + "created_at": "2026-03-26T18:40:00.000000Z", + "updated_at": "2026-03-26T18:40:00.000000Z", + "service_group": { + "id": 1, + "service_name": "Engine Service Group" + } + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Includes Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_group_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + } + } + }, + "example": { + "service_group_id": 1, + "title": "Basic inspection", + "arrangement": 1 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + } + } + } + } + }, + "example": { + "message": "Service group include created successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "title": "Basic inspection", + "arrangement": 1 + } + } + } + } + } + } + } + }, + "/api/service-group-includes/{id}": { + "put": { + "tags": [ + "Service Group Details" + ], + "summary": "Includes Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + } + } + }, + "example": { + "title": "Basic inspection updated" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + } + } + } + } + }, + "example": { + "message": "Service group include updated successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "title": "Basic inspection updated", + "arrangement": 1 + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service Group Details" + ], + "summary": "Includes Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Service group include deleted successfully." + } + } + } + } + } + } + }, + "/api/service-group-includes/{id}/change-arrangement": { + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Includes Change Arrangement", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "arrangement": { + "type": "integer" + } + } + }, + "example": { + "arrangement": 2 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "arrangement": { + "type": "integer" + } + } + } + } + }, + "example": { + "message": "Service group include arrangement updated successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "title": "Basic inspection", + "arrangement": 2 + } + } + } + } + } + } + } + }, + "/api/service-group-pricings": { + "get": { + "tags": [ + "Service Group Details" + ], + "summary": "Pricings List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "fuel_type_id": { + "type": "integer" + }, + "body_type_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "labor_hours": { + "type": "string" + }, + "selling_price": { + "type": "string" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "service_group_id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "fuel_type_id": 1, + "body_type_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "labor_hours": "2.00", + "selling_price": "120.00" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Pricings Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_group_id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "fuel_type_id": { + "type": "integer" + }, + "body_type_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "labor_hours": { + "type": "integer" + }, + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "service_group_id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "fuel_type_id": 1, + "body_type_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "labor_hours": 2, + "selling_price": 120 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "fuel_type_id": { + "type": "integer" + }, + "body_type_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "labor_hours": { + "type": "string" + }, + "selling_price": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group pricing created successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "fuel_type_id": 1, + "body_type_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "labor_hours": "2.00", + "selling_price": "120.00" + } + } + } + } + } + } + } + }, + "/api/service-group-pricings/{id}": { + "put": { + "tags": [ + "Service Group Details" + ], + "summary": "Pricings Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "selling_price": { + "type": "integer" + } + } + }, + "example": { + "selling_price": 150 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "selling_price": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group pricing updated successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "selling_price": "150.00" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service Group Details" + ], + "summary": "Pricings Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Service group pricing deleted successfully." + } + } + } + } + } + } + }, + "/api/service-group-services": { + "get": { + "tags": [ + "Service Group Details" + ], + "summary": "Services List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "service_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "rate": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "service_group_id": 1, + "service_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "rate": "100.00", + "hours": "1.50", + "tax_id": 1, + "chart_of_account": "4000", + "description": "Labor line" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Services Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_group_id": { + "type": "integer" + }, + "service_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "hours": { + "type": "number" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "example": { + "service_group_id": 1, + "service_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "rate": 100, + "hours": 1.5, + "tax_id": 1, + "chart_of_account": "4000", + "description": "Labor line" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "service_id": { + "type": "integer" + }, + "rate_type": { + "type": "string" + }, + "labor_rate_id": { + "type": "integer" + }, + "rate": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group service created successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "service_id": 1, + "rate_type": "hourly", + "labor_rate_id": 1, + "rate": "100.00", + "hours": "1.50", + "tax_id": 1, + "chart_of_account": "4000", + "description": "Labor line" + } + } + } + } + } + } + } + }, + "/api/service-group-services/{id}": { + "put": { + "tags": [ + "Service Group Details" + ], + "summary": "Services Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rate": { + "type": "integer" + }, + "hours": { + "type": "integer" + } + } + }, + "example": { + "rate": 120, + "hours": 2 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "rate": { + "type": "string" + }, + "hours": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group service updated successfully.", + "data": { + "id": 1, + "rate": "120.00", + "hours": "2.00" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service Group Details" + ], + "summary": "Services Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Service group service deleted successfully." + } + } + } + } + } + } + }, + "/api/service-group-parts": { + "get": { + "tags": [ + "Service Group Details" + ], + "summary": "Parts List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "service_group_id": 1, + "part_id": 1, + "quantity": "2.00", + "rate": "50.00", + "tax_id": 1, + "chart_of_account": "5000", + "description": "Parts line" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Service Group Details" + ], + "summary": "Parts Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_group_id": { + "type": "integer" + }, + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "example": { + "service_group_id": 1, + "part_id": 1, + "quantity": 2, + "rate": 50, + "tax_id": 1, + "chart_of_account": "5000", + "description": "Parts line" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "service_group_id": { + "type": "integer" + }, + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "tax_id": { + "type": "integer" + }, + "chart_of_account": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group part created successfully.", + "data": { + "id": 1, + "service_group_id": 1, + "part_id": 1, + "quantity": "2.00", + "rate": "50.00", + "tax_id": 1, + "chart_of_account": "5000", + "description": "Parts line" + } + } + } + } + } + } + } + }, + "/api/service-group-parts/{id}": { + "put": { + "tags": [ + "Service Group Details" + ], + "summary": "Parts Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + }, + "example": { + "quantity": 3, + "rate": 55 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "quantity": { + "type": "string" + }, + "rate": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Service group part updated successfully.", + "data": { + "id": 1, + "quantity": "3.00", + "rate": "55.00" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Service Group Details" + ], + "summary": "Parts Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Service group part deleted successfully." + } + } + } + } + } + } + }, + "/api/invoice-labels": { + "get": { + "tags": [ + "Invoice Labels" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Invoice Labels" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Urgent Invoice", + "color_code": "#FF0000" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoice-labels/{id}": { + "put": { + "tags": [ + "Invoice Labels" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "color_code": { + "type": "string" + } + } + }, + "example": { + "title": "Urgent", + "color_code": "#D60000" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Invoice Labels" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/invoices": { + "get": { + "tags": [ + "Invoices" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Invoices" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "invoice_date": { + "type": "string" + }, + "due_date": { + "type": "string" + }, + "invoice_sequence_id": { + "type": "integer" + }, + "invoice_number": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "inspection_categories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "inspection_category_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "parts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "service_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "expenses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "service_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "service_group_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "subject": "Invoice 001", + "customer_id": 1, + "vehicle_id": 1, + "invoice_date": "2026-03-23", + "due_date": "2026-03-30", + "invoice_sequence_id": 1, + "invoice_number": "INV-0001", + "department_id": 1, + "status": "draft", + "inspection_categories": [ + { + "inspection_category_id": 1, + "rate": 100 + } + ], + "parts": [ + { + "part_id": 1, + "quantity": 1, + "rate": 25 + } + ], + "services": [ + { + "service_id": 1, + "rate": 50 + } + ], + "expenses": [ + { + "expense_id": 1, + "quantity": 1, + "rate": 10 + } + ], + "service_groups": [ + { + "service_group_id": 1, + "rate": 120 + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoices/{id}": { + "put": { + "tags": [ + "Invoices" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "status": { + "type": "string" + }, + "notes": { + "type": "string" + } + } + }, + "example": { + "subject": "Invoice 001 Updated", + "status": "open", + "notes": "Updated note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Invoices" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/invoices/{id}/add-attachment": { + "post": { + "tags": [ + "Invoices" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoices/{id}/delete-attachment": { + "delete": { + "tags": [ + "Invoices" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/invoice-documents": { + "get": { + "tags": [ + "Invoice Documents" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Invoice Documents" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invoice_id": { + "type": "integer" + }, + "customer_id": { + "type": "integer" + }, + "vehicle_id": { + "type": "integer" + }, + "document_type_id": { + "type": "integer" + }, + "document_number": { + "type": "string" + }, + "show_in_invoice": { + "type": "boolean" + }, + "show_in_estimate": { + "type": "boolean" + }, + "show_in_statement": { + "type": "boolean" + } + } + }, + "example": { + "invoice_id": 1, + "customer_id": 1, + "vehicle_id": 1, + "document_type_id": 1, + "document_number": "DOC-001", + "show_in_invoice": true, + "show_in_estimate": false, + "show_in_statement": false + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoice-documents/{id}": { + "put": { + "tags": [ + "Invoice Documents" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "document_number": { + "type": "string" + }, + "show_in_statement": { + "type": "boolean" + } + } + }, + "example": { + "document_number": "DOC-001-UPDATED", + "show_in_statement": true + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Invoice Documents" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/invoice-notes": { + "get": { + "tags": [ + "Invoice Notes" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Invoice Notes" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invoice_id": { + "type": "integer" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "invoice_id": 1, + "note": "Call customer before delivery" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/invoice-notes/{id}": { + "put": { + "tags": [ + "Invoice Notes" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "note": { + "type": "string" + } + } + }, + "example": { + "note": "Updated internal note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Invoice Notes" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/credit-notes": { + "get": { + "tags": [ + "Credit Notes" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Credit Notes" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "customer_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "status": { + "type": "string" + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label_id": { + "type": "integer" + } + } + } + }, + "inspections": { + "type": "array", + "items": { + "type": "object", + "properties": { + "inspection_category_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "parts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "service_id": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "expenses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "subject": "Credit Note 001", + "customer_id": 1, + "date": "2026-03-23", + "status": "open", + "labels": [ + { + "label_id": 1 + } + ], + "inspections": [ + { + "inspection_category_id": 1, + "rate": 20 + } + ], + "parts": [ + { + "part_id": 1, + "quantity": 1, + "rate": 10 + } + ], + "services": [ + { + "service_id": 1, + "rate": 15 + } + ], + "expenses": [ + { + "expense_id": 1, + "quantity": 1, + "rate": 5 + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/credit-notes/{id}": { + "put": { + "tags": [ + "Credit Notes" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "notes": { + "type": "string" + } + } + }, + "example": { + "subject": "Credit Note 001 Updated", + "notes": "Adjusted amount" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Credit Notes" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/credit-notes/{id}/add-attachment": { + "post": { + "tags": [ + "Credit Notes" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/credit-notes/{id}/delete-attachment": { + "delete": { + "tags": [ + "Credit Notes" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/credit-notes/{id}/add-internal-note": { + "post": { + "tags": [ + "Credit Notes" + ], + "summary": "Add Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "note": { + "type": "string" + } + } + }, + "example": { + "note": "Internal review needed" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/credit-notes/{id}/edit-internal-note": { + "delete": { + "tags": [ + "Credit Notes" + ], + "summary": "Edit Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "internal_note_id": { + "type": "integer" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "internal_note_id": 1, + "note": "Updated internal note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/credit-notes/{id}/delete-internal-note": { + "delete": { + "tags": [ + "Credit Notes" + ], + "summary": "Delete Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "internal_note_id": { + "type": "integer" + } + } + }, + "example": { + "internal_note_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/payment-mades": { + "get": { + "tags": [ + "Payment Mades" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "vendor_id": { + "type": "integer" + }, + "employee_id": { + "type": "string", + "nullable": true + }, + "payment_for": { + "type": "string" + }, + "payment_made": { + "type": "string" + }, + "payment_number": { + "type": "string" + }, + "payment_reference": { + "type": "string" + }, + "payment_date": { + "type": "string" + }, + "payment_mode_id": { + "type": "integer" + }, + "paid_through": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "excess_amount_will_be_deposited": { + "type": "string", + "nullable": true + }, + "amount_paid": { + "type": "string" + }, + "amount_used_for_payments": { + "type": "string" + }, + "amount_in_excess": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "vendor": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "payment_mode": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "bill_id": { + "type": "integer" + }, + "expense_id": { + "type": "string", + "nullable": true + }, + "amount_paid": { + "type": "string" + }, + "bill": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "expense": { + "type": "string", + "nullable": true + } + } + } + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "attachment_path": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "vendor_id": 1, + "employee_id": null, + "payment_for": "bill", + "payment_made": "100.00", + "payment_number": "PM-001", + "payment_reference": "REF-001", + "payment_date": "2026-03-23", + "payment_mode_id": 1, + "paid_through": 1, + "notes": "Payment against vendor bills", + "excess_amount_will_be_deposited": null, + "amount_paid": "100.00", + "amount_used_for_payments": "100.00", + "amount_in_excess": "0.00", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z", + "vendor": { + "id": 1, + "first_name": "Vendor", + "last_name": "One", + "company_name": "ACME Parts", + "email": "vendor1@example.com" + }, + "payment_mode": { + "id": 1, + "title": "Cash" + }, + "details": [ + { + "id": 1, + "payment_made_id": 1, + "bill_id": 10, + "expense_id": null, + "amount_paid": "60.00", + "bill": { + "id": 10, + "title": "Bill #10", + "status": "partially_paid" + }, + "expense": null + }, + { + "id": 2, + "payment_made_id": 1, + "bill_id": 11, + "expense_id": null, + "amount_paid": "40.00", + "bill": { + "id": 11, + "title": "Bill #11", + "status": "paid" + }, + "expense": null + } + ], + "attachments": [ + { + "id": 1, + "payment_made_id": 1, + "attachment_path": "payment_made_attachments/sample-receipt.pdf", + "original_name": "receipt.pdf", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ] + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Payment Mades" + ], + "summary": "Create (Expense)", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "employee_id": { + "type": "integer" + }, + "payment_for": { + "type": "string" + }, + "payment_made": { + "type": "integer" + }, + "payment_number": { + "type": "string" + }, + "payment_reference": { + "type": "string" + }, + "payment_date": { + "type": "string" + }, + "payment_mode_id": { + "type": "integer" + }, + "paid_through": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_id": { + "type": "integer" + }, + "amount_paid": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "employee_id": 1, + "payment_for": "expense", + "payment_made": 50, + "payment_number": "PM-002", + "payment_reference": "REF-002", + "payment_date": "2026-03-23", + "payment_mode_id": 1, + "paid_through": 1, + "notes": "Office expense reimbursement", + "details": [ + { + "expense_id": 1, + "amount_paid": 50 + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "vendor_id": { + "type": "string", + "nullable": true + }, + "employee_id": { + "type": "integer" + }, + "payment_for": { + "type": "string" + }, + "payment_made": { + "type": "string" + }, + "payment_number": { + "type": "string" + }, + "payment_reference": { + "type": "string" + }, + "payment_date": { + "type": "string" + }, + "payment_mode_id": { + "type": "integer" + }, + "paid_through": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "excess_amount_will_be_deposited": { + "type": "string", + "nullable": true + }, + "amount_paid": { + "type": "string" + }, + "amount_used_for_payments": { + "type": "string" + }, + "amount_in_excess": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "vendor": { + "type": "string", + "nullable": true + }, + "payment_mode": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "bill_id": { + "type": "string", + "nullable": true + }, + "expense_id": { + "type": "integer" + }, + "amount_paid": { + "type": "string" + } + } + } + }, + "attachments": { + "type": "array", + "items": {} + } + } + } + } + }, + "example": { + "message": "Payment made created successfully.", + "data": { + "id": 2, + "vendor_id": null, + "employee_id": 1, + "payment_for": "expense", + "payment_made": "50.00", + "payment_number": "PM-002", + "payment_reference": "REF-002", + "payment_date": "2026-03-23", + "payment_mode_id": 1, + "paid_through": 1, + "notes": "Office expense reimbursement", + "excess_amount_will_be_deposited": null, + "amount_paid": "50.00", + "amount_used_for_payments": "50.00", + "amount_in_excess": "0.00", + "created_at": "2026-03-23T12:05:00.000000Z", + "updated_at": "2026-03-23T12:05:00.000000Z", + "vendor": null, + "payment_mode": { + "id": 1, + "title": "Cash" + }, + "details": [ + { + "id": 3, + "payment_made_id": 2, + "bill_id": null, + "expense_id": 1, + "amount_paid": "50.00" + } + ], + "attachments": [] + } + } + } + } + } + } + } + }, + "/api/payment-mades/{id}": { + "put": { + "tags": [ + "Payment Mades" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notes": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer" + }, + "amount_paid": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "notes": "Updated payment made", + "details": [ + { + "bill_id": 1, + "amount_paid": 75 + } + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "vendor_id": { + "type": "integer" + }, + "employee_id": { + "type": "string", + "nullable": true + }, + "payment_for": { + "type": "string" + }, + "payment_made": { + "type": "string" + }, + "payment_number": { + "type": "string" + }, + "payment_reference": { + "type": "string" + }, + "payment_date": { + "type": "string" + }, + "payment_mode_id": { + "type": "integer" + }, + "paid_through": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "excess_amount_will_be_deposited": { + "type": "string", + "nullable": true + }, + "amount_paid": { + "type": "string" + }, + "amount_used_for_payments": { + "type": "string" + }, + "amount_in_excess": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "vendor": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "payment_mode": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "bill_id": { + "type": "integer" + }, + "expense_id": { + "type": "string", + "nullable": true + }, + "amount_paid": { + "type": "string" + } + } + } + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "attachment_path": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "example": { + "message": "Payment made updated successfully.", + "data": { + "id": 1, + "vendor_id": 1, + "employee_id": null, + "payment_for": "bill", + "payment_made": "100.00", + "payment_number": "PM-001", + "payment_reference": "REF-001", + "payment_date": "2026-03-23", + "payment_mode_id": 1, + "paid_through": 1, + "notes": "Updated payment made", + "excess_amount_will_be_deposited": null, + "amount_paid": "100.00", + "amount_used_for_payments": "75.00", + "amount_in_excess": "25.00", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:20:00.000000Z", + "vendor": { + "id": 1, + "first_name": "Vendor", + "last_name": "One", + "company_name": "ACME Parts", + "email": "vendor1@example.com" + }, + "payment_mode": { + "id": 1, + "title": "Cash" + }, + "details": [ + { + "id": 4, + "payment_made_id": 1, + "bill_id": 1, + "expense_id": null, + "amount_paid": "75.00" + } + ], + "attachments": [ + { + "id": 1, + "payment_made_id": 1, + "attachment_path": "payment_made_attachments/sample-receipt.pdf", + "original_name": "receipt.pdf", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ] + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Payment Mades" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/payment-mades/{id}/add-attachment": { + "post": { + "tags": [ + "Payment Mades" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "attachment_path": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "example": { + "message": "Payment made attachments added successfully.", + "data": { + "id": 1, + "attachments": [ + { + "id": 1, + "payment_made_id": 1, + "attachment_path": "payment_made_attachments/sample-receipt.pdf", + "original_name": "receipt.pdf", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + }, + { + "id": 2, + "payment_made_id": 1, + "attachment_path": "payment_made_attachments/new-proof.jpg", + "original_name": "proof.jpg", + "created_at": "2026-03-23T12:25:00.000000Z", + "updated_at": "2026-03-23T12:25:00.000000Z" + } + ] + } + } + } + } + } + } + } + }, + "/api/payment-mades/{id}/delete-attachment": { + "delete": { + "tags": [ + "Payment Mades" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "attachments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "payment_made_id": { + "type": "integer" + }, + "attachment_path": { + "type": "string" + }, + "original_name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "example": { + "message": "Payment made attachment deleted successfully.", + "data": { + "id": 1, + "attachments": [ + { + "id": 2, + "payment_made_id": 1, + "attachment_path": "payment_made_attachments/new-proof.jpg", + "original_name": "proof.jpg", + "created_at": "2026-03-23T12:25:00.000000Z", + "updated_at": "2026-03-23T12:25:00.000000Z" + } + ] + } + } + } + } + } + } + } + }, + "/api/vendor-credits": { + "get": { + "tags": [ + "Vendor Credits" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Vendor Credits" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "credit_number": { + "type": "string" + }, + "vendor_id": { + "type": "integer" + }, + "vendor_credit_date": { + "type": "string" + }, + "department_id": { + "type": "integer" + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label_id": { + "type": "integer" + } + } + } + }, + "parts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "service_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + }, + "expenses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "expense_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "subject": "Vendor Credit 001", + "credit_number": "VC-001", + "vendor_id": 1, + "vendor_credit_date": "2026-03-23", + "department_id": 1, + "labels": [ + { + "label_id": 1 + } + ], + "parts": [ + { + "part_id": 1, + "quantity": 1, + "rate": 25 + } + ], + "services": [ + { + "service_id": 1, + "quantity": 1, + "rate": 50 + } + ], + "expenses": [ + { + "expense_id": 1, + "quantity": 1, + "rate": 10 + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}": { + "put": { + "tags": [ + "Vendor Credits" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "notes": { + "type": "string" + } + } + }, + "example": { + "subject": "Vendor Credit 001 Updated", + "notes": "Updated notes" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Vendor Credits" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}/add-attachment": { + "post": { + "tags": [ + "Vendor Credits" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}/delete-attachment": { + "delete": { + "tags": [ + "Vendor Credits" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}/add-internal-note": { + "post": { + "tags": [ + "Vendor Credits" + ], + "summary": "Add Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "note": { + "type": "string" + } + } + }, + "example": { + "note": "Internal note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}/edit-internal-note": { + "delete": { + "tags": [ + "Vendor Credits" + ], + "summary": "Edit Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "internal_note_id": { + "type": "integer" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "internal_note_id": 1, + "note": "Updated internal note" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/vendor-credits/{id}/delete-internal-note": { + "delete": { + "tags": [ + "Vendor Credits" + ], + "summary": "Delete Internal Note", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "internal_note_id": { + "type": "integer" + } + } + }, + "example": { + "internal_note_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/inventory-adjustments": { + "get": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "reference_number": { + "type": "string" + }, + "date": { + "type": "string" + }, + "chart_of_account": { + "type": "integer" + }, + "reason_id": { + "type": "integer" + }, + "job_card_id": { + "type": "integer" + }, + "invoice_id": { + "type": "integer" + }, + "notes": { + "type": "string" + }, + "parts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "example": { + "reference_number": "IA-001", + "date": "2026-03-23", + "chart_of_account": 1, + "reason_id": 1, + "job_card_id": 1, + "invoice_id": 1, + "notes": "Stock correction", + "parts": [ + { + "part_id": 1, + "quantity": 2, + "rate": 25, + "description": "Adjustment line" + } + ] + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inventory-adjustments/{id}": { + "put": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notes": { + "type": "string" + }, + "parts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "part_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "rate": { + "type": "integer" + } + } + } + } + } + }, + "example": { + "notes": "Updated adjustment", + "parts": [ + { + "part_id": 1, + "quantity": 3, + "rate": 25 + } + ] + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/inventory-adjustments/{id}/add-attachment": { + "post": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "Add Attachment", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "attachments[]": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/inventory-adjustments/{id}/delete-attachment": { + "delete": { + "tags": [ + "Inventory Adjustments" + ], + "summary": "Delete Attachment", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attachment_id": { + "type": "integer" + } + } + }, + "example": { + "attachment_id": 1 + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/time-sheets": { + "get": { + "tags": [ + "Time Sheets" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Time Sheets" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "employee_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "clock_in": { + "type": "string" + }, + "clock_out": { + "type": "string" + }, + "note": { + "type": "string" + }, + "activity_type": { + "type": "string" + } + } + }, + "example": { + "employee_id": 1, + "date": "2026-03-23", + "clock_in": "09:00:00", + "clock_out": "17:00:00", + "note": "Regular shift", + "activity_type": "general" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Created successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/time-sheets/{id}": { + "put": { + "tags": [ + "Time Sheets" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "clock_out": { + "type": "string" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "clock_out": "18:00:00", + "note": "Overtime" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Time Sheets" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Deleted successfully." + } + } + } + } + } + } + }, + "/api/time-sheet/clock-in": { + "post": { + "tags": [ + "Time Sheets" + ], + "summary": "Clock In", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "employee_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "activity_type": { + "type": "string" + }, + "note": { + "type": "string" + } + } + }, + "example": { + "employee_id": 1, + "date": "2026-03-23", + "activity_type": "general", + "note": "Clock in" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/time-sheet/clock-out": { + "post": { + "tags": [ + "Time Sheets" + ], + "summary": "Clock Out", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "employee_id": { + "type": "integer" + }, + "date": { + "type": "string" + } + } + }, + "example": { + "employee_id": 1, + "date": "2026-03-23" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Updated successfully.", + "data": { + "id": 1, + "name": "Sample Item", + "created_at": "2026-03-23T12:00:00.000000Z", + "updated_at": "2026-03-23T12:10:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/shop-timings": { + "get": { + "tags": [ + "Shop Timings" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "in_time": { + "type": "string" + }, + "out_time": { + "type": "string" + }, + "full_day_hours": { + "type": "string" + }, + "half_day_hours": { + "type": "string" + }, + "punch_in": { + "type": "string" + }, + "punch_out": { + "type": "string" + }, + "before_time": { + "type": "string" + }, + "after_time": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "Regular Shift", + "in_time": "10:00:00", + "out_time": "19:00:00", + "full_day_hours": "09:00:00", + "half_day_hours": "04:30:00", + "punch_in": "10:00:00", + "punch_out": "19:00:00", + "before_time": "01:00:00", + "after_time": "01:00:00", + "is_default": true, + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Shop Timings" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "in_time": { + "type": "string" + }, + "out_time": { + "type": "string" + }, + "full_day_hours": { + "type": "string" + }, + "half_day_hours": { + "type": "string" + }, + "punch_in": { + "type": "string" + }, + "punch_out": { + "type": "string" + }, + "before_time": { + "type": "string" + }, + "after_time": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Regular Shift", + "in_time": "10:00:00", + "out_time": "19:00:00", + "full_day_hours": "09:00:00", + "half_day_hours": "04:30:00", + "punch_in": "10:00:00", + "punch_out": "19:00:00", + "before_time": "01:00:00", + "after_time": "01:00:00", + "is_default": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "in_time": { + "type": "string" + }, + "out_time": { + "type": "string" + }, + "full_day_hours": { + "type": "string" + }, + "half_day_hours": { + "type": "string" + }, + "punch_in": { + "type": "string" + }, + "punch_out": { + "type": "string" + }, + "before_time": { + "type": "string" + }, + "after_time": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Shop timing created successfully.", + "data": { + "id": 1, + "title": "Regular Shift", + "in_time": "10:00:00", + "out_time": "19:00:00", + "full_day_hours": "09:00:00", + "half_day_hours": "04:30:00", + "punch_in": "10:00:00", + "punch_out": "19:00:00", + "before_time": "01:00:00", + "after_time": "01:00:00", + "is_default": true, + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/shop-timings/{id}": { + "put": { + "tags": [ + "Shop Timings" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "in_time": { + "type": "string" + }, + "out_time": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Weekend Shift", + "in_time": "09:00:00", + "out_time": "15:00:00", + "is_default": false + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "in_time": { + "type": "string" + }, + "out_time": { + "type": "string" + }, + "full_day_hours": { + "type": "string" + }, + "half_day_hours": { + "type": "string" + }, + "punch_in": { + "type": "string" + }, + "punch_out": { + "type": "string" + }, + "before_time": { + "type": "string" + }, + "after_time": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Shop timing updated successfully.", + "data": { + "id": 1, + "title": "Weekend Shift", + "in_time": "09:00:00", + "out_time": "15:00:00", + "full_day_hours": "06:00:00", + "half_day_hours": "03:00:00", + "punch_in": "09:00:00", + "punch_out": "15:00:00", + "before_time": "00:30:00", + "after_time": "00:30:00", + "is_default": false, + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:20:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Shop Timings" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Shop timing deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-shop-timing": { + "post": { + "tags": [ + "Shop Timings" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + } + } + }, + "example": { + "message": "Default shop timing updated successfully.", + "data": { + "id": 1, + "title": "Regular Shift", + "is_default": true + } + } + } + } + } + } + } + }, + "/api/remove-default-shop-timing": { + "post": { + "tags": [ + "Shop Timings" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + } + } + }, + "example": { + "message": "Default shop timing removed successfully.", + "data": { + "id": 1, + "title": "Regular Shift", + "is_default": false + } + } + } + } + } + } + } + }, + "/api/holiday-years": { + "get": { + "tags": [ + "Holiday Years" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "year": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "year": 2026, + "created_at": "2026-03-24T11:00:00.000000Z", + "updated_at": "2026-03-24T11:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Holiday Years" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "year": { + "type": "integer" + } + } + }, + "example": { + "year": 2026 + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "year": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Holiday year created successfully.", + "data": { + "id": 1, + "year": 2026, + "created_at": "2026-03-24T11:00:00.000000Z", + "updated_at": "2026-03-24T11:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/shop-calenders": { + "get": { + "tags": [ + "Shop Calenders" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_calender_days": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_calender_id": { + "type": "integer" + }, + "day_number": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "current_page": { + "type": "integer" + }, + "last_page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "from": { + "type": "integer" + }, + "to": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "Default Calendar", + "is_default": true, + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:00:00.000000Z", + "shop_calender_days": [ + { + "id": 1, + "shop_calender_id": 1, + "day_number": 1, + "type": "full_day", + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:00:00.000000Z" + } + ] + } + ], + "meta": { + "current_page": 1, + "last_page": 1, + "per_page": 15, + "total": 1, + "from": 1, + "to": 1 + } + } + } + } + } + } + }, + "post": { + "tags": [ + "Shop Calenders" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "Default Calendar", + "is_default": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_calender_days": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_calender_id": { + "type": "integer" + }, + "day_number": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "message": "Shop calender created successfully.", + "data": { + "id": 1, + "title": "Default Calendar", + "is_default": true, + "created_at": "2026-03-24T10:00:00.000000Z", + "updated_at": "2026-03-24T10:00:00.000000Z", + "shop_calender_days": [ + { + "id": 1, + "shop_calender_id": 1, + "day_number": 1, + "type": "full_day" + } + ] + } + } + } + } + } + } + } + }, + "/api/shop-calenders/{id}": { + "delete": { + "tags": [ + "Shop Calenders" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Shop calender deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-shop-calender": { + "post": { + "tags": [ + "Shop Calenders" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + } + } + }, + "example": { + "message": "Default shop calender updated successfully.", + "data": { + "id": 1, + "title": "Default Calendar", + "is_default": true + } + } + } + } + } + } + } + }, + "/api/remove-default-shop-calender": { + "post": { + "tags": [ + "Shop Calenders" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + } + } + } + } + }, + "example": { + "message": "Default shop calender removed successfully.", + "data": { + "id": 1, + "title": "Default Calendar", + "is_default": false + } + } + } + } + } + } + } + }, + "/api/shop-calenders/{id}/update-day-type": { + "post": { + "tags": [ + "Shop Calenders" + ], + "summary": "Update Day Type", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "day_number": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + }, + "example": { + "day_number": 1, + "type": "week_off" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "shop_calender_days": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_calender_id": { + "type": "integer" + }, + "day_number": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "message": "Shop calender day type updated successfully.", + "data": { + "id": 1, + "title": "Default Calendar", + "is_default": true, + "shop_calender_days": [ + { + "id": 1, + "shop_calender_id": 1, + "day_number": 1, + "type": "week_off" + } + ] + } + } + } + } + } + } + } + }, + "/api/holidays": { + "get": { + "tags": [ + "Holidays" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "holiday_year_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "holiday_year": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "year": { + "type": "integer" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "holiday_year_id": 1, + "date": "2026-12-02", + "name": "National Day", + "created_at": "2026-03-24T11:10:00.000000Z", + "updated_at": "2026-03-24T11:10:00.000000Z", + "holiday_year": { + "id": 1, + "year": 2026, + "created_at": "2026-03-24T11:00:00.000000Z", + "updated_at": "2026-03-24T11:00:00.000000Z" + } + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Holidays" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "holiday_year_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "example": { + "holiday_year_id": 1, + "date": "2026-12-02", + "name": "National Day" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "holiday_year_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "holiday_year": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "year": { + "type": "integer" + } + } + } + } + } + } + }, + "example": { + "message": "Holiday created successfully.", + "data": { + "id": 1, + "holiday_year_id": 1, + "date": "2026-12-02", + "name": "National Day", + "created_at": "2026-03-24T11:10:00.000000Z", + "updated_at": "2026-03-24T11:10:00.000000Z", + "holiday_year": { + "id": 1, + "year": 2026 + } + } + } + } + } + } + } + } + }, + "/api/holidays/{id}": { + "put": { + "tags": [ + "Holidays" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "example": { + "name": "National Day Holiday" + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "holiday_year_id": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "name": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "holiday_year": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "year": { + "type": "integer" + } + } + } + } + } + } + }, + "example": { + "message": "Holiday updated successfully.", + "data": { + "id": 1, + "holiday_year_id": 1, + "date": "2026-12-02", + "name": "National Day Holiday", + "created_at": "2026-03-24T11:10:00.000000Z", + "updated_at": "2026-03-24T11:20:00.000000Z", + "holiday_year": { + "id": 1, + "year": 2026 + } + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Holidays" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Holiday deleted successfully." + } + } + } + } + } + } + }, + "/api/settings": { + "get": { + "tags": [ + "Settings" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternative_phone": { + "type": "string" + }, + "website": { + "type": "string" + }, + "time_zone": { + "type": "string" + }, + "upi_id": { + "type": "string" + }, + "first_day_of_work": { + "type": "string" + }, + "latitude": { + "type": "string" + }, + "longitude": { + "type": "string" + }, + "bank_details": { + "type": "string" + }, + "first_address_line": { + "type": "string" + }, + "second_address_line": { + "type": "string" + }, + "country_id": { + "type": "string" + }, + "state_id": { + "type": "string" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "logo": { + "type": "string" + } + } + } + } + }, + "example": { + "data": { + "id": 1, + "name": "Reparee", + "email": "support@reparee.com", + "phone": "1234567890", + "alternative_phone": "0987654321", + "website": "https://reparee.com", + "time_zone": "Asia/Kolkata", + "upi_id": "reparee@upi", + "first_day_of_work": "monday", + "latitude": "23.0225", + "longitude": "72.5714", + "bank_details": "Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234", + "first_address_line": "123 Business Park", + "second_address_line": "Near Central Plaza", + "country_id": "101", + "state_id": "12", + "city": "Ahmedabad", + "zip_code": "380001", + "logo": "settings/logo.png" + } + } + } + } + } + } + }, + "put": { + "tags": [ + "Settings" + ], + "summary": "Update", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "first_day_of_work": { + "type": "string" + }, + "logo": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "alternative_phone": { + "type": "string" + }, + "website": { + "type": "string" + }, + "time_zone": { + "type": "string" + }, + "upi_id": { + "type": "string" + }, + "first_day_of_work": { + "type": "string" + }, + "latitude": { + "type": "string" + }, + "longitude": { + "type": "string" + }, + "bank_details": { + "type": "string" + }, + "first_address_line": { + "type": "string" + }, + "second_address_line": { + "type": "string" + }, + "country_id": { + "type": "string" + }, + "state_id": { + "type": "string" + }, + "city": { + "type": "string" + }, + "zip_code": { + "type": "string" + }, + "logo": { + "type": "string" + } + } + } + } + }, + "example": { + "message": "Settings updated successfully.", + "data": { + "id": 1, + "name": "Reparee", + "email": "support@reparee.com", + "phone": "1234567890", + "alternative_phone": "0987654321", + "website": "https://reparee.com", + "time_zone": "Asia/Kolkata", + "upi_id": "reparee@upi", + "first_day_of_work": "monday", + "latitude": "23.0225", + "longitude": "72.5714", + "bank_details": "Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234", + "first_address_line": "123 Business Park", + "second_address_line": "Near Central Plaza", + "country_id": "101", + "state_id": "12", + "city": "Ahmedabad", + "zip_code": "380001", + "logo": "settings/logo.png" + } + } + } + } + } + } + } + }, + "/api/taxes": { + "get": { + "tags": [ + "Taxes" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "title": "VAT", + "note": "Standard rate", + "rate": "18.00", + "is_default": true, + "created_at": "2026-03-25T10:00:00.000000Z", + "updated_at": "2026-03-25T10:00:00.000000Z" + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Taxes" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "integer" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "VAT", + "note": "Standard rate", + "rate": 18, + "is_default": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Tax created successfully.", + "data": { + "id": 1, + "title": "VAT", + "note": "Standard rate", + "rate": "18.00", + "is_default": true, + "created_at": "2026-03-25T10:00:00.000000Z", + "updated_at": "2026-03-25T10:00:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/taxes/{id}": { + "put": { + "tags": [ + "Taxes" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "integer" + }, + "is_default": { + "type": "boolean" + } + } + }, + "example": { + "title": "VAT (updated)", + "note": "Revised rate", + "rate": 20, + "is_default": false + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Tax updated successfully.", + "data": { + "id": 1, + "title": "VAT (updated)", + "note": "Revised rate", + "rate": "20.00", + "is_default": false, + "created_at": "2026-03-25T10:00:00.000000Z", + "updated_at": "2026-03-25T10:15:00.000000Z" + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Taxes" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Tax deleted successfully." + } + } + } + } + } + } + }, + "/api/set-default-tax": { + "post": { + "tags": [ + "Taxes" + ], + "summary": "Set Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Default tax updated successfully.", + "data": { + "id": 1, + "title": "VAT", + "note": "Standard rate", + "rate": "18.00", + "is_default": true, + "created_at": "2026-03-25T10:00:00.000000Z", + "updated_at": "2026-03-25T10:20:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/remove-default-tax": { + "post": { + "tags": [ + "Taxes" + ], + "summary": "Remove Default", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + } + } + } + }, + "example": { + "message": "Default tax removed successfully.", + "data": { + "id": 1, + "title": "VAT", + "note": "Standard rate", + "rate": "18.00", + "is_default": false, + "created_at": "2026-03-25T10:00:00.000000Z", + "updated_at": "2026-03-25T10:25:00.000000Z" + } + } + } + } + } + } + } + }, + "/api/make-and-models": { + "get": { + "tags": [ + "Make and Models" + ], + "summary": "List", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "sub_model": { + "type": "string" + }, + "body_type_id": { + "type": "integer" + }, + "fuel_id": { + "type": "integer" + }, + "transmission_id": { + "type": "integer" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "fuel": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + } + } + } + } + } + }, + "example": { + "data": [ + { + "id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "year": 2024, + "sub_model": "LE", + "body_type_id": 1, + "fuel_id": 1, + "transmission_id": 1, + "engine_size": "2.5L", + "drivetrain": "FWD", + "is_active": true, + "is_default": false, + "created_at": "2026-03-25T12:00:00.000000Z", + "updated_at": "2026-03-25T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "body_type": { + "id": 1, + "title": "Sedan" + }, + "fuel": { + "id": 1, + "title": "Petrol" + }, + "transmission": { + "id": 1, + "title": "Automatic" + } + } + ] + } + } + } + } + } + }, + "post": { + "tags": [ + "Make and Models" + ], + "summary": "Create", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "sub_model": { + "type": "string" + }, + "body_type_id": { + "type": "integer" + }, + "fuel_id": { + "type": "integer" + }, + "transmission_id": { + "type": "integer" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "is_active": { + "type": "boolean" + } + } + }, + "example": { + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "year": 2024, + "sub_model": "LE", + "body_type_id": 1, + "fuel_id": 1, + "transmission_id": 1, + "engine_size": "2.5L", + "drivetrain": "FWD", + "is_active": true + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "sub_model": { + "type": "string" + }, + "body_type_id": { + "type": "integer" + }, + "fuel_id": { + "type": "integer" + }, + "transmission_id": { + "type": "integer" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "fuel": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Make and model created successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "year": 2024, + "sub_model": "LE", + "body_type_id": 1, + "fuel_id": 1, + "transmission_id": 1, + "engine_size": "2.5L", + "drivetrain": "FWD", + "is_active": true, + "is_default": false, + "created_at": "2026-03-25T12:00:00.000000Z", + "updated_at": "2026-03-25T12:00:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "body_type": { + "id": 1, + "title": "Sedan" + }, + "fuel": { + "id": 1, + "title": "Petrol" + }, + "transmission": { + "id": 1, + "title": "Automatic" + } + } + } + } + } + } + } + } + }, + "/api/make-and-models/{id}": { + "put": { + "tags": [ + "Make and Models" + ], + "summary": "Update", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "is_active": { + "type": "boolean" + } + } + }, + "example": { + "make": "Toyota", + "model": "Camry Hybrid", + "year": 2025, + "is_active": true + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "sub_model": { + "type": "string" + }, + "body_type_id": { + "type": "integer" + }, + "fuel_id": { + "type": "integer" + }, + "transmission_id": { + "type": "integer" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "fuel": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Make and model updated successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry Hybrid", + "year": 2025, + "sub_model": "LE", + "body_type_id": 1, + "fuel_id": 1, + "transmission_id": 1, + "engine_size": "2.5L", + "drivetrain": "FWD", + "is_active": true, + "is_default": false, + "created_at": "2026-03-25T12:00:00.000000Z", + "updated_at": "2026-03-25T12:30:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "body_type": { + "id": 1, + "title": "Sedan" + }, + "fuel": { + "id": 1, + "title": "Petrol" + }, + "transmission": { + "id": 1, + "title": "Automatic" + } + } + } + } + } + } + } + }, + "delete": { + "tags": [ + "Make and Models" + ], + "summary": "Delete", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "example": { + "message": "Make and model deleted successfully." + } + } + } + } + } + } + }, + "/api/toggle-make-and-model-status": { + "post": { + "tags": [ + "Make and Models" + ], + "summary": "Toggle Status", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + }, + "example": { + "id": 1 + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "shop_type_id": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + }, + "sub_model": { + "type": "string" + }, + "body_type_id": { + "type": "integer" + }, + "fuel_id": { + "type": "integer" + }, + "transmission_id": { + "type": "integer" + }, + "engine_size": { + "type": "string" + }, + "drivetrain": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "is_default": { + "type": "boolean" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + }, + "shop_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "body_type": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "fuel": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "transmission": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + } + } + } + } + }, + "example": { + "message": "Make and model status updated successfully.", + "data": { + "id": 1, + "shop_type_id": 1, + "make": "Toyota", + "model": "Camry", + "year": 2024, + "sub_model": "LE", + "body_type_id": 1, + "fuel_id": 1, + "transmission_id": 1, + "engine_size": "2.5L", + "drivetrain": "FWD", + "is_active": false, + "is_default": false, + "created_at": "2026-03-25T12:00:00.000000Z", + "updated_at": "2026-03-25T12:45:00.000000Z", + "shop_type": { + "id": 1, + "title": "Main Workshop" + }, + "body_type": { + "id": 1, + "title": "Sedan" + }, + "fuel": { + "id": 1, + "title": "Petrol" + }, + "transmission": { + "id": 1, + "title": "Automatic" + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/api/open-api/schema.yaml b/packages/api/open-api/schema.yaml new file mode 100644 index 0000000..e16f3a3 --- /dev/null +++ b/packages/api/open-api/schema.yaml @@ -0,0 +1,9625 @@ +openapi: 3.0.0 +info: + title: Reparee API + description: >- + All authenticated API endpoints. Set base_url and auth_token in collection + variables. + version: 1.0.0 +servers: + - url: http://{{base_url}} +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer +security: + - bearerAuth: [] +tags: + - name: Auth + - name: Referral Sources + - name: Customers + - name: Countries & States + - name: Payment Terms + - name: Shop Types + - name: Vehicle Body Types + - name: Vehicle Fuel Types + - name: Vehicle Transmissions + - name: Vehicle Colors + - name: Vehicles + - name: Document Types + - name: Vehicle Documents + - name: Vehicle Mile and Kms + - name: Departments + - name: Employees + - name: Unit Types + - name: Inventory Categories + - name: Labor Rates + - name: Vendors + - name: Inspection Categories + - name: Inspections + - name: Labels + - name: Insurance Types + - name: Estimates + - name: Quick Remark + - name: Quick Notes + - name: Check Point Label + - name: Inspection Check Points + - name: Job Cards + - name: Payment Modes + - name: Payment Received + - name: Parts + - name: Purchase Orders + - name: Services + - name: Expense Items + - name: Bills + - name: Expenses + - name: Task Types + - name: Task Sections + - name: Tasks + - name: Appointments + - name: Invoice Sequences + - name: Service Groups + - name: Invoice Labels + - name: Invoices + - name: Invoice Documents + - name: Invoice Notes + - name: Credit Notes + - name: Payment Mades + - name: Vendor Credits + - name: Inventory Adjustments + - name: Time Sheets +paths: + /api/login: + post: + tags: + - Auth + summary: Login + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"email\": \"admin@admin.com\",\n \"password\": + \"12345678\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + token: 1|YOUR_SANCTUM_TOKEN + user: + id: 1 + name: Admin + email: admin@admin.com + /api/profile: + get: + tags: + - Auth + summary: Profile + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + id: 1 + name: Admin + email: admin@admin.com + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/logout: + post: + tags: + - Auth + summary: Logout + requestBody: + content: {} + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Logged out successfully. + /api/referral-sources: + get: + tags: + - Referral Sources + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + current_page: 1 + data: + - id: 1 + name: Website + is_default: true + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + first_page_url: http://localhost:8000/api/referral-sources?page=1 + from: 1 + last_page: 1 + last_page_url: http://localhost:8000/api/referral-sources?page=1 + links: [] + next_page_url: null + path: http://localhost:8000/api/referral-sources + per_page: 10 + prev_page_url: null + to: 1 + total: 1 + post: + tags: + - Referral Sources + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Website\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Referral source created successfully. + data: + id: 2 + name: Walk-in + is_default: false + created_at: '2026-03-23T12:05:00.000000Z' + updated_at: '2026-03-23T12:05:00.000000Z' + /api/referral-sources/{id}: + put: + tags: + - Referral Sources + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Website\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Referral source updated successfully. + data: + id: 1 + name: Website Ads + is_default: true + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Referral Sources + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Referral source deleted successfully. + /api/set-default-referral-source: + post: + tags: + - Referral Sources + summary: Set Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Default referral source updated successfully. + data: + id: 1 + name: Website + is_default: true + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:15:00.000000Z' + /api/customers: + get: + tags: + - Customers + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + customer_type_id: 1 + referral_source_id: 1 + payment_terms_id: 1 + first_name: John + last_name: Doe + email: john@example.com + phone: '0501234567' + country_id: 1 + state_id: 1 + city: Dubai + zip_code: '00000' + address: Street 10 + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + customer_type: + id: 1 + name: Retail + referral_source: + id: 1 + name: Website + payment_term: + id: 1 + title: Net 30 + days: 30 + country: + id: 1 + name: United Arab Emirates + code: AE + state: + id: 1 + name: Dubai + code: DU + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Customers + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n + \"email\": \"john@example.com\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Customer created successfully. + data: + id: 2 + customer_type_id: 1 + referral_source_id: 1 + payment_terms_id: 1 + first_name: John + last_name: Doe + email: john@example.com + phone: '0501234567' + country_id: 1 + state_id: 1 + city: Dubai + zip_code: '00000' + address: Street 10 + created_at: '2026-03-23T12:20:00.000000Z' + updated_at: '2026-03-23T12:20:00.000000Z' + customer_type: + id: 1 + name: Retail + referral_source: + id: 1 + name: Website + payment_term: + id: 1 + title: Net 30 + days: 30 + country: + id: 1 + name: United Arab Emirates + code: AE + state: + id: 1 + name: Dubai + code: DU + /api/customers/{id}: + put: + tags: + - Customers + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Customer updated successfully. + data: + id: 1 + customer_type_id: 1 + referral_source_id: 1 + payment_terms_id: 1 + first_name: John + last_name: Doe + email: john@example.com + phone: '0501234567' + country_id: 1 + state_id: 1 + city: Dubai + zip_code: '00000' + address: Street 10 + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:30:00.000000Z' + customer_type: + id: 1 + name: Retail + referral_source: + id: 1 + name: Website + payment_term: + id: 1 + title: Net 30 + days: 30 + country: + id: 1 + name: United Arab Emirates + code: AE + state: + id: 1 + name: Dubai + code: DU + delete: + tags: + - Customers + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Customer deleted successfully. + /api/customers/export: + get: + tags: + - Customers + summary: Export + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Customers export generated successfully. + data: + file_name: customers-2026-03-23-123000.xlsx + /api/customers/import: + post: + tags: + - Customers + summary: Import + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Customer import completed successfully. + data: + imported_count: 10 + failed_count: 1 + failed_rows: + - row: 4 + errors: + - The email has already been taken. + values: + email: dup@example.com + /api/countries: + get: + tags: + - Countries & States + summary: Countries + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: United Arab Emirates + code: AE + - id: 2 + name: Saudi Arabia + code: SA + /api/states: + get: + tags: + - Countries & States + summary: States + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + country_id: 1 + name: Dubai + code: DU + country: + id: 1 + name: United Arab Emirates + code: AE + - id: 2 + country_id: 1 + name: Abu Dhabi + code: AZ + country: + id: 1 + name: United Arab Emirates + code: AE + /api/payment-terms: + get: + tags: + - Payment Terms + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Payment Terms + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Net 30\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/payment-terms/{id}: + put: + tags: + - Payment Terms + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Net 30\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Payment Terms + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-default-payment-term: + post: + tags: + - Payment Terms + summary: Set Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/shop-types: + get: + tags: + - Shop Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Shop Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"name\": \"Auto\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/shop-types/{id}: + put: + tags: + - Shop Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"name\": \"Auto\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Shop Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-body-types: + get: + tags: + - Vehicle Body Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Body Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Sedan\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-body-types/{id}: + put: + tags: + - Vehicle Body Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Sedan\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Body Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-fuel-types: + get: + tags: + - Vehicle Fuel Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Fuel Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Gasoline\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-fuel-types/{id}: + put: + tags: + - Vehicle Fuel Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Gasoline\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Fuel Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-transmissions: + get: + tags: + - Vehicle Transmissions + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Transmissions + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Automatic\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-transmissions/{id}: + put: + tags: + - Vehicle Transmissions + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Automatic\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Transmissions + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-colors: + get: + tags: + - Vehicle Colors + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Colors + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Black\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-colors/{id}: + put: + tags: + - Vehicle Colors + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Black\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Colors + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicles: + get: + tags: + - Vehicles + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicles + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"vin\": \"1HGBH41JXMN109186\",\n \"license_plate\": + \"ABC-123\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicles/{id}: + put: + tags: + - Vehicles + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicles + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicles/export: + get: + tags: + - Vehicles + summary: Export + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + /api/vehicles/import: + post: + tags: + - Vehicles + summary: Import + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Import completed successfully. + /api/get-vehicle-owners: + get: + tags: + - Vehicles + summary: Get Vehicle Owners + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + /api/link-customer-to-vehicle: + post: + tags: + - Vehicles + summary: Link Customer to Vehicle + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/unlink-customer-from-vehicle: + post: + tags: + - Vehicles + summary: Unlink Customer from Vehicle + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/document-types: + get: + tags: + - Document Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Document Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Registration\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/document-types/{id}: + put: + tags: + - Document Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Registration\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Document Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-documents: + get: + tags: + - Vehicle Documents + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Documents + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"vehicle_id\": 1,\n \"document_type_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-documents/{id}: + put: + tags: + - Vehicle Documents + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Documents + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vehicle-mile-and-kms: + get: + tags: + - Vehicle Mile and Kms + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vehicle Mile and Kms + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"vehicle_id\": 1,\n \"mileage\": 50000\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vehicle-mile-and-kms/{id}: + put: + tags: + - Vehicle Mile and Kms + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"mileage\": 51000\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vehicle Mile and Kms + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/departments: + get: + tags: + - Departments + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Departments + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"name\": \"Mechanical\",\n \"assignment_type\": + \"bays\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/departments/{id}: + put: + tags: + - Departments + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"name\": \"Mechanical\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Departments + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-favorite-department: + post: + tags: + - Departments + summary: Set Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-favorite-department: + post: + tags: + - Departments + summary: Remove Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/employees: + get: + tags: + - Employees + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Employees + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n + \"email\": \"jane@example.com\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/employees/{id}: + put: + tags: + - Employees + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Employees + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/unit-types: + get: + tags: + - Unit Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Unit Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Hour\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/unit-types/{id}: + put: + tags: + - Unit Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Hour\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Unit Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-favorite-unit-type: + post: + tags: + - Unit Types + summary: Set Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-favorite-unit-type: + post: + tags: + - Unit Types + summary: Remove Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/inventory-categories: + get: + tags: + - Inventory Categories + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Inventory Categories + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Parts\",\n \"shop_type_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inventory-categories/{id}: + put: + tags: + - Inventory Categories + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Parts\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Inventory Categories + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-favorite-inventory-category: + post: + tags: + - Inventory Categories + summary: Set Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-favorite-inventory-category: + post: + tags: + - Inventory Categories + summary: Remove Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/labor-rates: + get: + tags: + - Labor Rates + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Labor Rates + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Standard\",\n \"rate\": 75\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/labor-rates/{id}: + put: + tags: + - Labor Rates + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Standard\",\n \"rate\": 80\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Labor Rates + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-favorite-labor-rate: + post: + tags: + - Labor Rates + summary: Set Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-favorite-labor-rate: + post: + tags: + - Labor Rates + summary: Remove Favorite + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/vendors: + get: + tags: + - Vendors + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vendors + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"first_name\": \"Vendor\",\n \"last_name\": \"Name\",\n + \"company_name\": \"ACME\",\n \"email\": + \"vendor@example.com\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vendors/{id}: + put: + tags: + - Vendors + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"company_name\": \"ACME Inc\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vendors + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/toggle-vendor-status: + post: + tags: + - Vendors + summary: Toggle Status + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/create-vendor-address: + post: + tags: + - Vendors + summary: Create Vendor Address + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"vendor_id\": 1,\n \"address_line_1\": \"123 Main + St\",\n \"address_line_2\": \"Suite 100\",\n \"country_id\": + 1,\n \"state_id\": 1,\n \"city\": \"New York\",\n + \"zip_code\": \"10001\",\n \"phone_number\": \"555-1234\",\n + \"title\": \"Main Office\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vendor-address/{id}: + get: + tags: + - Vendors + summary: Get Vendor Address + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inspection-categories: + get: + tags: + - Inspection Categories + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Inspection Categories + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"inspection_name\": \"Brake Check\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inspection-categories/{id}: + put: + tags: + - Inspection Categories + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"inspection_name\": \"Brake Check\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Inspection Categories + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/inspections: + get: + tags: + - Inspections + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Inspections + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Pre-purchase\",\n \"customer_id\": 1,\n + \"vehicle_id\": 1,\n \"department_id\": 1,\n + \"inspection_category_id\": 1,\n \"employee_id\": 1,\n + \"order_number\": \"ORD-001\",\n \"date\": \"2026-03-16\",\n + \"time\": \"10:00:00\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inspections/{id}: + put: + tags: + - Inspections + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Pre-purchase\",\n \"note\": \"Updated + note\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Inspections + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/change-inspection-status: + post: + tags: + - Inspections + summary: Change Inspection Status + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1,\n \"status\": \"completed\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/labels: + get: + tags: + - Labels + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Labels + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/labels/{id}: + put: + tags: + - Labels + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Labels + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/insurance-types: + get: + tags: + - Insurance Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Insurance Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Comprehensive\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/insurance-types/{id}: + put: + tags: + - Insurance Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Comprehensive\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Insurance Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/estimates: + get: + tags: + - Estimates + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Estimates + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Estimate 001\",\n \"customer_id\": 1,\n + \"vehicle_id\": 1,\n \"department_id\": 1,\n + \"estimate_number\": \"EST-001\",\n \"date\": + \"2026-03-16\",\n \"has_insurance\": false,\n \"label_ids\": + [1],\n \"remarks\": [\"Customer note\"]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/estimates/{id}: + put: + tags: + - Estimates + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Estimate 001\",\n \"label_ids\": [1, 2],\n + \"remarks\": [\"Updated note\"]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Estimates + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/quick-remark: + get: + tags: + - Quick Remark + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Quick Remark + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"description\": \"Needs follow-up\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/quick-remark/{id}: + put: + tags: + - Quick Remark + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"description\": \"Needs follow-up\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Quick Remark + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/quick-notes: + get: + tags: + - Quick Notes + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Quick Notes + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"description\": \"Quick note text\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/quick-notes/{id}: + put: + tags: + - Quick Notes + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"description\": \"Updated note\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Quick Notes + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/check-point-label: + get: + tags: + - Check Point Label + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Check Point Label + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/check-point-label/{id}: + put: + tags: + - Check Point Label + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Check Point Label + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/inspection-check-points: + get: + tags: + - Inspection Check Points + summary: List + parameters: + - name: inspection_id + in: query + schema: + type: integer + example: '1' + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Inspection Check Points + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"inspection_id\": 1,\n \"name\": \"Brake pads\",\n + \"description\": \"Check thickness\",\n \"record_type\": + \"record_conditions\",\n \"condition_rate\": 85\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inspection-check-points/{id}: + put: + tags: + - Inspection Check Points + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"name\": \"Brake pads\",\n \"record_type\": + \"record_conditions\",\n \"condition_rate\": 90,\n \"file\": + null\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Inspection Check Points + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/toggle-label-to-checkpoint: + post: + tags: + - Inspection Check Points + summary: Toggle Label to Checkpoint + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"inspection_check_point_id\": 1,\n + \"check_point_label_id\": 1\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/inspection-check-points/change-status: + post: + tags: + - Inspection Check Points + summary: Change Status + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"inspection_check_point_id\": 1,\n \"status\": + \"passed\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/inspection-check-points/add-attachment: + post: + tags: + - Inspection Check Points + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + inspection_check_point_id: + type: integer + example: '1' + attachment: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/inspection-check-points/{id}/upload-media: + post: + tags: + - Inspection Check Points + summary: Upload Media + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inspection-check-points/{id}/media: + delete: + tags: + - Inspection Check Points + summary: Remove Media + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/job-cards: + get: + tags: + - Job Cards + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Job Cards + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Job Card 001\",\n \"customer_id\": 1,\n + \"vehicle_id\": 1,\n \"status\": \"draft\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/job-cards/{id}: + put: + tags: + - Job Cards + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Job Card 001 Updated\",\n \"status\": + \"check_in\",\n \"department_id\": 1,\n \"check_in_date\": + \"2026-03-18\",\n \"km_in\": 50000,\n \"label_ids\": [1]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Job Cards + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/job-cards/{id}/change-date: + post: + tags: + - Job Cards + summary: Change Date + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"order_date\": \"2026-03-18\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/job-cards/{id}/change-status: + post: + tags: + - Job Cards + summary: Change Status + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"status\": \"in_progress\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/job-cards/{id}/add-customer-remark: + post: + tags: + - Job Cards + summary: Add Customer Remark + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"remark\": \"Customer requested wash\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/job-cards/{id}/edit-customer-remark: + post: + tags: + - Job Cards + summary: Edit Customer Remark + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"customer_remark_id\": 1,\n \"remark\": \"Updated + remark\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/job-cards/{id}/delete-customer-remark: + delete: + tags: + - Job Cards + summary: Delete Customer Remark + parameters: + - name: customer_remark_id + in: query + schema: + type: integer + example: '1' + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/job-cards/{id}/add-shop-recommendation: + post: + tags: + - Job Cards + summary: Add Shop Recommendation + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"recommendation\": \"Replace brake pads\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/job-cards/{id}/edit-shop-recommendation: + post: + tags: + - Job Cards + summary: Edit Shop Recommendation + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"shop_recommendation_id\": 1,\n \"recommendation\": + \"Updated recommendation\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/job-cards/{id}/delete-shop-recommendation: + delete: + tags: + - Job Cards + summary: Delete Shop Recommendation + parameters: + - name: shop_recommendation_id + in: query + schema: + type: integer + example: '1' + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/job-cards/{id}/add-attachment: + post: + tags: + - Job Cards + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/job-cards/{id}/delete-attachment: + post: + tags: + - Job Cards + summary: Delete Attachment + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"attachment_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/job-cards/{id}/change-service-writer-id: + post: + tags: + - Job Cards + summary: Change Service Writer + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"service_writer_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/job-cards/{id}/change-sales-person-id: + post: + tags: + - Job Cards + summary: Change Sales Person + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"sales_person_id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/payment-mode: + get: + tags: + - Payment Modes + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Payment Modes + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Cash\",\n \"is_default\": true\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/payment-mode/{id}: + put: + tags: + - Payment Modes + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Bank Transfer\",\n \"is_default\": false\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Payment Modes + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/payment-recieved: + get: + tags: + - Payment Received + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Payment Received + summary: Create + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + job_card_id: + type: integer + example: '1' + payment_mode_id: + type: integer + example: '1' + customer_id: + type: integer + example: '1' + amount_received: + type: integer + example: '5000' + payment_number: + type: string + example: PAY-001 + payment_date: + type: string + example: '2026-03-18' + note: + type: string + example: First payment + attachment_files[]: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/payment-recieved/{id}: + post: + tags: + - Payment Received + summary: Update + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + _method: + type: string + example: PUT + amount_received: + type: integer + example: '6000' + note: + type: string + example: Updated payment + delete_attachment_ids[]: + type: integer + example: '1' + attachment_files[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Payment Received + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/parts: + get: + tags: + - Parts + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Parts + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": + \"Brake Pad\",\n \"sku\": \"BP-001\",\n \"unit_type_id\": + 1,\n \"department_id\": 1,\n \"description\": \"Front brake + pad set\",\n \"selling_price\": 45.00,\n \"purchase_price\": + 25.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/parts/{id}: + put: + tags: + - Parts + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Brake Pad Updated\",\n \"selling_price\": + 50.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Parts + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/import-parts: + post: + tags: + - Parts + summary: Import + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Import completed successfully. + /api/export-parts: + post: + tags: + - Parts + summary: Export + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"search\": \"\",\n \"shop_type_id\": null,\n + \"category_id\": null,\n \"department_id\": null\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Export generated successfully. + /api/toggle-part-status: + post: + tags: + - Parts + summary: Toggle Status + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/purchase-orders: + get: + tags: + - Purchase Orders + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Purchase Orders + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"job_card_id\": 1,\n \"vendor_id\": 1,\n \"title\": + \"PO-001\",\n \"order_number\": \"PO-2026-001\",\n + \"order_date\": \"2026-03-19\",\n \"delivery_date\": + \"2026-03-25\",\n \"department_id\": 1,\n \"notes\": \"Urgent + order\",\n \"label_ids\": [1],\n \"items\": [\n {\n + \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": + 25.00,\n \"description\": \"Brake pads\"\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/purchase-orders/{id}: + put: + tags: + - Purchase Orders + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"PO-001 Updated\",\n \"notes\": \"Updated + notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n + \"part_id\": 1,\n \"quantity\": 10,\n \"rate\": + 22.00,\n \"description\": \"Brake pads bulk\"\n }\n + ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Purchase Orders + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/services: + get: + tags: + - Services + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Services + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n + \"labor_name\": \"Oil Change\",\n \"service_code\": + \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": + \"Standard\",\n \"department_id\": 1,\n \"description\": + \"Full synthetic oil change\",\n \"selling_price\": 75.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/services/{id}: + put: + tags: + - Services + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"labor_name\": \"Oil Change Premium\",\n + \"selling_price\": 85.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Services + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/import-services: + post: + tags: + - Services + summary: Import + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Import completed successfully. + /api/export-services: + post: + tags: + - Services + summary: Export + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"search\": \"\",\n \"shop_type_id\": null,\n + \"category_id\": null,\n \"department_id\": null\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Export generated successfully. + /api/expense-items: + get: + tags: + - Expense Items + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Expense Items + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"item_type\": \"Office Supply\",\n \"category_id\": + 1,\n \"item_name\": \"Printer Paper\",\n \"sku\": + \"EXP-001\",\n \"unit_type_id\": 1,\n \"department_id\": 1,\n + \"description\": \"A4 printer paper\",\n \"selling_price\": + 15.00,\n \"purchase_price\": 10.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/expense-items/{id}: + put: + tags: + - Expense Items + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"item_name\": \"Printer Paper A4\",\n \"selling_price\": + 18.00\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Expense Items + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/toggle-expense-item-status: + post: + tags: + - Expense Items + summary: Toggle Status + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/bills: + get: + tags: + - Bills + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Bills + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Bill 001\",\n \"job_card_id\": 1,\n + \"vendor_id\": 1,\n \"vendor_address_id\": 1,\n \"bill_date\": + \"2026-03-19\",\n \"bill_due_date\": \"2026-04-19\",\n + \"payment_terms_id\": 1,\n \"department_id\": 1,\n \"notes\": + \"Monthly bill\",\n \"label_ids\": [1],\n \"items\": [\n + {\n \"part_id\": 1,\n \"quantity\": 3,\n + \"rate\": 25.00,\n \"chart_of_account\": null,\n + \"description\": \"Brake pads\"\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/bills/{id}: + put: + tags: + - Bills + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Bill 001 Updated\",\n \"notes\": \"Updated + notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n + \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": + 22.00,\n \"description\": \"Brake pads bulk\"\n }\n + ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Bills + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/expenses: + get: + tags: + - Expenses + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Expenses + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"job_card_id\": 1,\n \"title\": \"Office Supplies\",\n + \"category_id\": 1,\n \"vendor_id\": 1,\n \"invoice_number\": + \"INV-001\",\n \"expense_date\": \"2026-03-19\",\n + \"department_id\": 1,\n \"notes\": \"Monthly office + expense\",\n \"status\": \"open\",\n \"label_ids\": [1],\n + \"items\": [\n {\n \"expense_item_id\": 1,\n + \"quantity\": 2,\n \"rate\": 15.00,\n + \"chart_of_account\": null,\n \"description\": \"Printer + paper\"\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/expenses/{id}: + put: + tags: + - Expenses + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Office Supplies Updated\",\n \"status\": + \"paid\",\n \"label_ids\": [1, 2],\n \"items\": [\n + {\n \"expense_item_id\": 1,\n \"quantity\": 5,\n + \"rate\": 12.00,\n \"description\": \"Printer paper + bulk\"\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Expenses + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/task-types: + get: + tags: + - Task Types + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Task Types + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Maintenance\",\n \"is_default\": false\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/task-types/{id}: + put: + tags: + - Task Types + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Maintenance Updated\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Task Types + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-default-task-type: + post: + tags: + - Task Types + summary: Set Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-default-task-type: + post: + tags: + - Task Types + summary: Remove Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/task-sections: + get: + tags: + - Task Sections + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Task Sections + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"To Do\",\n \"arrangement\": 1,\n + \"is_default\": false\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/task-sections/{id}: + put: + tags: + - Task Sections + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"To Do Updated\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Task Sections + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-default-task-section: + post: + tags: + - Task Sections + summary: Set Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-default-task-section: + post: + tags: + - Task Sections + summary: Remove Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/change-task-section-arrangement: + post: + tags: + - Task Sections + summary: Change Arrangement + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1,\n \"arrangement\": 3\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/tasks: + get: + tags: + - Tasks + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Tasks + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"task_type_id\": 1,\n \"task_section_id\": 1,\n + \"job_card_id\": 1,\n \"subject\": \"Replace brake pads\",\n + \"description\": \"Front and rear brake pads need + replacement\",\n \"owner_id\": 1,\n \"department_id\": 1,\n + \"priority\": 2,\n \"due_date\": \"2026-03-25\",\n + \"task_number\": \"TSK-001\",\n \"status\": \"pending\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/tasks/{id}: + put: + tags: + - Tasks + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Replace brake pads - Updated\",\n + \"priority\": 3,\n \"due_date\": \"2026-03-28\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Tasks + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/tasks/{id}/complete: + post: + tags: + - Tasks + summary: Complete + requestBody: + content: {} + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/appointments: + get: + tags: + - Appointments + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Appointments + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Brake Inspection\",\n \"date\": + \"2026-03-25\",\n \"from_time\": \"09:00\",\n \"to_time\": + \"10:00\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n + \"service_writer_id\": 1,\n \"technician_id\": 1,\n + \"department_id\": 1,\n \"job_card_id\": 1,\n \"notes\": + \"Customer requested morning slot\",\n \"label_ids\": [1]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/appointments/{id}: + put: + tags: + - Appointments + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Brake Inspection Updated\",\n \"date\": + \"2026-03-26\",\n \"from_time\": \"14:00\",\n \"to_time\": + \"15:00\",\n \"label_ids\": [1, 2]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Appointments + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/appointments/{id}/un-link-job-card: + post: + tags: + - Appointments + summary: Unlink Job Card + requestBody: + content: {} + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/invoice-sequences: + get: + tags: + - Invoice Sequences + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Invoice Sequences + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Default Invoice Sequence\",\n + \"sequence_title\": \"INV 2026\",\n \"is_default\": true,\n + \"auto_generate\": true,\n \"prefix\": \"INV-\",\n + \"start_number\": 1,\n \"department_id\": 1\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/invoice-sequences/{id}: + put: + tags: + - Invoice Sequences + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Updated Sequence\",\n \"prefix\": + \"INV-2026-\",\n \"start_number\": 100\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Invoice Sequences + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/set-default-invoice-sequence: + post: + tags: + - Invoice Sequences + summary: Set Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/remove-default-invoice-sequence: + post: + tags: + - Invoice Sequences + summary: Remove Default + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"id\": 1\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Removed successfully. + /api/service-groups: + get: + tags: + - Service Groups + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Service Groups + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"service_name\": \"Engine Service Group\",\n + \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n + \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n + \"department_id\": 1,\n \"service_description\": \"Common + engine services\",\n \"show_as_lump_sum\": false,\n + \"mark_as_recommended\": true,\n \"set_packaged_pricing\": + false,\n \"selling_price\": 100,\n + \"selling_chart_of_account\": \"4000\",\n \"is_active\": + true\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/service-groups/{id}: + put: + tags: + - Service Groups + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"service_name\": \"Engine Service Group Updated\",\n + \"selling_price\": 125,\n \"is_active\": true\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Service Groups + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/invoice-labels: + get: + tags: + - Invoice Labels + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Invoice Labels + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"title\": \"Urgent Invoice\",\n \"color_code\": + \"#FF0000\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/invoice-labels/{id}: + put: + tags: + - Invoice Labels + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"title\": \"Urgent\",\n \"color_code\": \"#D60000\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Invoice Labels + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/invoices: + get: + tags: + - Invoices + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Invoices + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Invoice 001\",\n \"customer_id\": 1,\n + \"vehicle_id\": 1,\n \"invoice_date\": \"2026-03-23\",\n + \"due_date\": \"2026-03-30\",\n \"invoice_sequence_id\": 1,\n + \"invoice_number\": \"INV-0001\",\n \"department_id\": 1,\n + \"status\": \"draft\",\n \"inspection_categories\": [\n + {\n \"inspection_category_id\": 1,\n \"rate\": + 100\n }\n ],\n \"parts\": [\n {\n \"part_id\": + 1,\n \"quantity\": 1,\n \"rate\": 25\n }\n ],\n + \"services\": [\n {\n \"service_id\": 1,\n + \"rate\": 50\n }\n ],\n \"expenses\": [\n {\n + \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": + 10\n }\n ],\n \"service_groups\": [\n {\n + \"service_group_id\": 1,\n \"rate\": 120\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/invoices/{id}: + put: + tags: + - Invoices + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Invoice 001 Updated\",\n \"status\": + \"open\",\n \"notes\": \"Updated note\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Invoices + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/invoices/{id}/add-attachment: + post: + tags: + - Invoices + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/invoices/{id}/delete-attachment: + delete: + tags: + - Invoices + summary: Delete Attachment + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/invoice-documents: + get: + tags: + - Invoice Documents + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Invoice Documents + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"invoice_id\": 1,\n \"customer_id\": 1,\n + \"vehicle_id\": 1,\n \"document_type_id\": 1,\n + \"document_number\": \"DOC-001\",\n \"show_in_invoice\": + true,\n \"show_in_estimate\": false,\n \"show_in_statement\": + false\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/invoice-documents/{id}: + put: + tags: + - Invoice Documents + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"document_number\": \"DOC-001-UPDATED\",\n + \"show_in_statement\": true\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Invoice Documents + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/invoice-notes: + get: + tags: + - Invoice Notes + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Invoice Notes + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"invoice_id\": 1,\n \"note\": \"Call customer before + delivery\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/invoice-notes/{id}: + put: + tags: + - Invoice Notes + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"note\": \"Updated internal note\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Invoice Notes + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/credit-notes: + get: + tags: + - Credit Notes + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Credit Notes + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Credit Note 001\",\n \"customer_id\": + 1,\n \"date\": \"2026-03-23\",\n \"status\": \"open\",\n + \"labels\": [\n { \"label_id\": 1 }\n ],\n \"inspections\": + [\n {\n \"inspection_category_id\": 1,\n \"rate\": + 20\n }\n ],\n \"parts\": [\n {\n \"part_id\": + 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ],\n + \"services\": [\n {\n \"service_id\": 1,\n + \"rate\": 15\n }\n ],\n \"expenses\": [\n {\n + \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": + 5\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/credit-notes/{id}: + put: + tags: + - Credit Notes + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Credit Note 001 Updated\",\n \"notes\": + \"Adjusted amount\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Credit Notes + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/credit-notes/{id}/add-attachment: + post: + tags: + - Credit Notes + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/credit-notes/{id}/delete-attachment: + delete: + tags: + - Credit Notes + summary: Delete Attachment + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/credit-notes/{id}/add-internal-note: + post: + tags: + - Credit Notes + summary: Add Internal Note + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"note\": \"Internal review needed\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/credit-notes/{id}/edit-internal-note: + delete: + tags: + - Credit Notes + summary: Edit Internal Note + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/credit-notes/{id}/delete-internal-note: + delete: + tags: + - Credit Notes + summary: Delete Internal Note + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/payment-mades: + get: + tags: + - Payment Mades + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Payment Mades + summary: Create (Expense) + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"vendor_id\": 1,\n \"payment_for\": \"expense\",\n + \"payment_made\": 50,\n \"payment_date\": \"2026-03-23\",\n + \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"details\": + [\n {\n \"expense_id\": 1,\n \"amount_paid\": + 50\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/payment-mades/{id}: + put: + tags: + - Payment Mades + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"notes\": \"Updated payment made\",\n \"details\": + [\n {\n \"bill_id\": 1,\n \"amount_paid\": 75\n + }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Payment Mades + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/payment-mades/{id}/add-attachment: + post: + tags: + - Payment Mades + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/payment-mades/{id}/delete-attachment: + delete: + tags: + - Payment Mades + summary: Delete Attachment + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vendor-credits: + get: + tags: + - Vendor Credits + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Vendor Credits + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Vendor Credit 001\",\n \"credit_number\": + \"VC-001\",\n \"vendor_id\": 1,\n \"vendor_credit_date\": + \"2026-03-23\",\n \"department_id\": 1,\n \"labels\": [\n { + \"label_id\": 1 }\n ],\n \"parts\": [\n {\n + \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 25\n + }\n ],\n \"services\": [\n {\n \"service_id\": + 1,\n \"quantity\": 1,\n \"rate\": 50\n }\n ],\n + \"expenses\": [\n {\n \"expense_id\": 1,\n + \"quantity\": 1,\n \"rate\": 10\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/vendor-credits/{id}: + put: + tags: + - Vendor Credits + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"subject\": \"Vendor Credit 001 Updated\",\n \"notes\": + \"Updated notes\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Vendor Credits + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vendor-credits/{id}/add-attachment: + post: + tags: + - Vendor Credits + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/vendor-credits/{id}/delete-attachment: + delete: + tags: + - Vendor Credits + summary: Delete Attachment + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vendor-credits/{id}/add-internal-note: + post: + tags: + - Vendor Credits + summary: Add Internal Note + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"note\": \"Internal note\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/vendor-credits/{id}/edit-internal-note: + delete: + tags: + - Vendor Credits + summary: Edit Internal Note + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/vendor-credits/{id}/delete-internal-note: + delete: + tags: + - Vendor Credits + summary: Delete Internal Note + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/inventory-adjustments: + get: + tags: + - Inventory Adjustments + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Inventory Adjustments + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"reference_number\": \"IA-001\",\n \"date\": + \"2026-03-23\",\n \"chart_of_account\": 1,\n \"reason_id\": + 1,\n \"job_card_id\": 1,\n \"invoice_id\": 1,\n \"notes\": + \"Stock correction\",\n \"parts\": [\n {\n \"part_id\": + 1,\n \"quantity\": 2,\n \"rate\": 25,\n + \"description\": \"Adjustment line\"\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/inventory-adjustments/{id}: + put: + tags: + - Inventory Adjustments + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"notes\": \"Updated adjustment\",\n \"parts\": [\n + {\n \"part_id\": 1,\n \"quantity\": 3,\n + \"rate\": 25\n }\n ]\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Inventory Adjustments + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/inventory-adjustments/{id}/add-attachment: + post: + tags: + - Inventory Adjustments + summary: Add Attachment + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + attachments[]: + type: string + format: binary + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/inventory-adjustments/{id}/delete-attachment: + delete: + tags: + - Inventory Adjustments + summary: Delete Attachment + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/time-sheets: + get: + tags: + - Time Sheets + summary: List + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + data: + - id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + meta: + current_page: 1 + last_page: 1 + per_page: 15 + total: 1 + from: 1 + to: 1 + post: + tags: + - Time Sheets + summary: Create + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n + \"clock_in\": \"09:00:00\",\n \"clock_out\": \"17:00:00\",\n + \"note\": \"Regular shift\",\n \"activity_type\": + \"general\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Created successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:00:00.000000Z' + /api/time-sheets/{id}: + put: + tags: + - Time Sheets + summary: Update + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"clock_out\": \"18:00:00\",\n \"note\": \"Overtime\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + delete: + tags: + - Time Sheets + summary: Delete + parameters: + - name: id + in: path + schema: + type: string + required: true + responses: + '200': + description: OK + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Deleted successfully. + /api/time-sheet/clock-in: + post: + tags: + - Time Sheets + summary: Clock In + requestBody: + content: + '*/*': + schema: + type: string + example: >- + "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n + \"activity_type\": \"general\",\n \"note\": \"Clock in\"\n}" + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' + /api/time-sheet/clock-out: + post: + tags: + - Time Sheets + summary: Clock Out + requestBody: + content: + '*/*': + schema: + type: string + example: '"{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\"\n}"' + parameters: + - name: Content-Type + in: header + schema: + type: string + example: application/json + responses: + '201': + description: Created + headers: + Content-Type: + schema: + type: string + example: application/json + content: + application/json: + schema: + type: object + example: + message: Updated successfully. + data: + id: 1 + name: Sample Item + created_at: '2026-03-23T12:00:00.000000Z' + updated_at: '2026-03-23T12:10:00.000000Z' diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 0000000..e28b900 --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,39 @@ +{ + "name": "@repo/api", + "version": "0.0.0", + "private": true, + "exports": { + ".": "./src/index.ts", + "./infra": "./src/infra/index.ts", + "./clients": "./src/clients/index.ts", + "./server": "./src/server.ts", + "./postman/*": "./postman/*", + "./open-api/*": "./open-api/*", + "./types": "./types/index.ts", + "./types/*": "./types/*" + }, + "scripts": { + "prepare:dirs": "node -e \"const fs=require('fs');fs.mkdirSync('open-api',{recursive:true});fs.mkdirSync('types',{recursive:true});\"", + "generate:openapi": "pnpm run prepare:dirs && node scripts/generate-openapi.cjs", + "generate:types": "node scripts/generate-types.cjs", + "generate": "pnpm run generate:openapi && pnpm run generate:types", + "dev": "pnpm run generate", + "build": "pnpm run generate", + "lint": "echo \"No lint configured for @repo/api\"", + "check-types": "echo \"No typecheck configured for @repo/api\"" + }, + "dependencies": { + "openapi-fetch": "^0.14.0" + }, + "devDependencies": { + "openapi-typescript": "^7.10.1" + }, + "peerDependencies": { + "next": ">=14", + "server-only": "*" + }, + "peerDependenciesMeta": { + "next": { "optional": true }, + "server-only": { "optional": true } + } +} diff --git a/packages/api/postman/collection.json b/packages/api/postman/collection.json new file mode 100644 index 0000000..6add2c5 --- /dev/null +++ b/packages/api/postman/collection.json @@ -0,0 +1,20462 @@ +{ + "info": { + "_postman_id": "cb4c39c8-b714-48f4-8996-5a9774d58d12", + "name": "Reparee API", + "description": "All authenticated API endpoints. Set base_url and auth_token in collection variables.", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "17202336" + }, + "item": [ + { + "name": "Auth", + "item": [ + { + "name": "Login", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"admin@admin.com\",\n \"password\": \"12345678\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/login", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "login" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"email\": \"admin@admin.com\",\n \"password\": \"12345678\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/login", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "login" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"token\": \"1|YOUR_SANCTUM_TOKEN\",\n \"user\": {\n \"id\": 1,\n \"name\": \"Admin\",\n \"email\": \"admin@admin.com\"\n }\n}" + } + ] + }, + { + "name": "Profile", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/profile", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "profile" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/profile", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "profile" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"id\": 1,\n \"name\": \"Admin\",\n \"email\": \"admin@admin.com\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Logout", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/logout", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "logout" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/logout", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "logout" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Logged out successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Referral Sources", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/referral-sources", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/referral-sources", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"current_page\": 1,\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Website\",\n \"is_default\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"first_page_url\": \"http://localhost:8000/api/referral-sources?page=1\",\n \"from\": 1,\n \"last_page\": 1,\n \"last_page_url\": \"http://localhost:8000/api/referral-sources?page=1\",\n \"links\": [],\n \"next_page_url\": null,\n \"path\": \"http://localhost:8000/api/referral-sources\",\n \"per_page\": 10,\n \"prev_page_url\": null,\n \"to\": 1,\n \"total\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Website\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/referral-sources", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Website\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/referral-sources", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Referral source created successfully.\",\n \"data\": {\n \"id\": 2,\n \"name\": \"Walk-in\",\n \"is_default\": false,\n \"created_at\": \"2026-03-23T12:05:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:05:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Website\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/referral-sources/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Website\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/referral-sources/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Referral source updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Website Ads\",\n \"is_default\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/referral-sources/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/referral-sources/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "referral-sources", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Referral source deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-referral-source", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-referral-source" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-referral-source", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-referral-source" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default referral source updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Website\",\n \"is_default\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:15:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Customers", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company_name\": \"Doe Holdings\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"opening_balance\": 0,\n \"credit_limit\": 5000,\n \"website\": \"https://example.com\",\n \"referral_source_id\": 1,\n \"payment_terms_id\": 1,\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"customer_type\": {\n \"id\": 1,\n \"name\": \"Retail\"\n },\n \"referral_source\": {\n \"id\": 1,\n \"name\": \"Website\"\n },\n \"payment_term\": {\n \"id\": 1,\n \"title\": \"Net 30\",\n \"days\": 30\n },\n \"country\": {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n },\n \"state\": {\n \"id\": 1,\n \"name\": \"Dubai\",\n \"code\": \"DU\"\n }\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company_name\": \"Doe Holdings\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"referral_source_id\": 1,\n \"payment_terms_id\": 1,\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/customers", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company_name\": \"Doe Holdings\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"referral_source_id\": 1,\n \"payment_terms_id\": 1,\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/customers", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Customer created successfully.\",\n \"data\": {\n \"id\": 2,\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company_name\": \"Doe Holdings\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"opening_balance\": 0,\n \"credit_limit\": 5000,\n \"website\": \"https://example.com\",\n \"referral_source_id\": 1,\n \"payment_terms_id\": 1,\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\",\n \"created_at\": \"2026-03-23T12:20:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:20:00.000000Z\",\n \"customer_type\": {\n \"id\": 1,\n \"name\": \"Retail\"\n },\n \"referral_source\": {\n \"id\": 1,\n \"name\": \"Website\"\n },\n \"payment_term\": {\n \"id\": 1,\n \"title\": \"Net 30\",\n \"days\": 30\n },\n \"country\": {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n },\n \"state\": {\n \"id\": 1,\n \"name\": \"Dubai\",\n \"code\": \"DU\"\n }\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/customers/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/customers/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Customer updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company_name\": \"Doe Holdings\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"opening_balance\": 0,\n \"credit_limit\": 5000,\n \"website\": \"https://example.com\",\n \"referral_source_id\": 1,\n \"payment_terms_id\": 1,\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:30:00.000000Z\",\n \"customer_type\": {\n \"id\": 1,\n \"name\": \"Retail\"\n },\n \"referral_source\": {\n \"id\": 1,\n \"name\": \"Website\"\n },\n \"payment_term\": {\n \"id\": 1,\n \"title\": \"Net 30\",\n \"days\": 30\n },\n \"country\": {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n },\n \"state\": {\n \"id\": 1,\n \"name\": \"Dubai\",\n \"code\": \"DU\"\n }\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Customer deleted successfully.\"\n}" + } + ] + }, + { + "name": "Export", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers/export", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "export" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customers/export", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "export" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Customers export generated successfully.\",\n \"data\": {\n \"file_name\": \"customers-2026-03-23-123000.xlsx\"\n }\n}" + } + ] + }, + { + "name": "Import", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/customers/import", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "import" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/customers/import", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customers", + "import" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Customer import completed successfully.\",\n \"data\": {\n \"imported_count\": 10,\n \"failed_count\": 1,\n \"failed_rows\": [\n {\n \"row\": 4,\n \"errors\": [\n \"The email has already been taken.\"\n ],\n \"values\": {\n \"email\": \"dup@example.com\"\n }\n }\n ]\n }\n}" + } + ] + } + ] + }, + { + "name": "Customer Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customer-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customer-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/customer-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "customer-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Retail\"\n }\n ]\n}" + } + ] + } + ] + }, + { + "name": "Countries & States", + "item": [ + { + "name": "Countries", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/countries", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "countries" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/countries", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "countries" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n },\n {\n \"id\": 2,\n \"name\": \"Saudi Arabia\",\n \"code\": \"SA\"\n }\n ]\n}" + } + ] + }, + { + "name": "States", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/states", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "states" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/states", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "states" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"country_id\": 1,\n \"name\": \"Dubai\",\n \"code\": \"DU\",\n \"country\": {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n }\n },\n {\n \"id\": 2,\n \"country_id\": 1,\n \"name\": \"Abu Dhabi\",\n \"code\": \"AZ\",\n \"country\": {\n \"id\": 1,\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\"\n }\n }\n ]\n}" + } + ] + } + ] + }, + { + "name": "Payment Terms", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-terms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-terms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"image\": null,\n \"image_url\": null,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_number\": null,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"reg_date\": null,\n \"mfg_date\": null,\n \"parked_at\": null,\n \"mileage\": \"10000\",\n \"owners_number\": \"1\",\n \"front_tire_size\": null,\n \"rear_tire_size\": null,\n \"note\": \"New vehicle\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"vehicle_body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"vehicle_fuel_type\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"vehicle_transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n },\n \"vehicle_color\": {\n \"id\": 1,\n \"title\": \"Red\",\n \"code\": \"RD\"\n }\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Net 30\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-terms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Net 30\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-terms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Net 30\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-terms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Net 30\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-terms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-terms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-terms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-terms", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-payment-term", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-payment-term" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-payment-term", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-payment-term" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Shop Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"Main Workshop\",\n \"shop_type\": \"Car\",\n \"note\": \"General automotive services\",\n \"inspection\": \"shop_types/inspection/inspection-template.pdf\",\n \"image\": \"shop_types/image/shop-type-car.jpg\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "title", + "value": "Main Workshop", + "type": "text" + }, + { + "key": "shop_type", + "value": "Car", + "type": "text" + }, + { + "key": "note", + "value": "General automotive services", + "type": "text" + }, + { + "key": "is_default", + "value": "1", + "type": "text" + }, + { + "key": "inspection", + "type": "file", + "value": "" + }, + { + "key": "image", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/shop-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "title", + "value": "Main Workshop", + "type": "text" + }, + { + "key": "shop_type", + "value": "Car", + "type": "text" + }, + { + "key": "note", + "value": "General automotive services", + "type": "text" + }, + { + "key": "is_default", + "value": "1", + "type": "text" + }, + { + "key": "inspection", + "type": "file", + "value": "" + }, + { + "key": "image", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/shop-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop type created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Main Workshop\",\n \"shop_type\": \"Car\",\n \"note\": \"General automotive services\",\n \"inspection\": \"shop_types/inspection/inspection-template.pdf\",\n \"image\": \"shop_types/image/shop-type-car.jpg\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "_method", + "value": "PUT", + "type": "text" + }, + { + "key": "title", + "value": "Main Workshop Updated", + "type": "text" + }, + { + "key": "shop_type", + "value": "Car", + "type": "text" + }, + { + "key": "note", + "value": "Updated note", + "type": "text" + }, + { + "key": "is_default", + "value": "0", + "type": "text" + }, + { + "key": "inspection", + "type": "file", + "value": "" + }, + { + "key": "image", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/shop-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "_method", + "value": "PUT", + "type": "text" + }, + { + "key": "title", + "value": "Main Workshop Updated", + "type": "text" + }, + { + "key": "shop_type", + "value": "Car", + "type": "text" + }, + { + "key": "note", + "value": "Updated note", + "type": "text" + }, + { + "key": "is_default", + "value": "0", + "type": "text" + }, + { + "key": "inspection", + "type": "file", + "value": "" + }, + { + "key": "image", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/shop-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop type updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Main Workshop Updated\",\n \"shop_type\": \"Car\",\n \"note\": \"Updated note\",\n \"inspection\": \"shop_types/inspection/inspection-template-v2.pdf\",\n \"image\": \"shop_types/image/shop-type-car-v2.jpg\",\n \"is_default\": false,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop type deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Body Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-body-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-body-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"labor_name\": \"Oil Change\",\n \"service_code\": \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": \"Standard\",\n \"description\": \"Full synthetic oil change\",\n \"department_id\": 1,\n \"sales_information\": false,\n \"rate_type\": null,\n \"labor_rate_id\": null,\n \"labor_hours\": null,\n \"sales_chart_of_account\": null,\n \"selling_price\": \"75.00\",\n \"purchase_information\": false,\n \"purchase_chart_of_account\": null,\n \"purchase_preferred_vendor_id\": null,\n \"purchase_price\": null,\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"category\": {\n \"id\": 1,\n \"title\": \"Oil & Maintenance\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"title\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n },\n \"labor_rate\": null\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Sedan\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-body-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Sedan\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-body-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"labor_name\": \"Oil Change\",\n \"service_code\": \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": \"Standard\",\n \"description\": \"Full synthetic oil change\",\n \"department_id\": 1,\n \"sales_information\": false,\n \"rate_type\": null,\n \"labor_rate_id\": null,\n \"labor_hours\": null,\n \"sales_chart_of_account\": null,\n \"selling_price\": \"75.00\",\n \"purchase_information\": false,\n \"purchase_chart_of_account\": null,\n \"purchase_preferred_vendor_id\": null,\n \"purchase_price\": null,\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"category\": {\n \"id\": 1,\n \"title\": \"Oil & Maintenance\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"title\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n },\n \"labor_rate\": null\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Sedan\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-body-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Sedan\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-body-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"labor_name\": \"Oil Change Premium\",\n \"service_code\": \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": \"Standard\",\n \"description\": \"Full synthetic oil change\",\n \"department_id\": 1,\n \"sales_information\": false,\n \"rate_type\": null,\n \"labor_rate_id\": null,\n \"labor_hours\": null,\n \"sales_chart_of_account\": null,\n \"selling_price\": \"85.00\",\n \"purchase_information\": false,\n \"purchase_chart_of_account\": null,\n \"purchase_preferred_vendor_id\": null,\n \"purchase_price\": null,\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"category\": {\n \"id\": 1,\n \"title\": \"Oil & Maintenance\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"title\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n },\n \"labor_rate\": null\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-body-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-body-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-body-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Fuel Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"Gasoline\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Gasoline\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Gasoline\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Gasoline\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Gasoline\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Gasoline\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Gasoline\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-fuel-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-fuel-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Transmissions", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Automatic\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Automatic\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Automatic\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Automatic\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-transmissions/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-transmissions", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Colors", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-colors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-colors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Black\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-colors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Black\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-colors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Black\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-colors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Black\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-colors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-colors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-colors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-colors", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicles", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"mileage\": \"10000\",\n \"owners_number\": \"1\",\n \"note\": \"New vehicle\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicles", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"mileage\": \"10000\",\n \"owners_number\": \"1\",\n \"note\": \"New vehicle\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicles", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"image\": null,\n \"image_url\": null,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_number\": null,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"reg_date\": null,\n \"mfg_date\": null,\n \"parked_at\": null,\n \"mileage\": \"10000\",\n \"owners_number\": \"1\",\n \"front_tire_size\": null,\n \"rear_tire_size\": null,\n \"note\": \"New vehicle\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"vehicle_body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"vehicle_fuel_type\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"vehicle_transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n },\n \"vehicle_color\": {\n \"id\": 1,\n \"title\": \"Red\",\n \"code\": \"RD\"\n }\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"mileage\": \"12000\",\n \"license_plate\": \"ABC-123\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicles/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"mileage\": \"12000\",\n \"license_plate\": \"ABC-123\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicles/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"image\": null,\n \"image_url\": null,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_number\": null,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"reg_date\": null,\n \"mfg_date\": null,\n \"parked_at\": null,\n \"mileage\": \"12000\",\n \"owners_number\": \"1\",\n \"front_tire_size\": null,\n \"rear_tire_size\": null,\n \"note\": \"New vehicle\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"vehicle_body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"vehicle_fuel_type\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"vehicle_transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n },\n \"vehicle_color\": {\n \"id\": 1,\n \"title\": \"Red\",\n \"code\": \"RD\"\n }\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Export", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles/export", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "export" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicles/export", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "export" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"customer_type_id\": 1,\n \"salutation\": \"Mr\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@example.com\",\n \"phone\": \"0501234567\",\n \"alternate_phone\": \"0551234567\",\n \"address_line_1\": \"Street 10\",\n \"address_line_2\": \"Near Central Plaza\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"Dubai\",\n \"zip_code\": \"00000\"\n }\n ],\n \"pagination\": {\n \"current_page\": 1,\n \"first_page_url\": \"{{base_url}}/api/get-vehicle-owners?page=1\",\n \"from\": 1,\n \"last_page_url\": \"{{base_url}}/api/get-vehicle-owners?page=1\",\n \"next_page_url\": null,\n \"path\": \"{{base_url}}/api/get-vehicle-owners\",\n \"per_page\": 10,\n \"prev_page_url\": null,\n \"to\": 1,\n \"total\": 1\n }\n}" + } + ] + }, + { + "name": "Import", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/vehicles/import", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "import" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/vehicles/import", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicles", + "import" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Import completed successfully.\",\n \"data\": {\n \"imported_count\": 10,\n \"failed_count\": 1,\n \"failed_rows\": [\n {\n \"row\": 4,\n \"errors\": [\n \"The service code has already been taken.\"\n ],\n \"values\": {\n \"service_code\": \"SVC-001\"\n }\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Vehicle Owners", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/get-vehicle-owners", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "get-vehicle-owners" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/get-vehicle-owners", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "get-vehicle-owners" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Link Customer to Vehicle", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/link-customer-to-vehicle", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "link-customer-to-vehicle" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/link-customer-to-vehicle", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "link-customer-to-vehicle" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"image\": null,\n \"image_url\": null,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"mileage\": \"10000\",\n \"note\": \"New vehicle\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"customers\": [\n {\n \"id\": 1,\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@example.com\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Unlink Customer from Vehicle", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/unlink-customer-from-vehicle", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unlink-customer-from-vehicle" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_id\": 1,\n \"vehicle_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/unlink-customer-from-vehicle", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unlink-customer-from-vehicle" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"vehicle_body_type_id\": 1,\n \"vehicle_fuel_type_id\": 1,\n \"vehicle_transmission_id\": 1,\n \"vehicle_color_id\": 1,\n \"image\": null,\n \"image_url\": null,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": \"2024\",\n \"sub_model\": \"LE\",\n \"license_plate\": \"ABC-123\",\n \"vin_number\": \"1HGBH41JXMN109186\",\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"mileage\": \"10000\",\n \"note\": \"New vehicle\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"customers\": []\n }\n}" + } + ] + } + ] + }, + { + "name": "Document Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/document-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/document-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Registration\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/document-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Registration\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/document-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Registration\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/document-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Registration\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/document-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/document-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/document-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "document-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Documents", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vehicle_id\": 1,\n \"document_type_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vehicle_id\": 1,\n \"document_type_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-documents", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vehicle Mile and Kms", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vehicle_id\": 1,\n \"mileage\": 50000\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vehicle_id\": 1,\n \"mileage\": 50000\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"mileage\": 51000\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"mileage\": 51000\n}" + }, + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vehicle-mile-and-kms/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vehicle-mile-and-kms", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Departments", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/departments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/departments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Mechanical\",\n \"assignment_type\": \"bays\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/departments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Mechanical\",\n \"assignment_type\": \"bays\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/departments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Mechanical\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/departments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Mechanical\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/departments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/departments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/departments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "departments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-department", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-department" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-department", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-department" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-department", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-department" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-department", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-department" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Employees", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/employees", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/employees", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"email\": \"jane@example.com\",\n \"phone\": \"0501234567\",\n \"department_id\": 1,\n \"position\": \"Technician\",\n \"status\": \"active\",\n \"type\": \"employee\",\n \"track_attendance\": true,\n \"notify_owner_when_punch_in_out\": false,\n \"shop_calender_id\": 1,\n \"shop_timing_id\": 1,\n \"geo_fence_radius\": 100,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:00:00.000000Z\",\n \"department\": {\n \"id\": 1,\n \"name\": \"Mechanical\"\n },\n \"shop_calender\": {\n \"id\": 1,\n \"title\": \"Default Calendar\"\n },\n \"shop_timing\": {\n \"id\": 1,\n \"title\": \"Regular Shift\"\n },\n \"has_active_time_sheet\": false,\n \"active_time_sheet\": null\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"email\": \"jane@example.com\",\n \"phone\": \"0501234567\",\n \"department_id\": 1,\n \"position\": \"Technician\",\n \"status\": \"active\",\n \"type\": \"employee\",\n \"track_attendance\": true,\n \"notify_owner_when_punch_in_out\": false,\n \"shop_calender_id\": 1,\n \"shop_timing_id\": 1,\n \"geo_fence_radius\": 100\n}" + }, + "url": { + "raw": "{{base_url}}/api/employees", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"email\": \"jane@example.com\",\n \"phone\": \"0501234567\",\n \"department_id\": 1,\n \"position\": \"Technician\",\n \"status\": \"active\",\n \"type\": \"employee\",\n \"track_attendance\": true,\n \"notify_owner_when_punch_in_out\": false,\n \"shop_calender_id\": 1,\n \"shop_timing_id\": 1,\n \"geo_fence_radius\": 100\n}" + }, + "url": { + "raw": "{{base_url}}/api/employees", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Employee created successfully.\",\n \"data\": {\n \"id\": 1,\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"email\": \"jane@example.com\",\n \"phone\": \"0501234567\",\n \"department_id\": 1,\n \"position\": \"Technician\",\n \"status\": \"active\",\n \"type\": \"employee\",\n \"track_attendance\": true,\n \"notify_owner_when_punch_in_out\": false,\n \"shop_calender_id\": 1,\n \"shop_timing_id\": 1,\n \"geo_fence_radius\": 100,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:00:00.000000Z\",\n \"department\": {\n \"id\": 1,\n \"name\": \"Mechanical\"\n },\n \"has_active_time_sheet\": false,\n \"active_time_sheet\": null\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"status\": \"inactive\",\n \"position\": \"Senior Technician\",\n \"shop_timing_id\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/employees/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"status\": \"inactive\",\n \"position\": \"Senior Technician\",\n \"shop_timing_id\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/employees/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Employee updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"first_name\": \"Jane\",\n \"last_name\": \"Smith\",\n \"email\": \"jane@example.com\",\n \"phone\": \"0501234567\",\n \"department_id\": 1,\n \"position\": \"Senior Technician\",\n \"status\": \"inactive\",\n \"type\": \"employee\",\n \"track_attendance\": true,\n \"notify_owner_when_punch_in_out\": false,\n \"shop_calender_id\": 1,\n \"shop_timing_id\": 2,\n \"geo_fence_radius\": 100,\n \"created_at\": \"2026-03-24T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T12:10:00.000000Z\",\n \"has_active_time_sheet\": false,\n \"active_time_sheet\": null\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/employees/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/employees/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "employees", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Employee deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Unit Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/unit-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/unit-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Hour\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/unit-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Hour\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/unit-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Hour\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/unit-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Hour\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/unit-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/unit-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/unit-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "unit-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-unit-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-unit-type" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-unit-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-unit-type" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-unit-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-unit-type" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-unit-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-unit-type" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Inventory Categories", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Parts\",\n \"shop_type_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Parts\",\n \"shop_type_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Parts\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Parts\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-categories", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-inventory-category", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-inventory-category" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-inventory-category", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-inventory-category" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-inventory-category", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-inventory-category" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-inventory-category", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-inventory-category" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Labor Rates", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/labor-rates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/labor-rates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Standard\",\n \"rate\": 75\n}" + }, + "url": { + "raw": "{{base_url}}/api/labor-rates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Standard\",\n \"rate\": 75\n}" + }, + "url": { + "raw": "{{base_url}}/api/labor-rates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Standard\",\n \"rate\": 80\n}" + }, + "url": { + "raw": "{{base_url}}/api/labor-rates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Standard\",\n \"rate\": 80\n}" + }, + "url": { + "raw": "{{base_url}}/api/labor-rates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/labor-rates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/labor-rates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labor-rates", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-labor-rate", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-labor-rate" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-favorite-labor-rate", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-favorite-labor-rate" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Favorite", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-labor-rate", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-labor-rate" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-favorite-labor-rate", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-favorite-labor-rate" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Vendors", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Vendor\",\n \"last_name\": \"Name\",\n \"company_name\": \"ACME\",\n \"email\": \"vendor@example.com\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"first_name\": \"Vendor\",\n \"last_name\": \"Name\",\n \"company_name\": \"ACME\",\n \"email\": \"vendor@example.com\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendors", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"company_name\": \"ACME Inc\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"company_name\": \"ACME Inc\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendors/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendors", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Toggle Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-vendor-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-vendor-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-vendor-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-vendor-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Create Vendor Address", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vendor_id\": 1,\n \"address_line_1\": \"123 Main St\",\n \"address_line_2\": \"Suite 100\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"New York\",\n \"zip_code\": \"10001\",\n \"phone_number\": \"555-1234\",\n \"title\": \"Main Office\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/create-vendor-address", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "create-vendor-address" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vendor_id\": 1,\n \"address_line_1\": \"123 Main St\",\n \"address_line_2\": \"Suite 100\",\n \"country_id\": 1,\n \"state_id\": 1,\n \"city\": \"New York\",\n \"zip_code\": \"10001\",\n \"phone_number\": \"555-1234\",\n \"title\": \"Main Office\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/create-vendor-address", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "create-vendor-address" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Get Vendor Address", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-address/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-address", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-address/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-address", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Inspection Categories", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_name\": \"Brake Check\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_name\": \"Brake Check\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-categories", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_name\": \"Brake Check\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_name\": \"Brake Check\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-categories/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-categories", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Inspections", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pre-purchase\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"department_id\": 1,\n \"inspection_category_id\": 1,\n \"employee_id\": 1,\n \"order_number\": \"ORD-001\",\n \"date\": \"2026-03-16\",\n \"time\": \"10:00:00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pre-purchase\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"department_id\": 1,\n \"inspection_category_id\": 1,\n \"employee_id\": 1,\n \"order_number\": \"ORD-001\",\n \"date\": \"2026-03-16\",\n \"time\": \"10:00:00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pre-purchase\",\n \"note\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pre-purchase\",\n \"note\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspections", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Change Inspection Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"status\": \"completed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/change-inspection-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "change-inspection-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"status\": \"completed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/change-inspection-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "change-inspection-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Labels", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "labels", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Insurance Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/insurance-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/insurance-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Comprehensive\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/insurance-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Comprehensive\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/insurance-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Comprehensive\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/insurance-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Comprehensive\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/insurance-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/insurance-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/insurance-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "insurance-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Estimates", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/estimates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/estimates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Estimate 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"department_id\": 1,\n \"estimate_number\": \"EST-001\",\n \"date\": \"2026-03-16\",\n \"has_insurance\": false,\n \"label_ids\": [1],\n \"remarks\": [\"Customer note\"]\n}" + }, + "url": { + "raw": "{{base_url}}/api/estimates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Estimate 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"department_id\": 1,\n \"estimate_number\": \"EST-001\",\n \"date\": \"2026-03-16\",\n \"has_insurance\": false,\n \"label_ids\": [1],\n \"remarks\": [\"Customer note\"]\n}" + }, + "url": { + "raw": "{{base_url}}/api/estimates", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Estimate 001\",\n \"label_ids\": [1, 2],\n \"remarks\": [\"Updated note\"]\n}" + }, + "url": { + "raw": "{{base_url}}/api/estimates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Estimate 001\",\n \"label_ids\": [1, 2],\n \"remarks\": [\"Updated note\"]\n}" + }, + "url": { + "raw": "{{base_url}}/api/estimates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/estimates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/estimates/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "estimates", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Quick Remark", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Needs follow-up\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Needs follow-up\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Needs follow-up\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-remark/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Needs follow-up\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-remark/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-remark/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-remark/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-remark", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Quick Notes", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Quick note text\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Quick note text\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"description\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/quick-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/quick-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "quick-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Reasons", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/reasons", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/reasons", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"Customer request\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Customer request\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/reasons", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Customer request\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/reasons", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Reason created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Customer request\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Updated reason title\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/reasons/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Updated reason title\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/reasons/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Reason updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Updated reason title\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/reasons/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/reasons/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "reasons", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Reason deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Check Point Label", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/check-point-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/check-point-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/check-point-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/check-point-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/check-point-label/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Pass\",\n \"color_code\": \"#00FF00\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/check-point-label/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/check-point-label/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/check-point-label/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "check-point-label", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Inspection Check Points", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points?inspection_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points" + ], + "query": [ + { + "key": "inspection_id", + "value": "1" + } + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points?inspection_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points" + ], + "query": [ + { + "key": "inspection_id", + "value": "1" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_id\": 1,\n \"name\": \"Brake pads\",\n \"description\": \"Check thickness\",\n \"record_type\": \"record_conditions\",\n \"condition_rate\": 85\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_id\": 1,\n \"name\": \"Brake pads\",\n \"description\": \"Check thickness\",\n \"record_type\": \"record_conditions\",\n \"condition_rate\": 85\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Brake pads\",\n \"record_type\": \"record_conditions\",\n \"condition_rate\": 90,\n \"file\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"Brake pads\",\n \"record_type\": \"record_conditions\",\n \"condition_rate\": 90,\n \"file\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Toggle Label to Checkpoint", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_check_point_id\": 1,\n \"check_point_label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-label-to-checkpoint", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-label-to-checkpoint" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_check_point_id\": 1,\n \"check_point_label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-label-to-checkpoint", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-label-to-checkpoint" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Change Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_check_point_id\": 1,\n \"status\": \"passed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/change-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "change-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"inspection_check_point_id\": 1,\n \"status\": \"passed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/change-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "change-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "inspection_check_point_id", + "value": "1", + "type": "text" + }, + { + "key": "attachment", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "inspection_check_point_id", + "value": "1", + "type": "text" + }, + { + "key": "attachment", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Upload Media", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}/upload-media", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}", + "upload-media" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}/upload-media", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}", + "upload-media" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Media", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}/media", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}", + "media" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inspection-check-points/{{id}}/media", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inspection-check-points", + "{{id}}", + "media" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Job Cards", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Job Card 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"status\": \"draft\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Job Card 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"status\": \"draft\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Job Card 001 Updated\",\n \"status\": \"check_in\",\n \"department_id\": 1,\n \"check_in_date\": \"2026-03-18\",\n \"km_in\": 50000,\n \"label_ids\": [1]\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Job Card 001 Updated\",\n \"status\": \"check_in\",\n \"department_id\": 1,\n \"check_in_date\": \"2026-03-18\",\n \"km_in\": 50000,\n \"label_ids\": [1]\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Change Date", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"order_date\": \"2026-03-18\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-date", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-date" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"order_date\": \"2026-03-18\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-date", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-date" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Change Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"status\": \"in_progress\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"status\": \"in_progress\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Add Customer Remark", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"remark\": \"Customer requested wash\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-customer-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-customer-remark" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"remark\": \"Customer requested wash\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-customer-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-customer-remark" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Edit Customer Remark", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_remark_id\": 1,\n \"remark\": \"Updated remark\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/edit-customer-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "edit-customer-remark" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"customer_remark_id\": 1,\n \"remark\": \"Updated remark\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/edit-customer-remark", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "edit-customer-remark" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Customer Remark", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-customer-remark?customer_remark_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-customer-remark" + ], + "query": [ + { + "key": "customer_remark_id", + "value": "1" + } + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-customer-remark?customer_remark_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-customer-remark" + ], + "query": [ + { + "key": "customer_remark_id", + "value": "1" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Shop Recommendation", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"recommendation\": \"Replace brake pads\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-shop-recommendation", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-shop-recommendation" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"recommendation\": \"Replace brake pads\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-shop-recommendation", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-shop-recommendation" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Edit Shop Recommendation", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_recommendation_id\": 1,\n \"recommendation\": \"Updated recommendation\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/edit-shop-recommendation", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "edit-shop-recommendation" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_recommendation_id\": 1,\n \"recommendation\": \"Updated recommendation\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/edit-shop-recommendation", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "edit-shop-recommendation" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Shop Recommendation", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-shop-recommendation?shop_recommendation_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-shop-recommendation" + ], + "query": [ + { + "key": "shop_recommendation_id", + "value": "1" + } + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-shop-recommendation?shop_recommendation_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-shop-recommendation" + ], + "query": [ + { + "key": "shop_recommendation_id", + "value": "1" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + }, + { + "name": "Change Service Writer", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_writer_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-service-writer-id", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-service-writer-id" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_writer_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-service-writer-id", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-service-writer-id" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Change Sales Person", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"sales_person_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-sales-person-id", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-sales-person-id" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"sales_person_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/job-cards/{{id}}/change-sales-person-id", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "job-cards", + "{{id}}", + "change-sales-person-id" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Payment Modes", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mode", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mode", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Cash\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mode", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Cash\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mode", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bank Transfer\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mode/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bank Transfer\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mode/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mode/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mode/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mode", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Payment Received", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-recieved", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-recieved", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "job_card_id", + "value": "1", + "type": "text" + }, + { + "key": "payment_mode_id", + "value": "1", + "type": "text" + }, + { + "key": "customer_id", + "value": "1", + "type": "text" + }, + { + "key": "amount_received", + "value": "5000", + "type": "text" + }, + { + "key": "payment_number", + "value": "PAY-001", + "type": "text" + }, + { + "key": "payment_date", + "value": "2026-03-18", + "type": "text" + }, + { + "key": "note", + "value": "First payment", + "type": "text" + }, + { + "key": "attachment_files[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-recieved", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "job_card_id", + "value": "1", + "type": "text" + }, + { + "key": "payment_mode_id", + "value": "1", + "type": "text" + }, + { + "key": "customer_id", + "value": "1", + "type": "text" + }, + { + "key": "amount_received", + "value": "5000", + "type": "text" + }, + { + "key": "payment_number", + "value": "PAY-001", + "type": "text" + }, + { + "key": "payment_date", + "value": "2026-03-18", + "type": "text" + }, + { + "key": "note", + "value": "First payment", + "type": "text" + }, + { + "key": "attachment_files[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-recieved", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "_method", + "value": "PUT", + "type": "text" + }, + { + "key": "amount_received", + "value": "6000", + "type": "text" + }, + { + "key": "note", + "value": "Updated payment", + "type": "text" + }, + { + "key": "delete_attachment_ids[]", + "value": "1", + "type": "text" + }, + { + "key": "attachment_files[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-recieved/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "_method", + "value": "PUT", + "type": "text" + }, + { + "key": "amount_received", + "value": "6000", + "type": "text" + }, + { + "key": "note", + "value": "Updated payment", + "type": "text" + }, + { + "key": "delete_attachment_ids[]", + "value": "1", + "type": "text" + }, + { + "key": "attachment_files[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-recieved/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved", + "{{id}}" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-recieved/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-recieved/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-recieved", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Parts", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": \"Brake Pad\",\n \"sku\": \"BP-001\",\n \"part_number\": \"BP-001-A\",\n \"unit_type_id\": 1,\n \"manufactured_by\": \"Bosch\",\n \"description\": \"Front brake pad set\",\n \"location\": \"Rack A-3\",\n \"pricing_matrix\": \"Standard\",\n \"department_id\": 1,\n \"sales_information\": true,\n \"selling_price\": \"45.00\",\n \"sales_chart_of_account\": 4000,\n \"purchase_information\": true,\n \"purchase_chart_of_account\": 5000,\n \"purchase_preferred_vendor_id\": 1,\n \"purchase_price\": \"25.00\",\n \"track_inventory\": true,\n \"opening_stock\": 10,\n \"as_on_date\": \"2026-03-20\",\n \"min_stock\": 2,\n \"max_stock\": 50,\n \"inventory_chart_of_account\": 3000,\n \"tracking_type\": 1,\n \"inventory_purchase_price\": \"24.00\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": \"Brake Pad\",\n \"sku\": \"BP-001\",\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"description\": \"Front brake pad set\",\n \"selling_price\": 45.00,\n \"purchase_price\": 25.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": \"Brake Pad\",\n \"sku\": \"BP-001\",\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"description\": \"Front brake pad set\",\n \"selling_price\": 45.00,\n \"purchase_price\": 25.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": \"Brake Pad\",\n \"sku\": \"BP-001\",\n \"part_number\": \"BP-001-A\",\n \"unit_type_id\": 1,\n \"manufactured_by\": \"Bosch\",\n \"description\": \"Front brake pad set\",\n \"location\": \"Rack A-3\",\n \"pricing_matrix\": \"Standard\",\n \"department_id\": 1,\n \"sales_information\": true,\n \"selling_price\": \"45.00\",\n \"sales_chart_of_account\": 4000,\n \"purchase_information\": true,\n \"purchase_chart_of_account\": 5000,\n \"purchase_preferred_vendor_id\": 1,\n \"purchase_price\": \"25.00\",\n \"track_inventory\": true,\n \"opening_stock\": 10,\n \"as_on_date\": \"2026-03-20\",\n \"min_stock\": 2,\n \"max_stock\": 50,\n \"inventory_chart_of_account\": 3000,\n \"tracking_type\": 1,\n \"inventory_purchase_price\": \"24.00\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Pad Updated\",\n \"selling_price\": 50.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Pad Updated\",\n \"selling_price\": 50.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"title\": \"Brake Pad Updated\",\n \"sku\": \"BP-001\",\n \"part_number\": \"BP-001-A\",\n \"unit_type_id\": 1,\n \"manufactured_by\": \"Bosch\",\n \"description\": \"Front brake pad set\",\n \"location\": \"Rack A-3\",\n \"pricing_matrix\": \"Standard\",\n \"department_id\": 1,\n \"sales_information\": true,\n \"selling_price\": \"50.00\",\n \"sales_chart_of_account\": 4000,\n \"purchase_information\": true,\n \"purchase_chart_of_account\": 5000,\n \"purchase_preferred_vendor_id\": 1,\n \"purchase_price\": \"25.00\",\n \"track_inventory\": true,\n \"opening_stock\": 10,\n \"as_on_date\": \"2026-03-20\",\n \"min_stock\": 2,\n \"max_stock\": 50,\n \"inventory_chart_of_account\": 3000,\n \"tracking_type\": 1,\n \"inventory_purchase_price\": \"24.00\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "parts", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Import", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/import-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "import-parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/import-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "import-parts" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Import completed successfully.\",\n \"data\": {\n \"imported_count\": 8,\n \"failed_count\": 1,\n \"failed_rows\": [\n {\n \"row\": 4,\n \"errors\": [\n \"The sku has already been taken.\"\n ],\n \"values\": {\n \"sku\": \"BP-001\"\n }\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Export", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"search\": \"\",\n \"shop_type_id\": null,\n \"category_id\": null,\n \"department_id\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/export-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "export-parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"search\": \"\",\n \"shop_type_id\": null,\n \"category_id\": null,\n \"department_id\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/export-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "export-parts" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Export generated successfully.\"\n}" + } + ] + }, + { + "name": "Toggle Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-part-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-part-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-part-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-part-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Status updated successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Purchase Orders", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/purchase-orders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/purchase-orders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"service_name\": \"Engine Service Group\",\n \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"service_description\": \"Common engine services\",\n \"show_as_lump_sum\": false,\n \"mark_as_recommended\": true,\n \"set_packaged_pricing\": false,\n \"selling_price\": \"100.00\",\n \"selling_chart_of_account\": \"4000\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"inventory_category\": {\n \"id\": 1,\n \"title\": \"Engine\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"name\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n }\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"job_card_id\": 1,\n \"vendor_id\": 1,\n \"title\": \"PO-001\",\n \"order_number\": \"PO-2026-001\",\n \"order_date\": \"2026-03-19\",\n \"delivery_date\": \"2026-03-25\",\n \"department_id\": 1,\n \"notes\": \"Urgent order\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": 25.00,\n \"description\": \"Brake pads\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/purchase-orders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"job_card_id\": 1,\n \"vendor_id\": 1,\n \"title\": \"PO-001\",\n \"order_number\": \"PO-2026-001\",\n \"order_date\": \"2026-03-19\",\n \"delivery_date\": \"2026-03-25\",\n \"department_id\": 1,\n \"notes\": \"Urgent order\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": 25.00,\n \"description\": \"Brake pads\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/purchase-orders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group created successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_name\": \"Engine Service Group\",\n \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"service_description\": \"Common engine services\",\n \"show_as_lump_sum\": false,\n \"mark_as_recommended\": true,\n \"set_packaged_pricing\": false,\n \"selling_price\": \"100.00\",\n \"selling_chart_of_account\": \"4000\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"inventory_category\": {\n \"id\": 1,\n \"title\": \"Engine\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"name\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n }\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"PO-001 Updated\",\n \"notes\": \"Updated notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 10,\n \"rate\": 22.00,\n \"description\": \"Brake pads bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/purchase-orders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"PO-001 Updated\",\n \"notes\": \"Updated notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 10,\n \"rate\": 22.00,\n \"description\": \"Brake pads bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/purchase-orders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_name\": \"Engine Service Group Updated\",\n \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"service_description\": \"Common engine services\",\n \"show_as_lump_sum\": false,\n \"mark_as_recommended\": true,\n \"set_packaged_pricing\": false,\n \"selling_price\": \"125.00\",\n \"selling_chart_of_account\": \"4000\",\n \"is_active\": true,\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"inventory_category\": {\n \"id\": 1,\n \"title\": \"Engine\"\n },\n \"unit_type\": {\n \"id\": 1,\n \"name\": \"Hour\"\n },\n \"department\": {\n \"id\": 1,\n \"name\": \"Service Department\"\n }\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/purchase-orders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/purchase-orders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "purchase-orders", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Services", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"labor_name\": \"Oil Change\",\n \"service_code\": \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": \"Standard\",\n \"department_id\": 1,\n \"description\": \"Full synthetic oil change\",\n \"selling_price\": 75.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"category_id\": 1,\n \"labor_name\": \"Oil Change\",\n \"service_code\": \"SVC-001\",\n \"unit_type_id\": 1,\n \"labor_matrix\": \"Standard\",\n \"department_id\": 1,\n \"description\": \"Full synthetic oil change\",\n \"selling_price\": 75.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"labor_name\": \"Oil Change Premium\",\n \"selling_price\": 85.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"labor_name\": \"Oil Change Premium\",\n \"selling_price\": 85.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "services", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Import", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/import-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "import-services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "file", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/import-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "import-services" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Import completed successfully.\"\n}" + } + ] + }, + { + "name": "Export", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"search\": \"\",\n \"shop_type_id\": null,\n \"category_id\": null,\n \"department_id\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/export-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "export-services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"search\": \"\",\n \"shop_type_id\": null,\n \"category_id\": null,\n \"department_id\": null\n}" + }, + "url": { + "raw": "{{base_url}}/api/export-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "export-services" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Export generated successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Expense Items", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/expense-items", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/expense-items", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"item_type\": \"Office Supply\",\n \"category_id\": 1,\n \"item_name\": \"Printer Paper\",\n \"sku\": \"EXP-001\",\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"description\": \"A4 printer paper\",\n \"selling_price\": 15.00,\n \"purchase_price\": 10.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/expense-items", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"item_type\": \"Office Supply\",\n \"category_id\": 1,\n \"item_name\": \"Printer Paper\",\n \"sku\": \"EXP-001\",\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"description\": \"A4 printer paper\",\n \"selling_price\": 15.00,\n \"purchase_price\": 10.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/expense-items", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"item_name\": \"Printer Paper A4\",\n \"selling_price\": 18.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/expense-items/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"item_name\": \"Printer Paper A4\",\n \"selling_price\": 18.00\n}" + }, + "url": { + "raw": "{{base_url}}/api/expense-items/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/expense-items/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/expense-items/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expense-items", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Toggle Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-expense-item-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-expense-item-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-expense-item-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-expense-item-status" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Bills", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/bills", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/bills", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bill 001\",\n \"job_card_id\": 1,\n \"vendor_id\": 1,\n \"vendor_address_id\": 1,\n \"bill_date\": \"2026-03-19\",\n \"bill_due_date\": \"2026-04-19\",\n \"payment_terms_id\": 1,\n \"department_id\": 1,\n \"notes\": \"Monthly bill\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 3,\n \"rate\": 25.00,\n \"chart_of_account\": null,\n \"description\": \"Brake pads\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/bills", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bill 001\",\n \"job_card_id\": 1,\n \"vendor_id\": 1,\n \"vendor_address_id\": 1,\n \"bill_date\": \"2026-03-19\",\n \"bill_due_date\": \"2026-04-19\",\n \"payment_terms_id\": 1,\n \"department_id\": 1,\n \"notes\": \"Monthly bill\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 3,\n \"rate\": 25.00,\n \"chart_of_account\": null,\n \"description\": \"Brake pads\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/bills", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bill 001 Updated\",\n \"notes\": \"Updated notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": 22.00,\n \"description\": \"Brake pads bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/bills/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Bill 001 Updated\",\n \"notes\": \"Updated notes\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"part_id\": 1,\n \"quantity\": 5,\n \"rate\": 22.00,\n \"description\": \"Brake pads bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/bills/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/bills/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/bills/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "bills", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Expenses", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/expenses", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/expenses", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"job_card_id\": 1,\n \"title\": \"Office Supplies\",\n \"category_id\": 1,\n \"vendor_id\": 1,\n \"invoice_number\": \"INV-001\",\n \"expense_date\": \"2026-03-19\",\n \"department_id\": 1,\n \"notes\": \"Monthly office expense\",\n \"status\": \"open\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"expense_item_id\": 1,\n \"quantity\": 2,\n \"rate\": 15.00,\n \"chart_of_account\": null,\n \"description\": \"Printer paper\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/expenses", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"job_card_id\": 1,\n \"title\": \"Office Supplies\",\n \"category_id\": 1,\n \"vendor_id\": 1,\n \"invoice_number\": \"INV-001\",\n \"expense_date\": \"2026-03-19\",\n \"department_id\": 1,\n \"notes\": \"Monthly office expense\",\n \"status\": \"open\",\n \"label_ids\": [1],\n \"items\": [\n {\n \"expense_item_id\": 1,\n \"quantity\": 2,\n \"rate\": 15.00,\n \"chart_of_account\": null,\n \"description\": \"Printer paper\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/expenses", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Office Supplies Updated\",\n \"status\": \"paid\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"expense_item_id\": 1,\n \"quantity\": 5,\n \"rate\": 12.00,\n \"description\": \"Printer paper bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/expenses/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Office Supplies Updated\",\n \"status\": \"paid\",\n \"label_ids\": [1, 2],\n \"items\": [\n {\n \"expense_item_id\": 1,\n \"quantity\": 5,\n \"rate\": 12.00,\n \"description\": \"Printer paper bulk\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/expenses/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/expenses/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/expenses/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "expenses", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Task Types", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Maintenance\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Maintenance\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-types", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Maintenance Updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Maintenance Updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-types/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-types", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-task-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-task-type" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-task-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-task-type" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-task-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-task-type" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-task-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-task-type" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Task Sections", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-sections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-sections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"To Do\",\n \"arrangement\": 1,\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-sections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"To Do\",\n \"arrangement\": 1,\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-sections", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"To Do Updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-sections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"To Do Updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/task-sections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-sections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/task-sections/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "task-sections", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-task-section", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-task-section" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-task-section", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-task-section" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-task-section", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-task-section" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-task-section", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-task-section" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + }, + { + "name": "Change Arrangement", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"arrangement\": 3\n}" + }, + "url": { + "raw": "{{base_url}}/api/change-task-section-arrangement", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "change-task-section-arrangement" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"arrangement\": 3\n}" + }, + "url": { + "raw": "{{base_url}}/api/change-task-section-arrangement", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "change-task-section-arrangement" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Tasks", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"task_type_id\": 1,\n \"task_section_id\": 1,\n \"job_card_id\": 1,\n \"subject\": \"Replace brake pads\",\n \"description\": \"Front and rear brake pads need replacement\",\n \"owner_id\": 1,\n \"department_id\": 1,\n \"priority\": 2,\n \"due_date\": \"2026-03-25\",\n \"task_number\": \"TSK-001\",\n \"status\": \"pending\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/tasks", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"task_type_id\": 1,\n \"task_section_id\": 1,\n \"job_card_id\": 1,\n \"subject\": \"Replace brake pads\",\n \"description\": \"Front and rear brake pads need replacement\",\n \"owner_id\": 1,\n \"department_id\": 1,\n \"priority\": 2,\n \"due_date\": \"2026-03-25\",\n \"task_number\": \"TSK-001\",\n \"status\": \"pending\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/tasks", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Replace brake pads - Updated\",\n \"priority\": 3,\n \"due_date\": \"2026-03-28\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Replace brake pads - Updated\",\n \"priority\": 3,\n \"due_date\": \"2026-03-28\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Complete", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}/complete", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}", + "complete" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/tasks/{{id}}/complete", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "tasks", + "{{id}}", + "complete" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Appointments", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Inspection\",\n \"date\": \"2026-03-25\",\n \"from_time\": \"09:00\",\n \"to_time\": \"10:00\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"service_writer_id\": 1,\n \"technician_id\": 1,\n \"department_id\": 1,\n \"job_card_id\": 1,\n \"notes\": \"Customer requested morning slot\",\n \"label_ids\": [1]\n}" + }, + "url": { + "raw": "{{base_url}}/api/appointments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Inspection\",\n \"date\": \"2026-03-25\",\n \"from_time\": \"09:00\",\n \"to_time\": \"10:00\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"service_writer_id\": 1,\n \"technician_id\": 1,\n \"department_id\": 1,\n \"job_card_id\": 1,\n \"notes\": \"Customer requested morning slot\",\n \"label_ids\": [1]\n}" + }, + "url": { + "raw": "{{base_url}}/api/appointments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Inspection Updated\",\n \"date\": \"2026-03-26\",\n \"from_time\": \"14:00\",\n \"to_time\": \"15:00\",\n \"label_ids\": [1, 2]\n}" + }, + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Brake Inspection Updated\",\n \"date\": \"2026-03-26\",\n \"from_time\": \"14:00\",\n \"to_time\": \"15:00\",\n \"label_ids\": [1, 2]\n}" + }, + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Unlink Job Card", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}/un-link-job-card", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}", + "un-link-job-card" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "{{base_url}}/api/appointments/{{id}}/un-link-job-card", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "appointments", + "{{id}}", + "un-link-job-card" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Invoice Sequences", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-sequences", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-sequences", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Default Invoice Sequence\",\n \"sequence_title\": \"INV 2026\",\n \"is_default\": true,\n \"auto_generate\": true,\n \"prefix\": \"INV-\",\n \"start_number\": 1,\n \"department_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-sequences", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Default Invoice Sequence\",\n \"sequence_title\": \"INV 2026\",\n \"is_default\": true,\n \"auto_generate\": true,\n \"prefix\": \"INV-\",\n \"start_number\": 1,\n \"department_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-sequences", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Updated Sequence\",\n \"prefix\": \"INV-2026-\",\n \"start_number\": 100\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-sequences/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Updated Sequence\",\n \"prefix\": \"INV-2026-\",\n \"start_number\": 100\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-sequences/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-sequences/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-sequences/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-sequences", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-invoice-sequence", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-invoice-sequence" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-invoice-sequence", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-invoice-sequence" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-invoice-sequence", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-invoice-sequence" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-invoice-sequence", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-invoice-sequence" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Removed successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Service Groups", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-groups", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-groups", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_name\": \"Engine Service Group\",\n \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"service_description\": \"Common engine services\",\n \"show_as_lump_sum\": false,\n \"mark_as_recommended\": true,\n \"set_packaged_pricing\": false,\n \"selling_price\": 100,\n \"selling_chart_of_account\": \"4000\",\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_name\": \"Engine Service Group\",\n \"shop_type_id\": 1,\n \"code\": \"SG-001\",\n \"inventory_category_id\": 1,\n \"unit_type_id\": 1,\n \"department_id\": 1,\n \"service_description\": \"Common engine services\",\n \"show_as_lump_sum\": false,\n \"mark_as_recommended\": true,\n \"set_packaged_pricing\": false,\n \"selling_price\": 100,\n \"selling_chart_of_account\": \"4000\",\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_name\": \"Engine Service Group Updated\",\n \"selling_price\": 125,\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_name\": \"Engine Service Group Updated\",\n \"selling_price\": 125,\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Service Group Details", + "item": [ + { + "name": "Add Label", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}/add-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}", + "add-label" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}/add-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}", + "add-label" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Label added to service group successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_name\": \"Engine Service Group\",\n \"labels\": [\n {\n \"id\": 1,\n \"title\": \"Recommended\",\n \"color_code\": \"#00AAFF\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Delete Label", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}/delete-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}", + "delete-label" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"label_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-groups/{{id}}/delete-label", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-groups", + "{{id}}", + "delete-label" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Label removed from service group successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_name\": \"Engine Service Group\",\n \"labels\": []\n }\n}" + } + ] + }, + { + "name": "Includes List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-includes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-includes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"service_group_id\": 1,\n \"title\": \"Basic inspection\",\n \"arrangement\": 1,\n \"created_at\": \"2026-03-26T18:40:00.000000Z\",\n \"updated_at\": \"2026-03-26T18:40:00.000000Z\",\n \"service_group\": {\n \"id\": 1,\n \"service_name\": \"Engine Service Group\"\n }\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Includes Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"title\": \"Basic inspection\",\n \"arrangement\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"title\": \"Basic inspection\",\n \"arrangement\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group include created successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"title\": \"Basic inspection\",\n \"arrangement\": 1\n }\n}" + } + ] + }, + { + "name": "Includes Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Basic inspection updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Basic inspection updated\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group include updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"title\": \"Basic inspection updated\",\n \"arrangement\": 1\n }\n}" + } + ] + }, + { + "name": "Includes Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group include deleted successfully.\"\n}" + } + ] + }, + { + "name": "Includes Change Arrangement", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"arrangement\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}/change-arrangement", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}", + "change-arrangement" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"arrangement\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-includes/{{id}}/change-arrangement", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-includes", + "{{id}}", + "change-arrangement" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group include arrangement updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"title\": \"Basic inspection\",\n \"arrangement\": 2\n }\n}" + } + ] + }, + { + "name": "Pricings List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-pricings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-pricings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"service_group_id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"fuel_type_id\": 1,\n \"body_type_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"labor_hours\": \"2.00\",\n \"selling_price\": \"120.00\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Pricings Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"fuel_type_id\": 1,\n \"body_type_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"labor_hours\": 2,\n \"selling_price\": 120\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-pricings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"fuel_type_id\": 1,\n \"body_type_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"labor_hours\": 2,\n \"selling_price\": 120\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-pricings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group pricing created successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"fuel_type_id\": 1,\n \"body_type_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"labor_hours\": \"2.00\",\n \"selling_price\": \"120.00\"\n }\n}" + } + ] + }, + { + "name": "Pricings Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"selling_price\": 150\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-pricings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"selling_price\": 150\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-pricings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group pricing updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"selling_price\": \"150.00\"\n }\n}" + } + ] + }, + { + "name": "Pricings Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-pricings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-pricings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-pricings", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group pricing deleted successfully.\"\n}" + } + ] + }, + { + "name": "Services List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"service_group_id\": 1,\n \"service_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"rate\": \"100.00\",\n \"hours\": \"1.50\",\n \"tax_id\": 1,\n \"chart_of_account\": \"4000\",\n \"description\": \"Labor line\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Services Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"service_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"rate\": 100,\n \"hours\": 1.5,\n \"tax_id\": 1,\n \"chart_of_account\": \"4000\",\n \"description\": \"Labor line\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"service_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"rate\": 100,\n \"hours\": 1.5,\n \"tax_id\": 1,\n \"chart_of_account\": \"4000\",\n \"description\": \"Labor line\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-services", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group service created successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"service_id\": 1,\n \"rate_type\": \"hourly\",\n \"labor_rate_id\": 1,\n \"rate\": \"100.00\",\n \"hours\": \"1.50\",\n \"tax_id\": 1,\n \"chart_of_account\": \"4000\",\n \"description\": \"Labor line\"\n }\n}" + } + ] + }, + { + "name": "Services Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"rate\": 120,\n \"hours\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"rate\": 120,\n \"hours\": 2\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group service updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"rate\": \"120.00\",\n \"hours\": \"2.00\"\n }\n}" + } + ] + }, + { + "name": "Services Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-services/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-services", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group service deleted successfully.\"\n}" + } + ] + }, + { + "name": "Parts List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"service_group_id\": 1,\n \"part_id\": 1,\n \"quantity\": \"2.00\",\n \"rate\": \"50.00\",\n \"tax_id\": 1,\n \"chart_of_account\": \"5000\",\n \"description\": \"Parts line\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Parts Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"part_id\": 1,\n \"quantity\": 2,\n \"rate\": 50,\n \"tax_id\": 1,\n \"chart_of_account\": \"5000\",\n \"description\": \"Parts line\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"service_group_id\": 1,\n \"part_id\": 1,\n \"quantity\": 2,\n \"rate\": 50,\n \"tax_id\": 1,\n \"chart_of_account\": \"5000\",\n \"description\": \"Parts line\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-parts", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group part created successfully.\",\n \"data\": {\n \"id\": 1,\n \"service_group_id\": 1,\n \"part_id\": 1,\n \"quantity\": \"2.00\",\n \"rate\": \"50.00\",\n \"tax_id\": 1,\n \"chart_of_account\": \"5000\",\n \"description\": \"Parts line\"\n }\n}" + } + ] + }, + { + "name": "Parts Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"quantity\": 3,\n \"rate\": 55\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"quantity\": 3,\n \"rate\": 55\n}" + }, + "url": { + "raw": "{{base_url}}/api/service-group-parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group part updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"quantity\": \"3.00\",\n \"rate\": \"55.00\"\n }\n}" + } + ] + }, + { + "name": "Parts Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/service-group-parts/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "service-group-parts", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Service group part deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Invoice Labels", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent Invoice\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent Invoice\",\n \"color_code\": \"#FF0000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-labels", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#D60000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Urgent\",\n \"color_code\": \"#D60000\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-labels/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-labels", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Invoices", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoices", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoices", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Invoice 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"invoice_date\": \"2026-03-23\",\n \"due_date\": \"2026-03-30\",\n \"invoice_sequence_id\": 1,\n \"invoice_number\": \"INV-0001\",\n \"department_id\": 1,\n \"status\": \"draft\",\n \"inspection_categories\": [\n {\n \"inspection_category_id\": 1,\n \"rate\": 100\n }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 25\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"rate\": 50\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ],\n \"service_groups\": [\n {\n \"service_group_id\": 1,\n \"rate\": 120\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Invoice 001\",\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"invoice_date\": \"2026-03-23\",\n \"due_date\": \"2026-03-30\",\n \"invoice_sequence_id\": 1,\n \"invoice_number\": \"INV-0001\",\n \"department_id\": 1,\n \"status\": \"draft\",\n \"inspection_categories\": [\n {\n \"inspection_category_id\": 1,\n \"rate\": 100\n }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 25\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"rate\": 50\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ],\n \"service_groups\": [\n {\n \"service_group_id\": 1,\n \"rate\": 120\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Invoice 001 Updated\",\n \"status\": \"open\",\n \"notes\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Invoice 001 Updated\",\n \"status\": \"open\",\n \"notes\": \"Updated note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoices/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoices", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Invoice Documents", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"invoice_id\": 1,\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"document_type_id\": 1,\n \"document_number\": \"DOC-001\",\n \"show_in_invoice\": true,\n \"show_in_estimate\": false,\n \"show_in_statement\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"invoice_id\": 1,\n \"customer_id\": 1,\n \"vehicle_id\": 1,\n \"document_type_id\": 1,\n \"document_number\": \"DOC-001\",\n \"show_in_invoice\": true,\n \"show_in_estimate\": false,\n \"show_in_statement\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-documents", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"document_number\": \"DOC-001-UPDATED\",\n \"show_in_statement\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"document_number\": \"DOC-001-UPDATED\",\n \"show_in_statement\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-documents/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-documents", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Invoice Notes", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"invoice_id\": 1,\n \"note\": \"Call customer before delivery\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"invoice_id\": 1,\n \"note\": \"Call customer before delivery\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/invoice-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/invoice-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "invoice-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Credit Notes", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/credit-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/credit-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Credit Note 001\",\n \"customer_id\": 1,\n \"date\": \"2026-03-23\",\n \"status\": \"open\",\n \"labels\": [\n { \"label_id\": 1 }\n ],\n \"inspections\": [\n {\n \"inspection_category_id\": 1,\n \"rate\": 20\n }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"rate\": 15\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 5\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Credit Note 001\",\n \"customer_id\": 1,\n \"date\": \"2026-03-23\",\n \"status\": \"open\",\n \"labels\": [\n { \"label_id\": 1 }\n ],\n \"inspections\": [\n {\n \"inspection_category_id\": 1,\n \"rate\": 20\n }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"rate\": 15\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 5\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Credit Note 001 Updated\",\n \"notes\": \"Adjusted amount\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Credit Note 001 Updated\",\n \"notes\": \"Adjusted amount\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Internal Note", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Internal review needed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/add-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "add-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Internal review needed\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/add-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "add-internal-note" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Edit Internal Note", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1,\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/edit-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "edit-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1,\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/edit-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "edit-internal-note" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Delete Internal Note", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/delete-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "delete-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/credit-notes/{{id}}/delete-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "credit-notes", + "{{id}}", + "delete-internal-note" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Payment Mades", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"vendor_id\": 1,\n \"employee_id\": null,\n \"payment_for\": \"bill\",\n \"payment_made\": \"100.00\",\n \"payment_number\": \"PM-001\",\n \"payment_reference\": \"REF-001\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Payment against vendor bills\",\n \"excess_amount_will_be_deposited\": null,\n \"amount_paid\": \"100.00\",\n \"amount_used_for_payments\": \"100.00\",\n \"amount_in_excess\": \"0.00\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"vendor\": {\n \"id\": 1,\n \"first_name\": \"Vendor\",\n \"last_name\": \"One\",\n \"company_name\": \"ACME Parts\",\n \"email\": \"vendor1@example.com\"\n },\n \"payment_mode\": {\n \"id\": 1,\n \"title\": \"Cash\"\n },\n \"details\": [\n {\n \"id\": 1,\n \"payment_made_id\": 1,\n \"bill_id\": 10,\n \"expense_id\": null,\n \"amount_paid\": \"60.00\",\n \"bill\": {\n \"id\": 10,\n \"title\": \"Bill #10\",\n \"status\": \"partially_paid\"\n },\n \"expense\": null\n },\n {\n \"id\": 2,\n \"payment_made_id\": 1,\n \"bill_id\": 11,\n \"expense_id\": null,\n \"amount_paid\": \"40.00\",\n \"bill\": {\n \"id\": 11,\n \"title\": \"Bill #11\",\n \"status\": \"paid\"\n },\n \"expense\": null\n }\n ],\n \"attachments\": [\n {\n \"id\": 1,\n \"payment_made_id\": 1,\n \"attachment_path\": \"payment_made_attachments/sample-receipt.pdf\",\n \"original_name\": \"receipt.pdf\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ]\n }\n ]\n}" + } + ] + }, + { + "name": "Create (Bill)", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vendor_id\": 1,\n \"payment_for\": \"bill\",\n \"payment_made\": 100,\n \"payment_number\": \"PM-001\",\n \"payment_reference\": \"REF-001\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Payment against bills\",\n \"details\": [\n {\n \"bill_id\": 1,\n \"amount_paid\": 60\n },\n {\n \"bill_id\": 2,\n \"amount_paid\": 40\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"vendor_id\": 1,\n \"payment_for\": \"bill\",\n \"payment_made\": 100,\n \"payment_number\": \"PM-001\",\n \"payment_reference\": \"REF-001\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Payment against bills\",\n \"details\": [\n {\n \"bill_id\": 1,\n \"amount_paid\": 60\n },\n {\n \"bill_id\": 2,\n \"amount_paid\": 40\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Payment made created successfully.\",\n \"data\": {\n \"id\": 1,\n \"vendor_id\": 1,\n \"employee_id\": null,\n \"payment_for\": \"bill\",\n \"payment_made\": \"100.00\",\n \"payment_number\": \"PM-001\",\n \"payment_reference\": \"REF-001\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Payment against bills\",\n \"excess_amount_will_be_deposited\": null,\n \"amount_paid\": \"100.00\",\n \"amount_used_for_payments\": \"100.00\",\n \"amount_in_excess\": \"0.00\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\",\n \"vendor\": {\n \"id\": 1,\n \"first_name\": \"Vendor\",\n \"last_name\": \"One\",\n \"company_name\": \"ACME Parts\",\n \"email\": \"vendor1@example.com\"\n },\n \"payment_mode\": {\n \"id\": 1,\n \"title\": \"Cash\"\n },\n \"details\": [\n {\n \"id\": 1,\n \"payment_made_id\": 1,\n \"bill_id\": 1,\n \"expense_id\": null,\n \"amount_paid\": \"60.00\"\n },\n {\n \"id\": 2,\n \"payment_made_id\": 1,\n \"bill_id\": 2,\n \"expense_id\": null,\n \"amount_paid\": \"40.00\"\n }\n ],\n \"attachments\": []\n }\n}" + } + ] + }, + { + "name": "Create (Expense)", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"payment_for\": \"expense\",\n \"payment_made\": 50,\n \"payment_number\": \"PM-002\",\n \"payment_reference\": \"REF-002\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Office expense reimbursement\",\n \"details\": [\n {\n \"expense_id\": 1,\n \"amount_paid\": 50\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"payment_for\": \"expense\",\n \"payment_made\": 50,\n \"payment_number\": \"PM-002\",\n \"payment_reference\": \"REF-002\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Office expense reimbursement\",\n \"details\": [\n {\n \"expense_id\": 1,\n \"amount_paid\": 50\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Payment made created successfully.\",\n \"data\": {\n \"id\": 2,\n \"vendor_id\": null,\n \"employee_id\": 1,\n \"payment_for\": \"expense\",\n \"payment_made\": \"50.00\",\n \"payment_number\": \"PM-002\",\n \"payment_reference\": \"REF-002\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Office expense reimbursement\",\n \"excess_amount_will_be_deposited\": null,\n \"amount_paid\": \"50.00\",\n \"amount_used_for_payments\": \"50.00\",\n \"amount_in_excess\": \"0.00\",\n \"created_at\": \"2026-03-23T12:05:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:05:00.000000Z\",\n \"vendor\": null,\n \"payment_mode\": {\n \"id\": 1,\n \"title\": \"Cash\"\n },\n \"details\": [\n {\n \"id\": 3,\n \"payment_made_id\": 2,\n \"bill_id\": null,\n \"expense_id\": 1,\n \"amount_paid\": \"50.00\"\n }\n ],\n \"attachments\": []\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"notes\": \"Updated payment made\",\n \"details\": [\n {\n \"bill_id\": 1,\n \"amount_paid\": 75\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"notes\": \"Updated payment made\",\n \"details\": [\n {\n \"bill_id\": 1,\n \"amount_paid\": 75\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Payment made updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"vendor_id\": 1,\n \"employee_id\": null,\n \"payment_for\": \"bill\",\n \"payment_made\": \"100.00\",\n \"payment_number\": \"PM-001\",\n \"payment_reference\": \"REF-001\",\n \"payment_date\": \"2026-03-23\",\n \"payment_mode_id\": 1,\n \"paid_through\": 1,\n \"notes\": \"Updated payment made\",\n \"excess_amount_will_be_deposited\": null,\n \"amount_paid\": \"100.00\",\n \"amount_used_for_payments\": \"75.00\",\n \"amount_in_excess\": \"25.00\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:20:00.000000Z\",\n \"vendor\": {\n \"id\": 1,\n \"first_name\": \"Vendor\",\n \"last_name\": \"One\",\n \"company_name\": \"ACME Parts\",\n \"email\": \"vendor1@example.com\"\n },\n \"payment_mode\": {\n \"id\": 1,\n \"title\": \"Cash\"\n },\n \"details\": [\n {\n \"id\": 4,\n \"payment_made_id\": 1,\n \"bill_id\": 1,\n \"expense_id\": null,\n \"amount_paid\": \"75.00\"\n }\n ],\n \"attachments\": [\n {\n \"id\": 1,\n \"payment_made_id\": 1,\n \"attachment_path\": \"payment_made_attachments/sample-receipt.pdf\",\n \"original_name\": \"receipt.pdf\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Payment made attachments added successfully.\",\n \"data\": {\n \"id\": 1,\n \"attachments\": [\n {\n \"id\": 1,\n \"payment_made_id\": 1,\n \"attachment_path\": \"payment_made_attachments/sample-receipt.pdf\",\n \"original_name\": \"receipt.pdf\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n },\n {\n \"id\": 2,\n \"payment_made_id\": 1,\n \"attachment_path\": \"payment_made_attachments/new-proof.jpg\",\n \"original_name\": \"proof.jpg\",\n \"created_at\": \"2026-03-23T12:25:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:25:00.000000Z\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/payment-mades/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "payment-mades", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Payment made attachment deleted successfully.\",\n \"data\": {\n \"id\": 1,\n \"attachments\": [\n {\n \"id\": 2,\n \"payment_made_id\": 1,\n \"attachment_path\": \"payment_made_attachments/new-proof.jpg\",\n \"original_name\": \"proof.jpg\",\n \"created_at\": \"2026-03-23T12:25:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:25:00.000000Z\"\n }\n ]\n }\n}" + } + ] + } + ] + }, + { + "name": "Vendor Credits", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-credits", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-credits", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Vendor Credit 001\",\n \"credit_number\": \"VC-001\",\n \"vendor_id\": 1,\n \"vendor_credit_date\": \"2026-03-23\",\n \"department_id\": 1,\n \"labels\": [\n { \"label_id\": 1 }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 25\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"quantity\": 1,\n \"rate\": 50\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Vendor Credit 001\",\n \"credit_number\": \"VC-001\",\n \"vendor_id\": 1,\n \"vendor_credit_date\": \"2026-03-23\",\n \"department_id\": 1,\n \"labels\": [\n { \"label_id\": 1 }\n ],\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 1,\n \"rate\": 25\n }\n ],\n \"services\": [\n {\n \"service_id\": 1,\n \"quantity\": 1,\n \"rate\": 50\n }\n ],\n \"expenses\": [\n {\n \"expense_id\": 1,\n \"quantity\": 1,\n \"rate\": 10\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Vendor Credit 001 Updated\",\n \"notes\": \"Updated notes\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"subject\": \"Vendor Credit 001 Updated\",\n \"notes\": \"Updated notes\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Internal Note", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/add-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "add-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"note\": \"Internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/add-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "add-internal-note" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Edit Internal Note", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1,\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/edit-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "edit-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1,\n \"note\": \"Updated internal note\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/edit-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "edit-internal-note" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Delete Internal Note", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/delete-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "delete-internal-note" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"internal_note_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/vendor-credits/{{id}}/delete-internal-note", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "vendor-credits", + "{{id}}", + "delete-internal-note" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Inventory Adjustments", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-adjustments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-adjustments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"reference_number\": \"IA-001\",\n \"date\": \"2026-03-23\",\n \"chart_of_account\": 1,\n \"reason_id\": 1,\n \"job_card_id\": 1,\n \"invoice_id\": 1,\n \"notes\": \"Stock correction\",\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 2,\n \"rate\": 25,\n \"description\": \"Adjustment line\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"reference_number\": \"IA-001\",\n \"date\": \"2026-03-23\",\n \"chart_of_account\": 1,\n \"reason_id\": 1,\n \"job_card_id\": 1,\n \"invoice_id\": 1,\n \"notes\": \"Stock correction\",\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 2,\n \"rate\": 25,\n \"description\": \"Adjustment line\"\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"notes\": \"Updated adjustment\",\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 3,\n \"rate\": 25\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"notes\": \"Updated adjustment\",\n \"parts\": [\n {\n \"part_id\": 1,\n \"quantity\": 3,\n \"rate\": 25\n }\n ]\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Add Attachment", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}", + "add-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "attachments[]", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}/add-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}", + "add-attachment" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete Attachment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}", + "delete-attachment" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"attachment_id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/inventory-adjustments/{{id}}/delete-attachment", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "inventory-adjustments", + "{{id}}", + "delete-attachment" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Time Sheets", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/time-sheets", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/time-sheets", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n \"clock_in\": \"09:00:00\",\n \"clock_out\": \"17:00:00\",\n \"note\": \"Regular shift\",\n \"activity_type\": \"general\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheets", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n \"clock_in\": \"09:00:00\",\n \"clock_out\": \"17:00:00\",\n \"note\": \"Regular shift\",\n \"activity_type\": \"general\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheets", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Created successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"clock_out\": \"18:00:00\",\n \"note\": \"Overtime\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheets/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"clock_out\": \"18:00:00\",\n \"note\": \"Overtime\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheets/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/time-sheets/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/time-sheets/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheets", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Deleted successfully.\"\n}" + } + ] + }, + { + "name": "Clock In", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n \"activity_type\": \"general\",\n \"note\": \"Clock in\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheet/clock-in", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheet", + "clock-in" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\",\n \"activity_type\": \"general\",\n \"note\": \"Clock in\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheet/clock-in", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheet", + "clock-in" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Clock Out", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheet/clock-out", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheet", + "clock-out" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"employee_id\": 1,\n \"date\": \"2026-03-23\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/time-sheet/clock-out", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "time-sheet", + "clock-out" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Sample Item\",\n \"created_at\": \"2026-03-23T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-23T12:10:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Shop Timings", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-timings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-timings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"Regular Shift\",\n \"in_time\": \"10:00:00\",\n \"out_time\": \"19:00:00\",\n \"full_day_hours\": \"09:00:00\",\n \"half_day_hours\": \"04:30:00\",\n \"punch_in\": \"10:00:00\",\n \"punch_out\": \"19:00:00\",\n \"before_time\": \"01:00:00\",\n \"after_time\": \"01:00:00\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Regular Shift\",\n \"in_time\": \"10:00:00\",\n \"out_time\": \"19:00:00\",\n \"full_day_hours\": \"09:00:00\",\n \"half_day_hours\": \"04:30:00\",\n \"punch_in\": \"10:00:00\",\n \"punch_out\": \"19:00:00\",\n \"before_time\": \"01:00:00\",\n \"after_time\": \"01:00:00\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-timings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Regular Shift\",\n \"in_time\": \"10:00:00\",\n \"out_time\": \"19:00:00\",\n \"full_day_hours\": \"09:00:00\",\n \"half_day_hours\": \"04:30:00\",\n \"punch_in\": \"10:00:00\",\n \"punch_out\": \"19:00:00\",\n \"before_time\": \"01:00:00\",\n \"after_time\": \"01:00:00\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-timings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop timing created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Regular Shift\",\n \"in_time\": \"10:00:00\",\n \"out_time\": \"19:00:00\",\n \"full_day_hours\": \"09:00:00\",\n \"half_day_hours\": \"04:30:00\",\n \"punch_in\": \"10:00:00\",\n \"punch_out\": \"19:00:00\",\n \"before_time\": \"01:00:00\",\n \"after_time\": \"01:00:00\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Weekend Shift\",\n \"in_time\": \"09:00:00\",\n \"out_time\": \"15:00:00\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-timings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Weekend Shift\",\n \"in_time\": \"09:00:00\",\n \"out_time\": \"15:00:00\",\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-timings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop timing updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Weekend Shift\",\n \"in_time\": \"09:00:00\",\n \"out_time\": \"15:00:00\",\n \"full_day_hours\": \"06:00:00\",\n \"half_day_hours\": \"03:00:00\",\n \"punch_in\": \"09:00:00\",\n \"punch_out\": \"15:00:00\",\n \"before_time\": \"00:30:00\",\n \"after_time\": \"00:30:00\",\n \"is_default\": false,\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:20:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-timings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-timings/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-timings", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop timing deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-shop-timing", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-shop-timing" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-shop-timing", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-shop-timing" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default shop timing updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Regular Shift\",\n \"is_default\": true\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-shop-timing", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-shop-timing" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-shop-timing", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-shop-timing" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default shop timing removed successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Regular Shift\",\n \"is_default\": false\n }\n}" + } + ] + } + ] + }, + { + "name": "Holiday Years", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/holiday-years", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holiday-years" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/holiday-years", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holiday-years" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"year\": 2026,\n \"created_at\": \"2026-03-24T11:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"year\": 2026\n}" + }, + "url": { + "raw": "{{base_url}}/api/holiday-years", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holiday-years" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"year\": 2026\n}" + }, + "url": { + "raw": "{{base_url}}/api/holiday-years", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holiday-years" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Holiday year created successfully.\",\n \"data\": {\n \"id\": 1,\n \"year\": 2026,\n \"created_at\": \"2026-03-24T11:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:00:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Shop Calenders", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-calenders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-calenders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"Default Calendar\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:00:00.000000Z\",\n \"shop_calender_days\": [\n {\n \"id\": 1,\n \"shop_calender_id\": 1,\n \"day_number\": 1,\n \"type\": \"full_day\",\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:00:00.000000Z\"\n }\n ]\n }\n ],\n \"meta\": {\n \"current_page\": 1,\n \"last_page\": 1,\n \"per_page\": 15,\n \"total\": 1,\n \"from\": 1,\n \"to\": 1\n }\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Default Calendar\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-calenders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"Default Calendar\",\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-calenders", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop calender created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Default Calendar\",\n \"is_default\": true,\n \"created_at\": \"2026-03-24T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T10:00:00.000000Z\",\n \"shop_calender_days\": [\n {\n \"id\": 1,\n \"shop_calender_id\": 1,\n \"day_number\": 1,\n \"type\": \"full_day\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-calenders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/shop-calenders/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop calender deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-shop-calender", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-shop-calender" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-shop-calender", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-shop-calender" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default shop calender updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Default Calendar\",\n \"is_default\": true\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-shop-calender", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-shop-calender" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-shop-calender", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-shop-calender" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default shop calender removed successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Default Calendar\",\n \"is_default\": false\n }\n}" + } + ] + }, + { + "name": "Update Day Type", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"day_number\": 1,\n \"type\": \"week_off\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-calenders/{{id}}/update-day-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders", + "{{id}}", + "update-day-type" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"day_number\": 1,\n \"type\": \"week_off\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/shop-calenders/{{id}}/update-day-type", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "shop-calenders", + "{{id}}", + "update-day-type" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Shop calender day type updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"Default Calendar\",\n \"is_default\": true,\n \"shop_calender_days\": [\n {\n \"id\": 1,\n \"shop_calender_id\": 1,\n \"day_number\": 1,\n \"type\": \"week_off\"\n }\n ]\n }\n}" + } + ] + } + ] + }, + { + "name": "Holidays", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/holidays?holiday_year_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays" + ], + "query": [ + { + "key": "holiday_year_id", + "value": "1" + } + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/holidays?holiday_year_id=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays" + ], + "query": [ + { + "key": "holiday_year_id", + "value": "1" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"holiday_year_id\": 1,\n \"date\": \"2026-12-02\",\n \"name\": \"National Day\",\n \"created_at\": \"2026-03-24T11:10:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:10:00.000000Z\",\n \"holiday_year\": {\n \"id\": 1,\n \"year\": 2026,\n \"created_at\": \"2026-03-24T11:00:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:00:00.000000Z\"\n }\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"holiday_year_id\": 1,\n \"date\": \"2026-12-02\",\n \"name\": \"National Day\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/holidays", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"holiday_year_id\": 1,\n \"date\": \"2026-12-02\",\n \"name\": \"National Day\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/holidays", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Holiday created successfully.\",\n \"data\": {\n \"id\": 1,\n \"holiday_year_id\": 1,\n \"date\": \"2026-12-02\",\n \"name\": \"National Day\",\n \"created_at\": \"2026-03-24T11:10:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:10:00.000000Z\",\n \"holiday_year\": {\n \"id\": 1,\n \"year\": 2026\n }\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"National Day Holiday\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/holidays/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"National Day Holiday\"\n}" + }, + "url": { + "raw": "{{base_url}}/api/holidays/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Holiday updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"holiday_year_id\": 1,\n \"date\": \"2026-12-02\",\n \"name\": \"National Day Holiday\",\n \"created_at\": \"2026-03-24T11:10:00.000000Z\",\n \"updated_at\": \"2026-03-24T11:20:00.000000Z\",\n \"holiday_year\": {\n \"id\": 1,\n \"year\": 2026\n }\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/holidays/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/holidays/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "holidays", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Holiday deleted successfully.\"\n}" + } + ] + } + ] + }, + { + "name": "Settings", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/settings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "settings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/settings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "settings" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"id\": 1,\n \"name\": \"Reparee\",\n \"email\": \"support@reparee.com\",\n \"phone\": \"1234567890\",\n \"alternative_phone\": \"0987654321\",\n \"website\": \"https://reparee.com\",\n \"time_zone\": \"Asia/Kolkata\",\n \"upi_id\": \"reparee@upi\",\n \"first_day_of_work\": \"monday\",\n \"latitude\": \"23.0225\",\n \"longitude\": \"72.5714\",\n \"bank_details\": \"Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234\",\n \"first_address_line\": \"123 Business Park\",\n \"second_address_line\": \"Near Central Plaza\",\n \"country_id\": \"101\",\n \"state_id\": \"12\",\n \"city\": \"Ahmedabad\",\n \"zip_code\": \"380001\",\n \"logo\": \"settings/logo.png\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "name", + "value": "Reparee", + "type": "text" + }, + { + "key": "email", + "value": "support@reparee.com", + "type": "text" + }, + { + "key": "phone", + "value": "1234567890", + "type": "text" + }, + { + "key": "first_day_of_work", + "value": "monday", + "type": "text" + }, + { + "key": "logo", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/settings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "settings" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "name", + "value": "Reparee", + "type": "text" + }, + { + "key": "email", + "value": "support@reparee.com", + "type": "text" + }, + { + "key": "phone", + "value": "1234567890", + "type": "text" + }, + { + "key": "first_day_of_work", + "value": "monday", + "type": "text" + }, + { + "key": "logo", + "type": "file", + "value": "" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/settings", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "settings" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Settings updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"name\": \"Reparee\",\n \"email\": \"support@reparee.com\",\n \"phone\": \"1234567890\",\n \"alternative_phone\": \"0987654321\",\n \"website\": \"https://reparee.com\",\n \"time_zone\": \"Asia/Kolkata\",\n \"upi_id\": \"reparee@upi\",\n \"first_day_of_work\": \"monday\",\n \"latitude\": \"23.0225\",\n \"longitude\": \"72.5714\",\n \"bank_details\": \"Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234\",\n \"first_address_line\": \"123 Business Park\",\n \"second_address_line\": \"Near Central Plaza\",\n \"country_id\": \"101\",\n \"state_id\": \"12\",\n \"city\": \"Ahmedabad\",\n \"zip_code\": \"380001\",\n \"logo\": \"settings/logo.png\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Taxes", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/taxes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/taxes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": \"18.00\",\n \"is_default\": true,\n \"created_at\": \"2026-03-25T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T10:00:00.000000Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": 18,\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/taxes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": 18,\n \"is_default\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/taxes", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Tax created successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": \"18.00\",\n \"is_default\": true,\n \"created_at\": \"2026-03-25T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T10:00:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"VAT (updated)\",\n \"note\": \"Revised rate\",\n \"rate\": 20,\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/taxes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"title\": \"VAT (updated)\",\n \"note\": \"Revised rate\",\n \"rate\": 20,\n \"is_default\": false\n}" + }, + "url": { + "raw": "{{base_url}}/api/taxes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Tax updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"VAT (updated)\",\n \"note\": \"Revised rate\",\n \"rate\": \"20.00\",\n \"is_default\": false,\n \"created_at\": \"2026-03-25T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T10:15:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/taxes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/taxes/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "taxes", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Tax deleted successfully.\"\n}" + } + ] + }, + { + "name": "Set Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-tax", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-tax" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/set-default-tax", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "set-default-tax" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default tax updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": \"18.00\",\n \"is_default\": true,\n \"created_at\": \"2026-03-25T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T10:20:00.000000Z\"\n }\n}" + } + ] + }, + { + "name": "Remove Default", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-tax", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-tax" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/remove-default-tax", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "remove-default-tax" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Default tax removed successfully.\",\n \"data\": {\n \"id\": 1,\n \"title\": \"VAT\",\n \"note\": \"Standard rate\",\n \"rate\": \"18.00\",\n \"is_default\": false,\n \"created_at\": \"2026-03-25T10:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T10:25:00.000000Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "Make and Models", + "item": [ + { + "name": "List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/make-and-models", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/make-and-models", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"data\": [\n {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": 2024,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": true,\n \"is_default\": false,\n \"created_at\": \"2026-03-25T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"fuel\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n }\n }\n ]\n}" + } + ] + }, + { + "name": "Create", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": 2024,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/make-and-models", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": 2024,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/make-and-models", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Make and model created successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": 2024,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": true,\n \"is_default\": false,\n \"created_at\": \"2026-03-25T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T12:00:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"fuel\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n }\n }\n}" + } + ] + }, + { + "name": "Update", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"make\": \"Toyota\",\n \"model\": \"Camry Hybrid\",\n \"year\": 2025,\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/make-and-models/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"make\": \"Toyota\",\n \"model\": \"Camry Hybrid\",\n \"year\": 2025,\n \"is_active\": true\n}" + }, + "url": { + "raw": "{{base_url}}/api/make-and-models/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Make and model updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry Hybrid\",\n \"year\": 2025,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": true,\n \"is_default\": false,\n \"created_at\": \"2026-03-25T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T12:30:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"fuel\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n }\n }\n}" + } + ] + }, + { + "name": "Delete", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/make-and-models/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models", + "{{id}}" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{base_url}}/api/make-and-models/{{id}}", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "make-and-models", + "{{id}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Make and model deleted successfully.\"\n}" + } + ] + }, + { + "name": "Toggle Status", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-make-and-model-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-make-and-model-status" + ] + } + }, + "response": [ + { + "name": "Success Example", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1\n}" + }, + "url": { + "raw": "{{base_url}}/api/toggle-make-and-model-status", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "toggle-make-and-model-status" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "cookie": [], + "body": "{\n \"message\": \"Make and model status updated successfully.\",\n \"data\": {\n \"id\": 1,\n \"shop_type_id\": 1,\n \"make\": \"Toyota\",\n \"model\": \"Camry\",\n \"year\": 2024,\n \"sub_model\": \"LE\",\n \"body_type_id\": 1,\n \"fuel_id\": 1,\n \"transmission_id\": 1,\n \"engine_size\": \"2.5L\",\n \"drivetrain\": \"FWD\",\n \"is_active\": false,\n \"is_default\": false,\n \"created_at\": \"2026-03-25T12:00:00.000000Z\",\n \"updated_at\": \"2026-03-25T12:45:00.000000Z\",\n \"shop_type\": {\n \"id\": 1,\n \"title\": \"Main Workshop\"\n },\n \"body_type\": {\n \"id\": 1,\n \"title\": \"Sedan\"\n },\n \"fuel\": {\n \"id\": 1,\n \"title\": \"Petrol\"\n },\n \"transmission\": {\n \"id\": 1,\n \"title\": \"Automatic\"\n }\n }\n}" + } + ] + } + ] + } + ], + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{auth_token}}", + "type": "string" + } + ] + }, + "variable": [ + { + "key": "base_url", + "value": "http://localhost:8000" + }, + { + "key": "auth_token", + "value": "YOUR_SANCTUM_TOKEN" + }, + { + "key": "id", + "value": "1" + } + ] +} \ No newline at end of file diff --git a/packages/api/scripts/generate-openapi.cjs b/packages/api/scripts/generate-openapi.cjs new file mode 100644 index 0000000..d3d8dad --- /dev/null +++ b/packages/api/scripts/generate-openapi.cjs @@ -0,0 +1,223 @@ +const fs = require("fs"); +const path = require("path"); + +const collectionPath = process.argv[2] || "postman/collection.json"; +const outputPath = "open-api/schema.json"; + +// ── Schema inference from JSON examples ───────────────────────────── + +function inferSchema(value) { + if (value === null || value === undefined) { + return { type: "string", nullable: true }; + } + if (typeof value === "boolean") { + return { type: "boolean" }; + } + if (typeof value === "number") { + return Number.isInteger(value) ? { type: "integer" } : { type: "number" }; + } + if (typeof value === "string") { + if (/^\d{4}-\d{2}-\d{2}T/.test(value)) { + return { type: "string", format: "date-time" }; + } + return { type: "string" }; + } + if (Array.isArray(value)) { + if (value.length === 0) { + return { type: "array", items: {} }; + } + return { type: "array", items: inferSchema(value[0]) }; + } + if (typeof value === "object") { + const properties = {}; + for (const [key, val] of Object.entries(value)) { + properties[key] = inferSchema(val); + } + return { type: "object", properties }; + } + return {}; +} + +// ── Path helpers ──────────────────────────────────────────────────── + +function extractPath(url) { + const parts = url.path || []; + const raw = "/" + parts.join("/"); + return raw.replace(/\{\{(\w+)\}\}/g, "{$1}"); +} + +function extractPathParams(apiPath) { + const params = []; + const re = /\{(\w+)\}/g; + let m; + while ((m = re.exec(apiPath)) !== null) { + params.push({ + name: m[1], + in: "path", + required: true, + schema: { type: "string" }, + }); + } + return params; +} + +// ── Request body ──────────────────────────────────────────────────── + +function buildRequestBody(body) { + if (!body) return undefined; + + if (body.mode === "raw" && body.raw) { + try { + const parsed = JSON.parse(body.raw); + return { + required: true, + content: { + "application/json": { + schema: inferSchema(parsed), + example: parsed, + }, + }, + }; + } catch { + return { + content: { + "text/plain": { schema: { type: "string" } }, + }, + }; + } + } + + if (body.mode === "formdata" && body.formdata) { + const properties = {}; + for (const field of body.formdata) { + properties[field.key] = + field.type === "file" + ? { type: "string", format: "binary" } + : { type: "string" }; + } + return { + content: { + "multipart/form-data": { + schema: { type: "object", properties }, + }, + }, + }; + } + + return undefined; +} + +// ── Response schemas ──────────────────────────────────────────────── + +function buildResponses(responses) { + const out = {}; + + if (!responses || responses.length === 0) { + out["200"] = { description: "OK" }; + return out; + } + + for (const resp of responses) { + const code = String(resp.code || 200); + const desc = resp.status || "OK"; + const entry = { description: desc }; + + if (resp.body) { + try { + const parsed = JSON.parse(resp.body); + entry.content = { + "application/json": { + schema: inferSchema(parsed), + example: parsed, + }, + }; + } catch { + entry.content = { + "text/plain": { schema: { type: "string" } }, + }; + } + } + + out[code] = entry; + } + + return out; +} + +// ── Tree walker ───────────────────────────────────────────────────── + +function processItem(item, tag, paths) { + const req = item.request; + if (!req) return; + + const method = req.method.toLowerCase(); + const apiPath = extractPath(req.url); + const pathParams = extractPathParams(apiPath); + + if (!paths[apiPath]) paths[apiPath] = {}; + + const operation = { + tags: [tag], + summary: item.name, + }; + + const reqBody = buildRequestBody(req.body); + if (reqBody) operation.requestBody = reqBody; + + if (pathParams.length > 0) operation.parameters = pathParams; + + operation.responses = buildResponses(item.response); + + paths[apiPath][method] = operation; +} + +function walkFolder(folder, paths, tag) { + const currentTag = folder.name || tag; + if (!folder.item) return; + + for (const child of folder.item) { + if (child.item) { + walkFolder(child, paths, currentTag); + } else { + processItem(child, currentTag, paths); + } + } +} + +// ── Main ──────────────────────────────────────────────────────────── + +function main() { + const collection = JSON.parse(fs.readFileSync(collectionPath, "utf-8")); + + const tags = new Set(); + const paths = {}; + + for (const folder of collection.item) { + tags.add(folder.name); + walkFolder(folder, paths, folder.name); + } + + const spec = { + openapi: "3.0.0", + info: { + title: collection.info.name || "API", + description: collection.info.description || "", + version: "1.0.0", + }, + servers: [{ url: "http://{{base_url}}" }], + components: { + securitySchemes: { + bearerAuth: { type: "http", scheme: "bearer" }, + }, + }, + security: [{ bearerAuth: [] }], + tags: Array.from(tags).map((name) => ({ name })), + paths, + }; + + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + fs.writeFileSync(outputPath, JSON.stringify(spec, null, 2)); + console.log(`OpenAPI schema written to ${outputPath}`); +} + +main(); diff --git a/packages/api/scripts/generate-types.cjs b/packages/api/scripts/generate-types.cjs new file mode 100644 index 0000000..86898ed --- /dev/null +++ b/packages/api/scripts/generate-types.cjs @@ -0,0 +1,13 @@ +const { execSync } = require("child_process"); + +const schemaSource = process.argv[2] || "open-api/schema.json"; +const outputPath = "types/index.ts"; + +try { + execSync(`npx openapi-typescript ${schemaSource} -o ${outputPath}`, { + stdio: "inherit", + }); +} catch (error) { + console.error("Failed to generate TypeScript types from OpenAPI schema."); + process.exit(1); +} diff --git a/packages/api/src/api.ts b/packages/api/src/api.ts new file mode 100644 index 0000000..d61e558 --- /dev/null +++ b/packages/api/src/api.ts @@ -0,0 +1,65 @@ +import type { ApiClientOptions } from "./infra/client" +import { AuthClient } from "./clients/auth" +import { CustomersClient } from "./clients/customers" +import { ReferralSourcesClient } from "./clients/referral-sources" +import { VehiclesClient } from "./clients/vehicles" +import { VehicleAttributesClient } from "./clients/vehicle-attributes" +import { VehicleDocumentsClient } from "./clients/vehicle-documents" +import { DepartmentsClient } from "./clients/departments" +import { EmployeesClient } from "./clients/employees" +import { GeoClient } from "./clients/geo" +import { PaymentTermsClient } from "./clients/payment-terms" +import { ShopTypesClient } from "./clients/shop-types" +import { InventoryClient } from "./clients/inventory" +import { VendorsClient } from "./clients/vendors" +import { InspectionsClient } from "./clients/inspections" +import { LabelsClient } from "./clients/labels" +import { InsuranceTypesClient } from "./clients/insurance-types" +import { EstimatesClient } from "./clients/estimates" +import { JobCardsClient } from "./clients/job-cards" +import { PaymentsClient } from "./clients/payments" +import { PartsClient } from "./clients/parts" +import { PurchaseOrdersClient } from "./clients/purchase-orders" +import { ServicesClient } from "./clients/services" +import { ServiceGroupsClient } from "./clients/service-groups" +import { ExpensesClient } from "./clients/expenses" +import { TasksClient } from "./clients/tasks" +import { AppointmentsClient } from "./clients/appointments" +import { ShopTimingsClient } from "./clients/shop-timings" +import { ShopCalendarsClient } from "./clients/shop-calendars" + +export function createApi(options?: ApiClientOptions) { + return { + auth: new AuthClient(undefined, options), + customers: new CustomersClient(undefined, options), + referralSources: new ReferralSourcesClient(undefined, options), + vehicles: new VehiclesClient(undefined, options), + vehicleAttributes: new VehicleAttributesClient(undefined, options), + vehicleDocuments: new VehicleDocumentsClient(undefined, options), + departments: new DepartmentsClient(undefined, options), + employees: new EmployeesClient(undefined, options), + geo: new GeoClient(undefined, options), + paymentTerms: new PaymentTermsClient(undefined, options), + shopTypes: new ShopTypesClient(undefined, options), + inventory: new InventoryClient(undefined, options), + vendors: new VendorsClient(undefined, options), + inspections: new InspectionsClient(undefined, options), + labels: new LabelsClient(undefined, options), + insuranceTypes: new InsuranceTypesClient(undefined, options), + estimates: new EstimatesClient(undefined, options), + jobCards: new JobCardsClient(undefined, options), + payments: new PaymentsClient(undefined, options), + parts: new PartsClient(undefined, options), + purchaseOrders: new PurchaseOrdersClient(undefined, options), + services: new ServicesClient(undefined, options), + serviceGroups: new ServiceGroupsClient(undefined, options), + expenses: new ExpensesClient(undefined, options), + tasks: new TasksClient(undefined, options), + appointments: new AppointmentsClient(undefined, options), + shopTimings: new ShopTimingsClient(undefined, options), + shopCalendars: new ShopCalendarsClient(undefined, options), + } +} + +/** Unauthenticated singleton — use for public calls (login, register) */ +export const api = createApi() diff --git a/packages/api/src/clients/appointments.ts b/packages/api/src/clients/appointments.ts new file mode 100644 index 0000000..5893c50 --- /dev/null +++ b/packages/api/src/clients/appointments.ts @@ -0,0 +1,35 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const APPOINTMENT_ROUTES = { + INDEX: "/api/appointments", + BY_ID: "/api/appointments/{id}", + UNLINK_JOB_CARD: "/api/appointments/{id}/un-link-job-card", +} as const satisfies Record + +export class AppointmentsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(APPOINTMENT_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(APPOINTMENT_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(APPOINTMENT_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(APPOINTMENT_ROUTES.BY_ID, { params: { id } }) + } + + async unlinkJobCard(id: string, payload: ApiRequestBody) { + return this.post(APPOINTMENT_ROUTES.UNLINK_JOB_CARD, payload, { params: { id } }) + } +} diff --git a/packages/api/src/clients/auth.ts b/packages/api/src/clients/auth.ts new file mode 100644 index 0000000..d6542e5 --- /dev/null +++ b/packages/api/src/clients/auth.ts @@ -0,0 +1,26 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" + +export const AUTH_ROUTES = { + LOGIN: "/api/login", + PROFILE: "/api/profile", + LOGOUT: "/api/logout", +} as const satisfies Record + +export class AuthClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async login(payload: ApiRequestBody) { + return this.post(AUTH_ROUTES.LOGIN, payload) + } + + async profile() { + return this.get(AUTH_ROUTES.PROFILE) + } + + async logout() { + return this.post(AUTH_ROUTES.LOGOUT, undefined) + } +} diff --git a/packages/api/src/clients/customers.ts b/packages/api/src/clients/customers.ts new file mode 100644 index 0000000..ab23435 --- /dev/null +++ b/packages/api/src/clients/customers.ts @@ -0,0 +1,32 @@ +import { CrudClient } from "../infra/crud-client" +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const CUSTOMER_ROUTES = { + INDEX: "/api/customers", + BY_ID: "/api/customers/{id}", + EXPORT: "/api/customers/export", + IMPORT: "/api/customers/import", + CUSTOMER_TYPES: "/api/customer-types", +} as const satisfies Record + +export class CustomersClient extends CrudClient { + + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, CUSTOMER_ROUTES.INDEX, CUSTOMER_ROUTES.BY_ID) + + } + + async listCustomerTypes(query?: ApiListQueryParams) { + return this.get(CUSTOMER_ROUTES.CUSTOMER_TYPES, query ? { query } as never : undefined) + } + + async export() { + return this.get(CUSTOMER_ROUTES.EXPORT) + } + + async import(payload: ApiRequestBody) { + return this.post(CUSTOMER_ROUTES.IMPORT, payload) + } +} diff --git a/packages/api/src/clients/departments.ts b/packages/api/src/clients/departments.ts new file mode 100644 index 0000000..ef48630 --- /dev/null +++ b/packages/api/src/clients/departments.ts @@ -0,0 +1,40 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const DEPARTMENT_ROUTES = { + INDEX: "/api/departments", + BY_ID: "/api/departments/{id}", + SET_FAVORITE: "/api/set-favorite-department", + REMOVE_FAVORITE: "/api/remove-favorite-department", +} as const satisfies Record + +export class DepartmentsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(DEPARTMENT_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(DEPARTMENT_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(DEPARTMENT_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(DEPARTMENT_ROUTES.BY_ID, { params: { id } }) + } + + async setFavorite(payload: ApiRequestBody) { + return this.post(DEPARTMENT_ROUTES.SET_FAVORITE, payload) + } + + async removeFavorite(payload: ApiRequestBody) { + return this.post(DEPARTMENT_ROUTES.REMOVE_FAVORITE, payload) + } +} diff --git a/packages/api/src/clients/employees.ts b/packages/api/src/clients/employees.ts new file mode 100644 index 0000000..67ee440 --- /dev/null +++ b/packages/api/src/clients/employees.ts @@ -0,0 +1,17 @@ +import { CrudClient } from "../infra/crud-client" +import type { ApiClientOptions } from "../infra/client" +import type { ApiPath } from "../infra/types" + +export const EMPLOYEE_ROUTES = { + INDEX: "/api/employees", + BY_ID: "/api/employees/{id}", +} as const satisfies Record + +export class EmployeesClient extends CrudClient< + typeof EMPLOYEE_ROUTES.INDEX, + typeof EMPLOYEE_ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, EMPLOYEE_ROUTES.INDEX, EMPLOYEE_ROUTES.BY_ID) + } +} diff --git a/packages/api/src/clients/estimates.ts b/packages/api/src/clients/estimates.ts new file mode 100644 index 0000000..6cf61f0 --- /dev/null +++ b/packages/api/src/clients/estimates.ts @@ -0,0 +1,69 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const ESTIMATE_ROUTES = { + INDEX: "/api/estimates", + BY_ID: "/api/estimates/{id}", + QUICK_REMARKS: "/api/quick-remark", + QUICK_REMARK_BY_ID: "/api/quick-remark/{id}", + QUICK_NOTES: "/api/quick-notes", + QUICK_NOTE_BY_ID: "/api/quick-notes/{id}", +} as const satisfies Record + +export class EstimatesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Estimates ── + async list(query?: ApiListQueryParams) { + return this.get(ESTIMATE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(ESTIMATE_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(ESTIMATE_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(ESTIMATE_ROUTES.BY_ID, { params: { id } }) + } + + // ── Quick Remarks ── + async listQuickRemarks(query?: ApiListQueryParams) { + return this.get(ESTIMATE_ROUTES.QUICK_REMARKS, query ? { query } as never : undefined) + } + + async createQuickRemark(payload: ApiRequestBody) { + return this.post(ESTIMATE_ROUTES.QUICK_REMARKS, payload) + } + + async updateQuickRemark(id: string, payload: ApiRequestBody) { + return this.put(ESTIMATE_ROUTES.QUICK_REMARK_BY_ID, payload, { params: { id } }) + } + + async destroyQuickRemark(id: string) { + return this.delete(ESTIMATE_ROUTES.QUICK_REMARK_BY_ID, { params: { id } }) + } + + // ── Quick Notes ── + async listQuickNotes(query?: ApiListQueryParams) { + return this.get(ESTIMATE_ROUTES.QUICK_NOTES, query ? { query } as never : undefined) + } + + async createQuickNote(payload: ApiRequestBody) { + return this.post(ESTIMATE_ROUTES.QUICK_NOTES, payload) + } + + async updateQuickNote(id: string, payload: ApiRequestBody) { + return this.put(ESTIMATE_ROUTES.QUICK_NOTE_BY_ID, payload, { params: { id } }) + } + + async destroyQuickNote(id: string) { + return this.delete(ESTIMATE_ROUTES.QUICK_NOTE_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/expenses.ts b/packages/api/src/clients/expenses.ts new file mode 100644 index 0000000..5755a10 --- /dev/null +++ b/packages/api/src/clients/expenses.ts @@ -0,0 +1,74 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const EXPENSE_ROUTES = { + ITEMS: "/api/expense-items", + ITEM_BY_ID: "/api/expense-items/{id}", + TOGGLE_ITEM_STATUS: "/api/toggle-expense-item-status", + BILLS: "/api/bills", + BILL_BY_ID: "/api/bills/{id}", + EXPENSES: "/api/expenses", + EXPENSE_BY_ID: "/api/expenses/{id}", +} as const satisfies Record + +export class ExpensesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Expense Items ── + async listItems(query?: ApiListQueryParams) { + return this.get(EXPENSE_ROUTES.ITEMS, query ? { query } as never : undefined) + } + + async createItem(payload: ApiRequestBody) { + return this.post(EXPENSE_ROUTES.ITEMS, payload) + } + + async updateItem(id: string, payload: ApiRequestBody) { + return this.put(EXPENSE_ROUTES.ITEM_BY_ID, payload, { params: { id } }) + } + + async destroyItem(id: string) { + return this.delete(EXPENSE_ROUTES.ITEM_BY_ID, { params: { id } }) + } + + async toggleItemStatus(payload: ApiRequestBody) { + return this.post(EXPENSE_ROUTES.TOGGLE_ITEM_STATUS, payload) + } + + // ── Bills ── + async listBills(query?: ApiListQueryParams) { + return this.get(EXPENSE_ROUTES.BILLS, query ? { query } as never : undefined) + } + + async createBill(payload: ApiRequestBody) { + return this.post(EXPENSE_ROUTES.BILLS, payload) + } + + async updateBill(id: string, payload: ApiRequestBody) { + return this.put(EXPENSE_ROUTES.BILL_BY_ID, payload, { params: { id } }) + } + + async destroyBill(id: string) { + return this.delete(EXPENSE_ROUTES.BILL_BY_ID, { params: { id } }) + } + + // ── Expenses ── + async listExpenses(query?: ApiListQueryParams) { + return this.get(EXPENSE_ROUTES.EXPENSES, query ? { query } as never : undefined) + } + + async createExpense(payload: ApiRequestBody) { + return this.post(EXPENSE_ROUTES.EXPENSES, payload) + } + + async updateExpense(id: string, payload: ApiRequestBody) { + return this.put(EXPENSE_ROUTES.EXPENSE_BY_ID, payload, { params: { id } }) + } + + async destroyExpense(id: string) { + return this.delete(EXPENSE_ROUTES.EXPENSE_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/geo.ts b/packages/api/src/clients/geo.ts new file mode 100644 index 0000000..51fe40d --- /dev/null +++ b/packages/api/src/clients/geo.ts @@ -0,0 +1,21 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath } from "../infra/types" + +export const GEO_ROUTES = { + COUNTRIES: "/api/countries", + STATES: "/api/states", +} as const satisfies Record + +export class GeoClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async countries() { + return this.get(GEO_ROUTES.COUNTRIES) + } + + async states() { + return this.get(GEO_ROUTES.STATES) + } +} diff --git a/packages/api/src/clients/index.ts b/packages/api/src/clients/index.ts new file mode 100644 index 0000000..ca3baf6 --- /dev/null +++ b/packages/api/src/clients/index.ts @@ -0,0 +1,28 @@ +export { AuthClient, AUTH_ROUTES } from "./auth" +export { CustomersClient, CUSTOMER_ROUTES } from "./customers" +export { ReferralSourcesClient, REFERRAL_SOURCE_ROUTES } from "./referral-sources" +export { VehiclesClient, VEHICLE_ROUTES } from "./vehicles" +export { VehicleAttributesClient, VEHICLE_ATTRIBUTE_ROUTES } from "./vehicle-attributes" +export { VehicleDocumentsClient, VEHICLE_DOCUMENT_ROUTES } from "./vehicle-documents" +export { DepartmentsClient, DEPARTMENT_ROUTES } from "./departments" +export { EmployeesClient, EMPLOYEE_ROUTES } from "./employees" +export { GeoClient, GEO_ROUTES } from "./geo" +export { PaymentTermsClient, PAYMENT_TERM_ROUTES } from "./payment-terms" +export { ShopTypesClient, SHOP_TYPE_ROUTES, type ShopTypeCreatePayload, type ShopTypeUpdatePayload } from "./shop-types" +export { InventoryClient, INVENTORY_ROUTES } from "./inventory" +export { VendorsClient, VENDOR_ROUTES } from "./vendors" +export { InspectionsClient, INSPECTION_ROUTES } from "./inspections" +export { LabelsClient, LABEL_ROUTES } from "./labels" +export { InsuranceTypesClient, INSURANCE_TYPE_ROUTES } from "./insurance-types" +export { EstimatesClient, ESTIMATE_ROUTES } from "./estimates" +export { JobCardsClient, JOB_CARD_ROUTES } from "./job-cards" +export { PaymentsClient, PAYMENT_ROUTES } from "./payments" +export { PartsClient, PARTS_ROUTES } from "./parts" +export { PurchaseOrdersClient, PURCHASE_ORDER_ROUTES } from "./purchase-orders" +export { ServicesClient, SERVICE_ROUTES } from "./services" +export { ServiceGroupsClient, SERVICE_GROUP_ROUTES } from "./service-groups" +export { ExpensesClient, EXPENSE_ROUTES } from "./expenses" +export { TasksClient, TASK_ROUTES } from "./tasks" +export { AppointmentsClient, APPOINTMENT_ROUTES } from "./appointments" +export { ShopTimingsClient, SHOP_TIMING_ROUTES } from "./shop-timings" +export { ShopCalendarsClient, SHOP_CALENDAR_ROUTES } from "./shop-calendars" diff --git a/packages/api/src/clients/inspections.ts b/packages/api/src/clients/inspections.ts new file mode 100644 index 0000000..0133211 --- /dev/null +++ b/packages/api/src/clients/inspections.ts @@ -0,0 +1,118 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const INSPECTION_ROUTES = { + CATEGORIES: "/api/inspection-categories", + CATEGORY_BY_ID: "/api/inspection-categories/{id}", + INDEX: "/api/inspections", + BY_ID: "/api/inspections/{id}", + CHANGE_STATUS: "/api/change-inspection-status", + CHECKPOINT_LABELS: "/api/check-point-label", + CHECKPOINT_LABEL_BY_ID: "/api/check-point-label/{id}", + CHECKPOINTS: "/api/inspection-check-points", + CHECKPOINT_BY_ID: "/api/inspection-check-points/{id}", + TOGGLE_LABEL_TO_CHECKPOINT: "/api/toggle-label-to-checkpoint", + CHECKPOINT_CHANGE_STATUS: "/api/inspection-check-points/change-status", + CHECKPOINT_ADD_ATTACHMENT: "/api/inspection-check-points/add-attachment", + CHECKPOINT_UPLOAD_MEDIA: "/api/inspection-check-points/{id}/upload-media", + CHECKPOINT_MEDIA: "/api/inspection-check-points/{id}/media", +} as const satisfies Record + +export class InspectionsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Categories ── + async listCategories(query?: ApiListQueryParams) { + return this.get(INSPECTION_ROUTES.CATEGORIES, query ? { query } as never : undefined) + } + + async createCategory(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CATEGORIES, payload) + } + + async updateCategory(id: string, payload: ApiRequestBody) { + return this.put(INSPECTION_ROUTES.CATEGORY_BY_ID, payload, { params: { id } }) + } + + async destroyCategory(id: string) { + return this.delete(INSPECTION_ROUTES.CATEGORY_BY_ID, { params: { id } }) + } + + // ── Inspections ── + async list(query?: ApiListQueryParams) { + return this.get(INSPECTION_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(INSPECTION_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(INSPECTION_ROUTES.BY_ID, { params: { id } }) + } + + async changeStatus(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHANGE_STATUS, payload) + } + + // ── Checkpoint Labels ── + async listCheckpointLabels(query?: ApiListQueryParams) { + return this.get(INSPECTION_ROUTES.CHECKPOINT_LABELS, query ? { query } as never : undefined) + } + + async createCheckpointLabel(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHECKPOINT_LABELS, payload) + } + + async updateCheckpointLabel(id: string, payload: ApiRequestBody) { + return this.put(INSPECTION_ROUTES.CHECKPOINT_LABEL_BY_ID, payload, { params: { id } }) + } + + async destroyCheckpointLabel(id: string) { + return this.delete(INSPECTION_ROUTES.CHECKPOINT_LABEL_BY_ID, { params: { id } }) + } + + // ── Checkpoints ── + async listCheckpoints(query?: ApiListQueryParams) { + return this.get(INSPECTION_ROUTES.CHECKPOINTS, query ? { query } as never : undefined) + } + + async createCheckpoint(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHECKPOINTS, payload) + } + + async updateCheckpoint(id: string, payload: ApiRequestBody) { + return this.put(INSPECTION_ROUTES.CHECKPOINT_BY_ID, payload, { params: { id } }) + } + + async destroyCheckpoint(id: string) { + return this.delete(INSPECTION_ROUTES.CHECKPOINT_BY_ID, { params: { id } }) + } + + async toggleLabelToCheckpoint(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.TOGGLE_LABEL_TO_CHECKPOINT, payload) + } + + async changeCheckpointStatus(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHECKPOINT_CHANGE_STATUS, payload) + } + + async addCheckpointAttachment(payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHECKPOINT_ADD_ATTACHMENT, payload) + } + + async uploadCheckpointMedia(id: string, payload: ApiRequestBody) { + return this.post(INSPECTION_ROUTES.CHECKPOINT_UPLOAD_MEDIA, payload, { params: { id } }) + } + + async deleteCheckpointMedia(id: string) { + return this.delete(INSPECTION_ROUTES.CHECKPOINT_MEDIA, { params: { id } }) + } +} diff --git a/packages/api/src/clients/insurance-types.ts b/packages/api/src/clients/insurance-types.ts new file mode 100644 index 0000000..2dcf0b4 --- /dev/null +++ b/packages/api/src/clients/insurance-types.ts @@ -0,0 +1,30 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const INSURANCE_TYPE_ROUTES = { + INDEX: "/api/insurance-types", + BY_ID: "/api/insurance-types/{id}", +} as const satisfies Record + +export class InsuranceTypesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(INSURANCE_TYPE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(INSURANCE_TYPE_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(INSURANCE_TYPE_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(INSURANCE_TYPE_ROUTES.BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/inventory.ts b/packages/api/src/clients/inventory.ts new file mode 100644 index 0000000..4adae0e --- /dev/null +++ b/packages/api/src/clients/inventory.ts @@ -0,0 +1,99 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const INVENTORY_ROUTES = { + UNIT_TYPES: "/api/unit-types", + UNIT_TYPE_BY_ID: "/api/unit-types/{id}", + SET_FAVORITE_UNIT_TYPE: "/api/set-favorite-unit-type", + REMOVE_FAVORITE_UNIT_TYPE: "/api/remove-favorite-unit-type", + CATEGORIES: "/api/inventory-categories", + CATEGORY_BY_ID: "/api/inventory-categories/{id}", + SET_FAVORITE_CATEGORY: "/api/set-favorite-inventory-category", + REMOVE_FAVORITE_CATEGORY: "/api/remove-favorite-inventory-category", + LABOR_RATES: "/api/labor-rates", + LABOR_RATE_BY_ID: "/api/labor-rates/{id}", + SET_FAVORITE_LABOR_RATE: "/api/set-favorite-labor-rate", + REMOVE_FAVORITE_LABOR_RATE: "/api/remove-favorite-labor-rate", +} as const satisfies Record + +export class InventoryClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Unit Types ── + async listUnitTypes(query?: ApiListQueryParams) { + return this.get(INVENTORY_ROUTES.UNIT_TYPES, query ? { query } as never : undefined) + } + + async createUnitType(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.UNIT_TYPES, payload) + } + + async updateUnitType(id: string, payload: ApiRequestBody) { + return this.put(INVENTORY_ROUTES.UNIT_TYPE_BY_ID, payload, { params: { id } }) + } + + async destroyUnitType(id: string) { + return this.delete(INVENTORY_ROUTES.UNIT_TYPE_BY_ID, { params: { id } }) + } + + async setFavoriteUnitType(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.SET_FAVORITE_UNIT_TYPE, payload) + } + + async removeFavoriteUnitType(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.REMOVE_FAVORITE_UNIT_TYPE, payload) + } + + // ── Inventory Categories ── + async listCategories(query?: ApiListQueryParams) { + return this.get(INVENTORY_ROUTES.CATEGORIES, query ? { query } as never : undefined) + } + + async createCategory(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.CATEGORIES, payload) + } + + async updateCategory(id: string, payload: ApiRequestBody) { + return this.put(INVENTORY_ROUTES.CATEGORY_BY_ID, payload, { params: { id } }) + } + + async destroyCategory(id: string) { + return this.delete(INVENTORY_ROUTES.CATEGORY_BY_ID, { params: { id } }) + } + + async setFavoriteCategory(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.SET_FAVORITE_CATEGORY, payload) + } + + async removeFavoriteCategory(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.REMOVE_FAVORITE_CATEGORY, payload) + } + + // ── Labor Rates ── + async listLaborRates(query?: ApiListQueryParams) { + return this.get(INVENTORY_ROUTES.LABOR_RATES, query ? { query } as never : undefined) + } + + async createLaborRate(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.LABOR_RATES, payload) + } + + async updateLaborRate(id: string, payload: ApiRequestBody) { + return this.put(INVENTORY_ROUTES.LABOR_RATE_BY_ID, payload, { params: { id } }) + } + + async destroyLaborRate(id: string) { + return this.delete(INVENTORY_ROUTES.LABOR_RATE_BY_ID, { params: { id } }) + } + + async setFavoriteLaborRate(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.SET_FAVORITE_LABOR_RATE, payload) + } + + async removeFavoriteLaborRate(payload: ApiRequestBody) { + return this.post(INVENTORY_ROUTES.REMOVE_FAVORITE_LABOR_RATE, payload) + } +} diff --git a/packages/api/src/clients/job-cards.ts b/packages/api/src/clients/job-cards.ts new file mode 100644 index 0000000..c300949 --- /dev/null +++ b/packages/api/src/clients/job-cards.ts @@ -0,0 +1,90 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const JOB_CARD_ROUTES = { + INDEX: "/api/job-cards", + BY_ID: "/api/job-cards/{id}", + CHANGE_DATE: "/api/job-cards/{id}/change-date", + CHANGE_STATUS: "/api/job-cards/{id}/change-status", + ADD_CUSTOMER_REMARK: "/api/job-cards/{id}/add-customer-remark", + EDIT_CUSTOMER_REMARK: "/api/job-cards/{id}/edit-customer-remark", + DELETE_CUSTOMER_REMARK: "/api/job-cards/{id}/delete-customer-remark", + ADD_SHOP_RECOMMENDATION: "/api/job-cards/{id}/add-shop-recommendation", + EDIT_SHOP_RECOMMENDATION: "/api/job-cards/{id}/edit-shop-recommendation", + DELETE_SHOP_RECOMMENDATION: "/api/job-cards/{id}/delete-shop-recommendation", + ADD_ATTACHMENT: "/api/job-cards/{id}/add-attachment", + DELETE_ATTACHMENT: "/api/job-cards/{id}/delete-attachment", + CHANGE_SERVICE_WRITER: "/api/job-cards/{id}/change-service-writer-id", + CHANGE_SALES_PERSON: "/api/job-cards/{id}/change-sales-person-id", +} as const satisfies Record + +export class JobCardsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(JOB_CARD_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(JOB_CARD_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(JOB_CARD_ROUTES.BY_ID, { params: { id } }) + } + + async changeDate(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.CHANGE_DATE, payload, { params: { id } }) + } + + async changeStatus(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.CHANGE_STATUS, payload, { params: { id } }) + } + + async addCustomerRemark(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.ADD_CUSTOMER_REMARK, payload, { params: { id } }) + } + + async editCustomerRemark(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.EDIT_CUSTOMER_REMARK, payload, { params: { id } }) + } + + async deleteCustomerRemark(id: string) { + return this.delete(JOB_CARD_ROUTES.DELETE_CUSTOMER_REMARK, { params: { id } }) + } + + async addShopRecommendation(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.ADD_SHOP_RECOMMENDATION, payload, { params: { id } }) + } + + async editShopRecommendation(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.EDIT_SHOP_RECOMMENDATION, payload, { params: { id } }) + } + + async deleteShopRecommendation(id: string) { + return this.delete(JOB_CARD_ROUTES.DELETE_SHOP_RECOMMENDATION, { params: { id } }) + } + + async addAttachment(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.ADD_ATTACHMENT, payload, { params: { id } }) + } + + async deleteAttachment(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.DELETE_ATTACHMENT, payload, { params: { id } }) + } + + async changeServiceWriter(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.CHANGE_SERVICE_WRITER, payload, { params: { id } }) + } + + async changeSalesPerson(id: string, payload: ApiRequestBody) { + return this.post(JOB_CARD_ROUTES.CHANGE_SALES_PERSON, payload, { params: { id } }) + } +} diff --git a/packages/api/src/clients/labels.ts b/packages/api/src/clients/labels.ts new file mode 100644 index 0000000..d36e72c --- /dev/null +++ b/packages/api/src/clients/labels.ts @@ -0,0 +1,30 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const LABEL_ROUTES = { + INDEX: "/api/labels", + BY_ID: "/api/labels/{id}", +} as const satisfies Record + +export class LabelsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(LABEL_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(LABEL_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(LABEL_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(LABEL_ROUTES.BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/parts.ts b/packages/api/src/clients/parts.ts new file mode 100644 index 0000000..8b34764 --- /dev/null +++ b/packages/api/src/clients/parts.ts @@ -0,0 +1,45 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const PARTS_ROUTES = { + INDEX: "/api/parts", + BY_ID: "/api/parts/{id}", + IMPORT: "/api/import-parts", + EXPORT: "/api/export-parts", + TOGGLE_STATUS: "/api/toggle-part-status", +} as const satisfies Record + +export class PartsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(PARTS_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(PARTS_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(PARTS_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(PARTS_ROUTES.BY_ID, { params: { id } }) + } + + async import(payload: ApiRequestBody) { + return this.post(PARTS_ROUTES.IMPORT, payload) + } + + async export(payload: ApiRequestBody) { + return this.post(PARTS_ROUTES.EXPORT, payload) + } + + async toggleStatus(payload: ApiRequestBody) { + return this.post(PARTS_ROUTES.TOGGLE_STATUS, payload) + } +} diff --git a/packages/api/src/clients/payment-terms.ts b/packages/api/src/clients/payment-terms.ts new file mode 100644 index 0000000..1e41781 --- /dev/null +++ b/packages/api/src/clients/payment-terms.ts @@ -0,0 +1,35 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const PAYMENT_TERM_ROUTES = { + INDEX: "/api/payment-terms", + BY_ID: "/api/payment-terms/{id}", + SET_DEFAULT: "/api/set-default-payment-term", +} as const satisfies Record + +export class PaymentTermsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(PAYMENT_TERM_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(PAYMENT_TERM_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(PAYMENT_TERM_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(PAYMENT_TERM_ROUTES.BY_ID, { params: { id } }) + } + + async setDefault(payload: ApiRequestBody) { + return this.post(PAYMENT_TERM_ROUTES.SET_DEFAULT, payload) + } +} diff --git a/packages/api/src/clients/payments.ts b/packages/api/src/clients/payments.ts new file mode 100644 index 0000000..718f963 --- /dev/null +++ b/packages/api/src/clients/payments.ts @@ -0,0 +1,50 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const PAYMENT_ROUTES = { + MODES: "/api/payment-mode", + MODE_BY_ID: "/api/payment-mode/{id}", + RECEIVED: "/api/payment-recieved", + RECEIVED_BY_ID: "/api/payment-recieved/{id}", +} as const satisfies Record + +export class PaymentsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Payment Modes ── + async listModes(query?: ApiListQueryParams) { + return this.get(PAYMENT_ROUTES.MODES, query ? { query } as never : undefined) + } + + async createMode(payload: ApiRequestBody) { + return this.post(PAYMENT_ROUTES.MODES, payload) + } + + async updateMode(id: string, payload: ApiRequestBody) { + return this.put(PAYMENT_ROUTES.MODE_BY_ID, payload, { params: { id } }) + } + + async destroyMode(id: string) { + return this.delete(PAYMENT_ROUTES.MODE_BY_ID, { params: { id } }) + } + + // ── Payment Received ── + async listReceived(query?: ApiListQueryParams) { + return this.get(PAYMENT_ROUTES.RECEIVED, query ? { query } as never : undefined) + } + + async createReceived(payload: ApiRequestBody) { + return this.post(PAYMENT_ROUTES.RECEIVED, payload) + } + + async updateReceived(id: string, payload: ApiRequestBody) { + return this.post(PAYMENT_ROUTES.RECEIVED_BY_ID, payload, { params: { id } }) + } + + async destroyReceived(id: string) { + return this.delete(PAYMENT_ROUTES.RECEIVED_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/purchase-orders.ts b/packages/api/src/clients/purchase-orders.ts new file mode 100644 index 0000000..5acbe8d --- /dev/null +++ b/packages/api/src/clients/purchase-orders.ts @@ -0,0 +1,30 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const PURCHASE_ORDER_ROUTES = { + INDEX: "/api/purchase-orders", + BY_ID: "/api/purchase-orders/{id}", +} as const satisfies Record + +export class PurchaseOrdersClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(PURCHASE_ORDER_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(PURCHASE_ORDER_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(PURCHASE_ORDER_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(PURCHASE_ORDER_ROUTES.BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/referral-sources.ts b/packages/api/src/clients/referral-sources.ts new file mode 100644 index 0000000..84f0fd8 --- /dev/null +++ b/packages/api/src/clients/referral-sources.ts @@ -0,0 +1,35 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const REFERRAL_SOURCE_ROUTES = { + INDEX: "/api/referral-sources", + BY_ID: "/api/referral-sources/{id}", + SET_DEFAULT: "/api/set-default-referral-source", +} as const satisfies Record + +export class ReferralSourcesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(REFERRAL_SOURCE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(REFERRAL_SOURCE_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(REFERRAL_SOURCE_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(REFERRAL_SOURCE_ROUTES.BY_ID, { params: { id } }) + } + + async setDefault(payload: ApiRequestBody) { + return this.post(REFERRAL_SOURCE_ROUTES.SET_DEFAULT, payload) + } +} diff --git a/packages/api/src/clients/service-groups.ts b/packages/api/src/clients/service-groups.ts new file mode 100644 index 0000000..0fabf6a --- /dev/null +++ b/packages/api/src/clients/service-groups.ts @@ -0,0 +1,17 @@ +import { CrudClient } from "../infra/crud-client" +import type { ApiClientOptions } from "../infra/client" +import type { ApiPath } from "../infra/types" + +export const SERVICE_GROUP_ROUTES = { + INDEX: "/api/service-groups", + BY_ID: "/api/service-groups/{id}", +} as const satisfies Record + +export class ServiceGroupsClient extends CrudClient< + typeof SERVICE_GROUP_ROUTES.INDEX, + typeof SERVICE_GROUP_ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, SERVICE_GROUP_ROUTES.INDEX, SERVICE_GROUP_ROUTES.BY_ID) + } +} diff --git a/packages/api/src/clients/services.ts b/packages/api/src/clients/services.ts new file mode 100644 index 0000000..459b127 --- /dev/null +++ b/packages/api/src/clients/services.ts @@ -0,0 +1,40 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const SERVICE_ROUTES = { + INDEX: "/api/services", + BY_ID: "/api/services/{id}", + IMPORT: "/api/import-services", + EXPORT: "/api/export-services", +} as const satisfies Record + +export class ServicesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(SERVICE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(SERVICE_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(SERVICE_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(SERVICE_ROUTES.BY_ID, { params: { id } }) + } + + async import(payload: ApiRequestBody) { + return this.post(SERVICE_ROUTES.IMPORT, payload) + } + + async export(payload: ApiRequestBody) { + return this.post(SERVICE_ROUTES.EXPORT, payload) + } +} diff --git a/packages/api/src/clients/shop-calendars.ts b/packages/api/src/clients/shop-calendars.ts new file mode 100644 index 0000000..6e584a6 --- /dev/null +++ b/packages/api/src/clients/shop-calendars.ts @@ -0,0 +1,41 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const SHOP_CALENDAR_ROUTES = { + INDEX: "/api/shop-calenders", + BY_ID: "/api/shop-calenders/{id}", + SET_DEFAULT: "/api/set-default-shop-calender", + REMOVE_DEFAULT: "/api/remove-default-shop-calender", + UPDATE_DAY_TYPE: "/api/shop-calenders/{id}/update-day-type", +} as const satisfies Record + +export class ShopCalendarsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(SHOP_CALENDAR_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(SHOP_CALENDAR_ROUTES.INDEX, payload) + } + + async destroy(id: string) { + return this.delete(SHOP_CALENDAR_ROUTES.BY_ID, { params: { id } }) + } + + async setDefault(payload: ApiRequestBody) { + return this.post(SHOP_CALENDAR_ROUTES.SET_DEFAULT, payload) + } + + async removeDefault(payload: ApiRequestBody) { + return this.post(SHOP_CALENDAR_ROUTES.REMOVE_DEFAULT, payload) + } + + async updateDayType(id: string, payload: ApiRequestBody) { + return this.post(SHOP_CALENDAR_ROUTES.UPDATE_DAY_TYPE, payload, { params: { id } } as never) + } +} diff --git a/packages/api/src/clients/shop-timings.ts b/packages/api/src/clients/shop-timings.ts new file mode 100644 index 0000000..4f96959 --- /dev/null +++ b/packages/api/src/clients/shop-timings.ts @@ -0,0 +1,27 @@ +import { CrudClient } from "../infra/crud-client" +import type { ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" + +export const SHOP_TIMING_ROUTES = { + INDEX: "/api/shop-timings", + BY_ID: "/api/shop-timings/{id}", + SET_DEFAULT: "/api/set-default-shop-timing", + REMOVE_DEFAULT: "/api/remove-default-shop-timing", +} as const satisfies Record + +export class ShopTimingsClient extends CrudClient< + typeof SHOP_TIMING_ROUTES.INDEX, + typeof SHOP_TIMING_ROUTES.BY_ID +> { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions, SHOP_TIMING_ROUTES.INDEX, SHOP_TIMING_ROUTES.BY_ID) + } + + async setDefault(payload: ApiRequestBody) { + return this.post(SHOP_TIMING_ROUTES.SET_DEFAULT, payload) + } + + async removeDefault(payload: ApiRequestBody) { + return this.post(SHOP_TIMING_ROUTES.REMOVE_DEFAULT, payload) + } +} diff --git a/packages/api/src/clients/shop-types.ts b/packages/api/src/clients/shop-types.ts new file mode 100644 index 0000000..737efa1 --- /dev/null +++ b/packages/api/src/clients/shop-types.ts @@ -0,0 +1,60 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const SHOP_TYPE_ROUTES = { + INDEX: "/api/shop-types", + BY_ID: "/api/shop-types/{id}", +} as const satisfies Record + +export type ShopTypeCreatePayload = { + title: string + shop_type?: string + note?: string + is_default?: boolean + inspection?: File | null + image?: File | null +} + +export type ShopTypeUpdatePayload = Partial> & { + title?: string +} + +function buildShopTypeFormData(payload: ShopTypeCreatePayload | ShopTypeUpdatePayload): FormData { + const fd = new FormData() + if (payload.title) fd.append("title", payload.title) + if (payload.shop_type) fd.append("shop_type", payload.shop_type) + if (payload.note) fd.append("note", payload.note) + if (payload.is_default != null) fd.append("is_default", String(Number(payload.is_default))) + if (payload.inspection instanceof File) fd.append("inspection", payload.inspection) + if (payload.image instanceof File) fd.append("image", payload.image) + return fd +} + +export class ShopTypesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(SHOP_TYPE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ShopTypeCreatePayload) { + const fd = buildShopTypeFormData(payload) + return this.postFormData(SHOP_TYPE_ROUTES.INDEX, fd) + } + + async update(id: string, payload: ShopTypeUpdatePayload) { + const fd = buildShopTypeFormData(payload) + fd.append("_method", "PUT") + const url = SHOP_TYPE_ROUTES.BY_ID.replace("{id}", id) + return this.postFormData(url, fd) + } + + async destroy(id: string) { + return this.delete(SHOP_TYPE_ROUTES.BY_ID, { params: { id } }) + } +} + + diff --git a/packages/api/src/clients/tasks.ts b/packages/api/src/clients/tasks.ts new file mode 100644 index 0000000..444880d --- /dev/null +++ b/packages/api/src/clients/tasks.ts @@ -0,0 +1,99 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const TASK_ROUTES = { + TYPES: "/api/task-types", + TYPE_BY_ID: "/api/task-types/{id}", + SET_DEFAULT_TYPE: "/api/set-default-task-type", + REMOVE_DEFAULT_TYPE: "/api/remove-default-task-type", + SECTIONS: "/api/task-sections", + SECTION_BY_ID: "/api/task-sections/{id}", + SET_DEFAULT_SECTION: "/api/set-default-task-section", + REMOVE_DEFAULT_SECTION: "/api/remove-default-task-section", + CHANGE_SECTION_ARRANGEMENT: "/api/change-task-section-arrangement", + TASKS: "/api/tasks", + TASK_BY_ID: "/api/tasks/{id}", + COMPLETE: "/api/tasks/{id}/complete", +} as const satisfies Record + +export class TasksClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Task Types ── + async listTypes(query?: ApiListQueryParams) { + return this.get(TASK_ROUTES.TYPES, query ? { query } as never : undefined) + } + + async createType(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.TYPES, payload) + } + + async updateType(id: string, payload: ApiRequestBody) { + return this.put(TASK_ROUTES.TYPE_BY_ID, payload, { params: { id } }) + } + + async destroyType(id: string) { + return this.delete(TASK_ROUTES.TYPE_BY_ID, { params: { id } }) + } + + async setDefaultType(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.SET_DEFAULT_TYPE, payload) + } + + async removeDefaultType(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.REMOVE_DEFAULT_TYPE, payload) + } + + // ── Task Sections ── + async listSections(query?: ApiListQueryParams) { + return this.get(TASK_ROUTES.SECTIONS, query ? { query } as never : undefined) + } + + async createSection(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.SECTIONS, payload) + } + + async updateSection(id: string, payload: ApiRequestBody) { + return this.put(TASK_ROUTES.SECTION_BY_ID, payload, { params: { id } }) + } + + async destroySection(id: string) { + return this.delete(TASK_ROUTES.SECTION_BY_ID, { params: { id } }) + } + + async setDefaultSection(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.SET_DEFAULT_SECTION, payload) + } + + async removeDefaultSection(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.REMOVE_DEFAULT_SECTION, payload) + } + + async changeSectionArrangement(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.CHANGE_SECTION_ARRANGEMENT, payload) + } + + // ── Tasks ── + async list(query?: ApiListQueryParams) { + return this.get(TASK_ROUTES.TASKS, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(TASK_ROUTES.TASKS, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(TASK_ROUTES.TASK_BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(TASK_ROUTES.TASK_BY_ID, { params: { id } }) + } + + async complete(id: string, payload: ApiRequestBody) { + return this.post(TASK_ROUTES.COMPLETE, payload, { params: { id } }) + } +} diff --git a/packages/api/src/clients/vehicle-attributes.ts b/packages/api/src/clients/vehicle-attributes.ts new file mode 100644 index 0000000..72df712 --- /dev/null +++ b/packages/api/src/clients/vehicle-attributes.ts @@ -0,0 +1,88 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const VEHICLE_ATTRIBUTE_ROUTES = { + BODY_TYPES: "/api/vehicle-body-types", + BODY_TYPE_BY_ID: "/api/vehicle-body-types/{id}", + FUEL_TYPES: "/api/vehicle-fuel-types", + FUEL_TYPE_BY_ID: "/api/vehicle-fuel-types/{id}", + TRANSMISSIONS: "/api/vehicle-transmissions", + TRANSMISSION_BY_ID: "/api/vehicle-transmissions/{id}", + COLORS: "/api/vehicle-colors", + COLOR_BY_ID: "/api/vehicle-colors/{id}", +} as const satisfies Record + +export class VehicleAttributesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Body Types ── + async listBodyTypes(query?: ApiListQueryParams) { + return this.get(VEHICLE_ATTRIBUTE_ROUTES.BODY_TYPES, query ? { query } as never : undefined) + } + + async createBodyType(payload: ApiRequestBody) { + return this.post(VEHICLE_ATTRIBUTE_ROUTES.BODY_TYPES, payload) + } + + async updateBodyType(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_ATTRIBUTE_ROUTES.BODY_TYPE_BY_ID, payload, { params: { id } }) + } + + async destroyBodyType(id: string) { + return this.delete(VEHICLE_ATTRIBUTE_ROUTES.BODY_TYPE_BY_ID, { params: { id } }) + } + + // ── Fuel Types ── + async listFuelTypes(query?: ApiListQueryParams) { + return this.get(VEHICLE_ATTRIBUTE_ROUTES.FUEL_TYPES, query ? { query } as never : undefined) + } + + async createFuelType(payload: ApiRequestBody) { + return this.post(VEHICLE_ATTRIBUTE_ROUTES.FUEL_TYPES, payload) + } + + async updateFuelType(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_ATTRIBUTE_ROUTES.FUEL_TYPE_BY_ID, payload, { params: { id } }) + } + + async destroyFuelType(id: string) { + return this.delete(VEHICLE_ATTRIBUTE_ROUTES.FUEL_TYPE_BY_ID, { params: { id } }) + } + + // ── Transmissions ── + async listTransmissions(query?: ApiListQueryParams) { + return this.get(VEHICLE_ATTRIBUTE_ROUTES.TRANSMISSIONS, query ? { query } as never : undefined) + } + + async createTransmission(payload: ApiRequestBody) { + return this.post(VEHICLE_ATTRIBUTE_ROUTES.TRANSMISSIONS, payload) + } + + async updateTransmission(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_ATTRIBUTE_ROUTES.TRANSMISSION_BY_ID, payload, { params: { id } }) + } + + async destroyTransmission(id: string) { + return this.delete(VEHICLE_ATTRIBUTE_ROUTES.TRANSMISSION_BY_ID, { params: { id } }) + } + + // ── Colors ── + async listColors(query?: ApiListQueryParams) { + return this.get(VEHICLE_ATTRIBUTE_ROUTES.COLORS, query ? { query } as never : undefined) + } + + async createColor(payload: ApiRequestBody) { + return this.post(VEHICLE_ATTRIBUTE_ROUTES.COLORS, payload) + } + + async updateColor(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_ATTRIBUTE_ROUTES.COLOR_BY_ID, payload, { params: { id } }) + } + + async destroyColor(id: string) { + return this.delete(VEHICLE_ATTRIBUTE_ROUTES.COLOR_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/vehicle-documents.ts b/packages/api/src/clients/vehicle-documents.ts new file mode 100644 index 0000000..0a9550e --- /dev/null +++ b/packages/api/src/clients/vehicle-documents.ts @@ -0,0 +1,69 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const VEHICLE_DOCUMENT_ROUTES = { + DOCUMENT_TYPES: "/api/document-types", + DOCUMENT_TYPE_BY_ID: "/api/document-types/{id}", + DOCUMENTS: "/api/vehicle-documents", + DOCUMENT_BY_ID: "/api/vehicle-documents/{id}", + MILEAGE: "/api/vehicle-mile-and-kms", + MILEAGE_BY_ID: "/api/vehicle-mile-and-kms/{id}", +} as const satisfies Record + +export class VehicleDocumentsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + // ── Document Types ── + async listDocumentTypes(query?: ApiListQueryParams) { + return this.get(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_TYPES, query ? { query } as never : undefined) + } + + async createDocumentType(payload: ApiRequestBody) { + return this.post(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_TYPES, payload) + } + + async updateDocumentType(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_TYPE_BY_ID, payload, { params: { id } }) + } + + async destroyDocumentType(id: string) { + return this.delete(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_TYPE_BY_ID, { params: { id } }) + } + + // ── Vehicle Documents ── + async listDocuments(query?: ApiListQueryParams) { + return this.get(VEHICLE_DOCUMENT_ROUTES.DOCUMENTS, query ? { query } as never : undefined) + } + + async createDocument(payload: ApiRequestBody) { + return this.post(VEHICLE_DOCUMENT_ROUTES.DOCUMENTS, payload) + } + + async updateDocument(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_BY_ID, payload, { params: { id } }) + } + + async destroyDocument(id: string) { + return this.delete(VEHICLE_DOCUMENT_ROUTES.DOCUMENT_BY_ID, { params: { id } }) + } + + // ── Mileage ── + async listMileage(query?: ApiListQueryParams) { + return this.get(VEHICLE_DOCUMENT_ROUTES.MILEAGE, query ? { query } as never : undefined) + } + + async createMileage(payload: ApiRequestBody) { + return this.post(VEHICLE_DOCUMENT_ROUTES.MILEAGE, payload) + } + + async updateMileage(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_DOCUMENT_ROUTES.MILEAGE_BY_ID, payload, { params: { id } }) + } + + async destroyMileage(id: string) { + return this.delete(VEHICLE_DOCUMENT_ROUTES.MILEAGE_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/clients/vehicles.ts b/packages/api/src/clients/vehicles.ts new file mode 100644 index 0000000..160d7b4 --- /dev/null +++ b/packages/api/src/clients/vehicles.ts @@ -0,0 +1,55 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const VEHICLE_ROUTES = { + INDEX: "/api/vehicles", + BY_ID: "/api/vehicles/{id}", + EXPORT: "/api/vehicles/export", + IMPORT: "/api/vehicles/import", + GET_OWNERS: "/api/get-vehicle-owners", + LINK_CUSTOMER: "/api/link-customer-to-vehicle", + UNLINK_CUSTOMER: "/api/unlink-customer-from-vehicle", +} as const satisfies Record + +export class VehiclesClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(VEHICLE_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(VEHICLE_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(VEHICLE_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(VEHICLE_ROUTES.BY_ID, { params: { id } }) + } + + async export() { + return this.get(VEHICLE_ROUTES.EXPORT) + } + + async import(payload: ApiRequestBody) { + return this.post(VEHICLE_ROUTES.IMPORT, payload) + } + + async getOwners() { + return this.get(VEHICLE_ROUTES.GET_OWNERS) + } + + async linkCustomer(payload: ApiRequestBody) { + return this.post(VEHICLE_ROUTES.LINK_CUSTOMER, payload) + } + + async unlinkCustomer(payload: ApiRequestBody) { + return this.post(VEHICLE_ROUTES.UNLINK_CUSTOMER, payload) + } +} diff --git a/packages/api/src/clients/vendors.ts b/packages/api/src/clients/vendors.ts new file mode 100644 index 0000000..04e4bf9 --- /dev/null +++ b/packages/api/src/clients/vendors.ts @@ -0,0 +1,45 @@ +import { ApiClient, type ApiClientOptions } from "../infra/client" +import type { ApiPath, ApiRequestBody } from "../infra/types" +import type { ApiListQueryParams } from "../contracts/types" + +export const VENDOR_ROUTES = { + INDEX: "/api/vendors", + BY_ID: "/api/vendors/{id}", + TOGGLE_STATUS: "/api/toggle-vendor-status", + CREATE_ADDRESS: "/api/create-vendor-address", + ADDRESS_BY_ID: "/api/vendor-address/{id}", +} as const satisfies Record + +export class VendorsClient extends ApiClient { + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions) { + super(baseUrl, defaultOptions) + } + + async list(query?: ApiListQueryParams) { + return this.get(VENDOR_ROUTES.INDEX, query ? { query } as never : undefined) + } + + async create(payload: ApiRequestBody) { + return this.post(VENDOR_ROUTES.INDEX, payload) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(VENDOR_ROUTES.BY_ID, payload, { params: { id } }) + } + + async destroy(id: string) { + return this.delete(VENDOR_ROUTES.BY_ID, { params: { id } }) + } + + async toggleStatus(payload: ApiRequestBody) { + return this.post(VENDOR_ROUTES.TOGGLE_STATUS, payload) + } + + async createAddress(payload: ApiRequestBody) { + return this.post(VENDOR_ROUTES.CREATE_ADDRESS, payload) + } + + async getAddress(id: string) { + return this.get(VENDOR_ROUTES.ADDRESS_BY_ID, { params: { id } }) + } +} diff --git a/packages/api/src/contracts/crud.ts b/packages/api/src/contracts/crud.ts new file mode 100644 index 0000000..e033451 --- /dev/null +++ b/packages/api/src/contracts/crud.ts @@ -0,0 +1,8 @@ +import { ApiBaseResponse, ApiListQueryParams } from "./types" + +export interface CrudOperations { + list: (params: ApiListQueryParams) => Promise> + create: (payload: unknown) => Promise> + update: (id: string, payload: unknown) => Promise> + destroy: (id: string) => Promise> +} \ No newline at end of file diff --git a/packages/api/src/contracts/types.ts b/packages/api/src/contracts/types.ts new file mode 100644 index 0000000..fa7d84d --- /dev/null +++ b/packages/api/src/contracts/types.ts @@ -0,0 +1,19 @@ +export type ApiBaseResponse = { + data: T; + meta: { + current_page: number, + last_page: number, + per_page: number, + total: number, + from: number, + to: number + } +} + +export type ApiListQueryParams = { + page?: number; + per_page?: number; + sort_by?: string; + sort_order?: 'asc' | 'desc'; + [key: string]: any; // For additional filters +} \ No newline at end of file diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 0000000..2fed86a --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,13 @@ +// ── Infrastructure ── +export * from "./infra/index" + +// ── Contracts ── +export * from "./contracts/types" + +// ── Domain Clients ── +export * from "./clients/index" + +// ── Factory ── +export { createApi, api } from "./api" + + \ No newline at end of file diff --git a/packages/api/src/infra/client.ts b/packages/api/src/infra/client.ts new file mode 100644 index 0000000..d6e656f --- /dev/null +++ b/packages/api/src/infra/client.ts @@ -0,0 +1,269 @@ +import type { + ApiPath, + ApiPathByMethod, + ApiPathParams, + ApiQueryParams, + ApiRequestBody, + ApiResponse, +} from "./types" +import createClient from "openapi-fetch" +import type { paths } from "../../types/index" + +type HttpMethod = "get" | "post" | "put" | "delete" | "patch" + +export type ApiClientOptions = { + headers?: Record +} + +type ApiRequestOptions = + Omit & { + params?: ApiPathParams extends never ? never : ApiPathParams + query?: ApiQueryParams extends never ? never : ApiQueryParams + body?: ApiRequestBody extends never ? never : ApiRequestBody + } + +type LaravelValidationErrors = Record + +type LaravelErrorPayload = { + success?: boolean + message?: string + data?: unknown + errors?: LaravelValidationErrors | string[] | Record | null + pagination?: Record | null +} + +export class ApiError extends Error { + public readonly name = "ApiError" + + constructor( + public readonly status: number, + public readonly statusText: string, + public readonly endpoint: string, + public readonly method: string, + public readonly payload?: LaravelErrorPayload, + ) { + super(payload?.message ?? `${method.toUpperCase()} ${endpoint} failed with ${status} ${statusText}`.trim()) + } + + get validationErrors(): LaravelValidationErrors | undefined { + return this.payload?.errors && !Array.isArray(this.payload.errors) + ? (this.payload.errors as LaravelValidationErrors) + : undefined + } +} + +export class ApiClient { + private client + + constructor( + protected baseUrl: string = process.env.NEXT_PUBLIC_API_URL ?? "", + protected defaultOptions: ApiClientOptions = {}, + ) { + this.client = createClient({ + baseUrl: `${this.normalizeBaseUrl(baseUrl)}/`, + }) + } + + async request( + endpoint: Path, + method: Method, + options: ApiRequestOptions = {} as ApiRequestOptions, + ): Promise> { + const ep = endpoint as never + const opts = options as never + const body = (options as Record).body as never + + switch (method) { + case "get": + return this.get(ep, opts) as Promise> + case "post": + return this.post(ep, body, opts) as Promise> + case "put": + return this.put(ep, body, opts) as Promise> + case "delete": + return this.delete(ep, opts) as Promise> + case "patch": + return this.patch(ep, body, opts) as Promise> + default: + throw new ApiError(0, "Unsupported Method", endpoint, method, { + message: `Unsupported method: ${String(method)}`, + }) + } + } + + async get>( + endpoint: Path, + options: ApiRequestOptions = {} as ApiRequestOptions, + ): Promise> { + const requestOptions = this.toFetchOptions(options) + + try { + const { data, error, response } = await this.client.GET(endpoint, requestOptions as never) + return this.resolveResult(endpoint, "get", data, error, response) + } catch (err) { + if (err instanceof ApiError) throw err + throw this.createNetworkError(endpoint, "get") + } + } + + async post>( + endpoint: Path, + body: ApiRequestBody extends never ? undefined : ApiRequestBody, + options: Omit, "body"> = {} as Omit, "body">, + ): Promise> { + const requestOptions = this.toFetchOptions({ ...options, body }) + + try { + const { data, error, response } = await this.client.POST(endpoint, requestOptions as never) + return this.resolveResult(endpoint, "post", data, error, response) + } catch (err) { + if (err instanceof ApiError) throw err + throw this.createNetworkError(endpoint, "post") + } + } + + async put>( + endpoint: Path, + body: ApiRequestBody extends never ? undefined : ApiRequestBody, + options: Omit, "body"> = {} as Omit, "body">, + ): Promise> { + const requestOptions = this.toFetchOptions({ ...options, body }) + + try { + const { data, error, response } = await this.client.PUT(endpoint, requestOptions as never) + return this.resolveResult(endpoint, "put", data, error, response) + } catch (err) { + if (err instanceof ApiError) throw err + throw this.createNetworkError(endpoint, "put") + } + } + + async delete>( + endpoint: Path, + options: ApiRequestOptions = {} as ApiRequestOptions, + ): Promise> { + const requestOptions = this.toFetchOptions(options) + + try { + const { data, error, response } = await this.client.DELETE(endpoint, requestOptions as never) + return this.resolveResult(endpoint, "delete", data, error, response) + } catch (err) { + if (err instanceof ApiError) throw err + throw this.createNetworkError(endpoint, "delete") + } + } + + async patch>( + endpoint: Path, + body: ApiRequestBody extends never ? undefined : ApiRequestBody, + options: Omit, "body"> = {} as Omit, "body">, + ): Promise> { + const requestOptions = this.toFetchOptions({ ...options, body }) + + try { + const { data, error, response } = await this.client.PATCH(endpoint, requestOptions as never) + return this.resolveResult(endpoint, "patch", data, error, response) + } catch (err) { + if (err instanceof ApiError) throw err + throw this.createNetworkError(endpoint, "patch") + } + } + + protected normalizeBaseUrl(baseUrl: string): string { + return baseUrl.replace(/\/+$/, "") + } + + protected async postFormData(endpoint: string, formData: FormData): Promise { + const url = `${this.normalizeBaseUrl(this.baseUrl)}${endpoint}` + const headers = new Headers(this.defaultOptions.headers as Record) + headers.set("Accept", "application/json") + // Content-Type is intentionally omitted — fetch sets multipart/form-data + boundary automatically + + const response = await fetch(url, { method: "POST", headers, body: formData }) + const text = await response.text() + const data = text ? JSON.parse(text) : null + + if (!response.ok) { + throw new ApiError(response.status, response.statusText, endpoint, "post", data) + } + + return data + } + + private toFetchOptions( + options: ApiRequestOptions, + ): Record { + const { params, query, body, headers, ...requestInit } = options as Record + const requestOptions: Record = { + ...requestInit, + headers: this.withDefaultHeaders(headers as HeadersInit | undefined), + } + + if (params || query) { + requestOptions.params = { + ...(params ? { path: params } : {}), + ...(query ? { query } : {}), + } + } + + if (body !== undefined) { + requestOptions.body = body + } + + return requestOptions + } + + private withDefaultHeaders(headers?: HeadersInit): Headers { + const finalHeaders = new Headers(this.defaultOptions.headers) + finalHeaders.set("Accept", "application/json") + if (headers) { + new Headers(headers).forEach((value, key) => finalHeaders.set(key, value)) + } + return finalHeaders + } + + private resolveResult( + endpoint: Path, + method: Method, + data: unknown, + error: unknown, + response: Response, + ): ApiResponse { + if (error !== undefined) { + throw new ApiError( + response.status, + response.statusText, + endpoint, + method, + this.normalizeErrorPayload(error), + ) + } + + return data as ApiResponse + } + + private normalizeErrorPayload(error: unknown): LaravelErrorPayload | undefined { + if (!error || typeof error !== "object") { + return undefined + } + + if ("message" in error || "errors" in error) { + return error as LaravelErrorPayload + } + + return { + message: "Request failed", + data: error, + } + } + + private createNetworkError(endpoint: string, method: string): ApiError { + return new ApiError( + 0, + "Network Error", + endpoint, + method, + { message: "Network error occurred. Please check your connection and try again." }, + ) + } +} diff --git a/packages/api/src/infra/crud-client.ts b/packages/api/src/infra/crud-client.ts new file mode 100644 index 0000000..cda2a23 --- /dev/null +++ b/packages/api/src/infra/crud-client.ts @@ -0,0 +1,58 @@ +import { ApiClient, type ApiClientOptions } from "./client" +import type { ApiPathByMethod, ApiQueryParams, ApiRequestBody, ApiResponse } from "./types" +import type { ApiListQueryParams } from "../contracts/types" + +export const DEFAULT_PER_PAGE = 10 + +type CrudIndexRoute = ApiPathByMethod<"get"> & ApiPathByMethod<"post"> +type CrudByIdRoute = ApiPathByMethod<"put"> & ApiPathByMethod<"delete"> + +export abstract class CrudClient< + IndexRoute extends CrudIndexRoute, + ByIdRoute extends CrudByIdRoute, +> extends ApiClient { + + + constructor(baseUrl?: string, defaultOptions?: ApiClientOptions, + + public indexRoute?: IndexRoute, + public byIdRoute?: ByIdRoute) { + + super(baseUrl, defaultOptions) + + } + + async list(query?: ApiListQueryParams): Promise> { + return this.get(this.indexRoute as IndexRoute, query ? { query } as never : undefined) + } + + async show(id: string) { + return this.get(this.byIdRoute as ByIdRoute & ApiPathByMethod<"get">, { params: { id } } as never) + } + + async create(payload: ApiRequestBody) { + return this.post(this.indexRoute as IndexRoute, payload as never) + } + + async update(id: string, payload: ApiRequestBody) { + return this.put(this.byIdRoute as ByIdRoute, payload as never, { params: { id } } as never) + } + + async destroy(id: string) { + return this.delete(this.byIdRoute as ByIdRoute, { params: { id } } as never) + } +} + +export type BaseCrudItem = { id: number } + +/** Extract the list (GET index) response type from a CrudClient subclass. */ +export type CrudListResponse = C extends CrudClient ? ApiResponse : never + +/** Extract the show (GET by-id) response type from a CrudClient subclass. */ +export type CrudShowResponse = C extends CrudClient ? ApiResponse : never + +/** Extract a single item type from the `data` array of a CrudClient list response. */ +export type CrudListItem = CrudListResponse extends { data?: (infer Item)[] } ? Item : never + +/** Extract the query-parameter type accepted by a CrudClient's `list()` method. */ +export type CrudListParams = C extends CrudClient ? ApiQueryParams : never diff --git a/packages/api/src/infra/index.ts b/packages/api/src/infra/index.ts new file mode 100644 index 0000000..5448454 --- /dev/null +++ b/packages/api/src/infra/index.ts @@ -0,0 +1,22 @@ +export { + type ApiPaths, + type ApiComponents, + type ApiOperations, + type ApiPath, + type ApiMethod, + type ApiPathByMethod, + type ApiPathParams, + type ApiQueryParams, + type ApiHeaderParams, + type ApiCookieParams, + type ApiRequestBody, + type ApiResponse, + type ApiOperationId, + type ApiOperationRequestBody, + type ApiOperationResponse, +} from "./types" + +export { ApiClient, ApiError, type ApiClientOptions } from "./client" +export { DEFAULT_PER_PAGE } from "./crud-client" +export * from "./crud-client" +export type { AuthUser } from "./token" diff --git a/packages/api/src/infra/token.ts b/packages/api/src/infra/token.ts new file mode 100644 index 0000000..ff998fd --- /dev/null +++ b/packages/api/src/infra/token.ts @@ -0,0 +1,6 @@ +export type AuthUser = { + id: number + name: string + email: string + [key: string]: string | number +} diff --git a/packages/api/src/infra/types.ts b/packages/api/src/infra/types.ts new file mode 100644 index 0000000..74b5169 --- /dev/null +++ b/packages/api/src/infra/types.ts @@ -0,0 +1,112 @@ +import type { components, operations, paths } from "../../types/index" + +type HttpMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace" +type NotNeverOrUndefined = [Exclude] extends [never] ? never : Exclude + +type OperationFor = Method extends keyof paths[Path] + ? NotNeverOrUndefined + : never + +type WithContent = T extends { content: infer Content } ? Content : never +type JsonContent = T extends { "application/json": infer Payload } ? Payload : never +type RequestContent = + T extends { "application/json": infer Payload } ? Payload : + T extends { "*/*": infer Payload } ? Payload : + T extends { "multipart/form-data": infer Payload } ? Payload : + never + +type ResponseByCode = Code extends keyof Responses + ? Responses[Code] + : never + +type SuccessResponse = + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ResponseByCode + | ("default" extends keyof Responses ? Responses["default"] : never) + +// ── Re-exports ── +export type ApiPaths = paths +export type ApiComponents = components +export type ApiOperations = operations + +// ── Path & Method helpers ── +export type ApiPath = keyof paths +export type ApiMethod = { + [Method in HttpMethod]: OperationFor extends never ? never : Method +}[HttpMethod] +export type ApiPathByMethod = { + [Path in ApiPath]: OperationFor extends never ? never : Path +}[ApiPath] + +// ── Parameter helpers ── +export type ApiPathParams = + OperationFor extends { parameters: { path: infer Params } } + ? Params + : never + +export type ApiQueryParams = + OperationFor extends { parameters: { query: infer Params } } + ? Params + : never + +export type ApiHeaderParams = + OperationFor extends { parameters: { header: infer Params } } + ? Params + : never + +export type ApiCookieParams = + OperationFor extends { parameters: { cookie: infer Params } } + ? Params + : never + +// ── Request / Response body helpers ── +export type ApiRequestBody = + RequestContent< + WithContent< + OperationFor extends { requestBody?: infer RequestBody } + ? RequestBody + : never + > + > + +export type ApiResponse = + JsonContent< + WithContent< + SuccessResponse< + OperationFor extends { responses: infer Responses } + ? Responses + : never + > + > + > + +// ── Operation-level helpers ── +export type ApiOperationId = keyof operations + +export type ApiOperationRequestBody = + RequestContent< + WithContent< + operations[OperationId] extends { requestBody?: infer RequestBody } + ? RequestBody + : never + > + > + +export type ApiOperationResponse = + JsonContent< + WithContent< + SuccessResponse< + operations[OperationId] extends { responses: infer Responses } + ? Responses + : never + > + > + > diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts new file mode 100644 index 0000000..2796244 --- /dev/null +++ b/packages/api/src/server.ts @@ -0,0 +1,24 @@ +import "server-only" +import { cookies } from "next/headers" +import { createApi } from "./api" +import type { AuthUser } from "./infra/token" + +export async function getServerApi() { + const cookieStore = await cookies() + const token = cookieStore.get("auth_token")?.value + + return createApi( + token ? { headers: { Authorization: `Bearer ${token}` } } : undefined, + ) +} + +export async function getServerUser(): Promise { + const cookieStore = await cookies() + const raw = cookieStore.get("auth_user")?.value + if (!raw) return null + try { + return JSON.parse(decodeURIComponent(raw)) as AuthUser + } catch { + return null + } +} diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json new file mode 100644 index 0000000..87b7bd8 --- /dev/null +++ b/packages/api/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@repo/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "Bundler" + }, + "include": ["src/**/*.ts", "types/**/*.ts"] +} diff --git a/packages/api/types/index.ts b/packages/api/types/index.ts new file mode 100644 index 0000000..ac8e2b4 --- /dev/null +++ b/packages/api/types/index.ts @@ -0,0 +1,22335 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Login */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "email": "admin@admin.com", + * "password": "12345678" + * } + */ + "application/json": { + email?: string; + password?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "token": "1|YOUR_SANCTUM_TOKEN", + * "user": { + * "id": 1, + * "name": "Admin", + * "email": "admin@admin.com" + * } + * } + */ + "application/json": { + token?: string; + user?: { + id?: number; + name?: string; + email?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/profile": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Profile */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": { + * "id": 1, + * "name": "Admin", + * "email": "admin@admin.com", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + email?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/logout": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Logout */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Logged out successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/referral-sources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": { + * "current_page": 1, + * "data": [ + * { + * "id": 1, + * "name": "Website", + * "is_default": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "first_page_url": "http://localhost:8000/api/referral-sources?page=1", + * "from": 1, + * "last_page": 1, + * "last_page_url": "http://localhost:8000/api/referral-sources?page=1", + * "links": [], + * "next_page_url": null, + * "path": "http://localhost:8000/api/referral-sources", + * "per_page": 10, + * "prev_page_url": null, + * "to": 1, + * "total": 1 + * } + * } + */ + "application/json": { + data?: { + current_page?: number; + data?: { + id?: number; + name?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + first_page_url?: string; + from?: number; + last_page?: number; + last_page_url?: string; + links?: unknown[]; + next_page_url?: string | null; + path?: string; + per_page?: number; + prev_page_url?: string | null; + to?: number; + total?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Website" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Referral source created successfully.", + * "data": { + * "id": 2, + * "name": "Walk-in", + * "is_default": false, + * "created_at": "2026-03-23T12:05:00.000000Z", + * "updated_at": "2026-03-23T12:05:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/referral-sources/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Website" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Referral source updated successfully.", + * "data": { + * "id": 1, + * "name": "Website Ads", + * "is_default": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Referral source deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-referral-source": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default referral source updated successfully.", + * "data": { + * "id": 1, + * "name": "Website", + * "is_default": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:15:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/customers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "customer_type_id": 1, + * "salutation": "Mr", + * "first_name": "John", + * "last_name": "Doe", + * "company_name": "Doe Holdings", + * "email": "john@example.com", + * "phone": "0501234567", + * "alternate_phone": "0551234567", + * "opening_balance": 0, + * "credit_limit": 5000, + * "website": "https://example.com", + * "referral_source_id": 1, + * "payment_terms_id": 1, + * "address_line_1": "Street 10", + * "address_line_2": "Near Central Plaza", + * "country_id": 1, + * "state_id": 1, + * "city": "Dubai", + * "zip_code": "00000", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "customer_type": { + * "id": 1, + * "name": "Retail" + * }, + * "referral_source": { + * "id": 1, + * "name": "Website" + * }, + * "payment_term": { + * "id": 1, + * "title": "Net 30", + * "days": 30 + * }, + * "country": { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * }, + * "state": { + * "id": 1, + * "name": "Dubai", + * "code": "DU" + * } + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + customer_type_id?: number; + salutation?: string; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + phone?: string; + alternate_phone?: string; + opening_balance?: number; + credit_limit?: number; + website?: string; + referral_source_id?: number; + payment_terms_id?: number; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + customer_type?: { + id?: number; + name?: string; + }; + referral_source?: { + id?: number; + name?: string; + }; + payment_term?: { + id?: number; + title?: string; + days?: number; + }; + country?: { + id?: number; + name?: string; + code?: string; + }; + state?: { + id?: number; + name?: string; + code?: string; + }; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "customer_type_id": 1, + * "salutation": "Mr", + * "first_name": "John", + * "last_name": "Doe", + * "company_name": "Doe Holdings", + * "email": "john@example.com", + * "phone": "0501234567", + * "alternate_phone": "0551234567", + * "referral_source_id": 1, + * "payment_terms_id": 1, + * "address_line_1": "Street 10", + * "address_line_2": "Near Central Plaza", + * "country_id": 1, + * "state_id": 1, + * "city": "Dubai", + * "zip_code": "00000" + * } + */ + "application/json": { + customer_type_id?: number; + salutation?: string; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + phone?: string; + alternate_phone?: string; + referral_source_id?: number; + payment_terms_id?: number; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Customer created successfully.", + * "data": { + * "id": 2, + * "customer_type_id": 1, + * "salutation": "Mr", + * "first_name": "John", + * "last_name": "Doe", + * "company_name": "Doe Holdings", + * "email": "john@example.com", + * "phone": "0501234567", + * "alternate_phone": "0551234567", + * "opening_balance": 0, + * "credit_limit": 5000, + * "website": "https://example.com", + * "referral_source_id": 1, + * "payment_terms_id": 1, + * "address_line_1": "Street 10", + * "address_line_2": "Near Central Plaza", + * "country_id": 1, + * "state_id": 1, + * "city": "Dubai", + * "zip_code": "00000", + * "created_at": "2026-03-23T12:20:00.000000Z", + * "updated_at": "2026-03-23T12:20:00.000000Z", + * "customer_type": { + * "id": 1, + * "name": "Retail" + * }, + * "referral_source": { + * "id": 1, + * "name": "Website" + * }, + * "payment_term": { + * "id": 1, + * "title": "Net 30", + * "days": 30 + * }, + * "country": { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * }, + * "state": { + * "id": 1, + * "name": "Dubai", + * "code": "DU" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + customer_type_id?: number; + salutation?: string; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + phone?: string; + alternate_phone?: string; + opening_balance?: number; + credit_limit?: number; + website?: string; + referral_source_id?: number; + payment_terms_id?: number; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + customer_type?: { + id?: number; + name?: string; + }; + referral_source?: { + id?: number; + name?: string; + }; + payment_term?: { + id?: number; + title?: string; + days?: number; + }; + country?: { + id?: number; + name?: string; + code?: string; + }; + state?: { + id?: number; + name?: string; + code?: string; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/customers/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "first_name": "John", + * "last_name": "Doe" + * } + */ + "application/json": { + first_name?: string; + last_name?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Customer updated successfully.", + * "data": { + * "id": 1, + * "customer_type_id": 1, + * "salutation": "Mr", + * "first_name": "John", + * "last_name": "Doe", + * "company_name": "Doe Holdings", + * "email": "john@example.com", + * "phone": "0501234567", + * "alternate_phone": "0551234567", + * "opening_balance": 0, + * "credit_limit": 5000, + * "website": "https://example.com", + * "referral_source_id": 1, + * "payment_terms_id": 1, + * "address_line_1": "Street 10", + * "address_line_2": "Near Central Plaza", + * "country_id": 1, + * "state_id": 1, + * "city": "Dubai", + * "zip_code": "00000", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:30:00.000000Z", + * "customer_type": { + * "id": 1, + * "name": "Retail" + * }, + * "referral_source": { + * "id": 1, + * "name": "Website" + * }, + * "payment_term": { + * "id": 1, + * "title": "Net 30", + * "days": 30 + * }, + * "country": { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * }, + * "state": { + * "id": 1, + * "name": "Dubai", + * "code": "DU" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + customer_type_id?: number; + salutation?: string; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + phone?: string; + alternate_phone?: string; + opening_balance?: number; + credit_limit?: number; + website?: string; + referral_source_id?: number; + payment_terms_id?: number; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + customer_type?: { + id?: number; + name?: string; + }; + referral_source?: { + id?: number; + name?: string; + }; + payment_term?: { + id?: number; + title?: string; + days?: number; + }; + country?: { + id?: number; + name?: string; + code?: string; + }; + state?: { + id?: number; + name?: string; + code?: string; + }; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Customer deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/customers/export": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Export */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Customers export generated successfully.", + * "data": { + * "file_name": "customers-2026-03-23-123000.xlsx" + * } + * } + */ + "application/json": { + message?: string; + data?: { + file_name?: string; + }; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/customers/import": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Import */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Customer import completed successfully.", + * "data": { + * "imported_count": 10, + * "failed_count": 1, + * "failed_rows": [ + * { + * "row": 4, + * "errors": [ + * "The email has already been taken." + * ], + * "values": { + * "email": "dup@example.com" + * } + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + imported_count?: number; + failed_count?: number; + failed_rows?: { + row?: number; + errors?: string[]; + values?: { + email?: string; + }; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/customer-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Retail" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/countries": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Countries */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * }, + * { + * "id": 2, + * "name": "Saudi Arabia", + * "code": "SA" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + code?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/states": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** States */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "country_id": 1, + * "name": "Dubai", + * "code": "DU", + * "country": { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * } + * }, + * { + * "id": 2, + * "country_id": 1, + * "name": "Abu Dhabi", + * "code": "AZ", + * "country": { + * "id": 1, + * "name": "United Arab Emirates", + * "code": "AE" + * } + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + country_id?: number; + name?: string; + code?: string; + country?: { + id?: number; + name?: string; + code?: string; + }; + }[]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-terms": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "image": null, + * "image_url": null, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_number": null, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "reg_date": null, + * "mfg_date": null, + * "parked_at": null, + * "mileage": "10000", + * "owners_number": "1", + * "front_tire_size": null, + * "rear_tire_size": null, + * "note": "New vehicle", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "vehicle_body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "vehicle_fuel_type": { + * "id": 1, + * "title": "Petrol" + * }, + * "vehicle_transmission": { + * "id": 1, + * "title": "Automatic" + * }, + * "vehicle_color": { + * "id": 1, + * "title": "Red", + * "code": "RD" + * } + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + image?: string | null; + image_url?: string | null; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_number?: string | null; + engine_size?: string; + drivetrain?: string; + reg_date?: string | null; + mfg_date?: string | null; + parked_at?: string | null; + mileage?: string; + owners_number?: string; + front_tire_size?: string | null; + rear_tire_size?: string | null; + note?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + vehicle_body_type?: { + id?: number; + title?: string; + }; + vehicle_fuel_type?: { + id?: number; + title?: string; + }; + vehicle_transmission?: { + id?: number; + title?: string; + }; + vehicle_color?: { + id?: number; + title?: string; + code?: string; + }; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Net 30" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-terms/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Net 30" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-payment-term": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "Main Workshop", + * "shop_type": "Car", + * "note": "General automotive services", + * "inspection": "shop_types/inspection/inspection-template.pdf", + * "image": "shop_types/image/shop-type-car.jpg", + * "is_default": true, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + shop_type?: string; + note?: string; + inspection?: string; + image?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + title?: string; + shop_type?: string; + note?: string; + is_default?: string; + /** Format: binary */ + inspection?: string; + /** Format: binary */ + image?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop type created successfully.", + * "data": { + * "id": 1, + * "title": "Main Workshop", + * "shop_type": "Car", + * "note": "General automotive services", + * "inspection": "shop_types/inspection/inspection-template.pdf", + * "image": "shop_types/image/shop-type-car.jpg", + * "is_default": true, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + shop_type?: string; + note?: string; + inspection?: string; + image?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Update */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + _method?: string; + title?: string; + shop_type?: string; + note?: string; + is_default?: string; + /** Format: binary */ + inspection?: string; + /** Format: binary */ + image?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop type updated successfully.", + * "data": { + * "id": 1, + * "title": "Main Workshop Updated", + * "shop_type": "Car", + * "note": "Updated note", + * "inspection": "shop_types/inspection/inspection-template-v2.pdf", + * "image": "shop_types/image/shop-type-car-v2.jpg", + * "is_default": false, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + shop_type?: string; + note?: string; + inspection?: string; + image?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop type deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-body-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "labor_name": "Oil Change", + * "service_code": "SVC-001", + * "unit_type_id": 1, + * "labor_matrix": "Standard", + * "description": "Full synthetic oil change", + * "department_id": 1, + * "sales_information": false, + * "rate_type": null, + * "labor_rate_id": null, + * "labor_hours": null, + * "sales_chart_of_account": null, + * "selling_price": "75.00", + * "purchase_information": false, + * "purchase_chart_of_account": null, + * "purchase_preferred_vendor_id": null, + * "purchase_price": null, + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "category": { + * "id": 1, + * "title": "Oil & Maintenance" + * }, + * "unit_type": { + * "id": 1, + * "title": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * }, + * "labor_rate": null + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + labor_name?: string; + service_code?: string; + unit_type_id?: number; + labor_matrix?: string; + description?: string; + department_id?: number; + sales_information?: boolean; + rate_type?: string | null; + labor_rate_id?: string | null; + labor_hours?: string | null; + sales_chart_of_account?: string | null; + selling_price?: string; + purchase_information?: boolean; + purchase_chart_of_account?: string | null; + purchase_preferred_vendor_id?: string | null; + purchase_price?: string | null; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + title?: string; + }; + department?: { + id?: number; + name?: string; + }; + labor_rate?: string | null; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Sedan" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "labor_name": "Oil Change", + * "service_code": "SVC-001", + * "unit_type_id": 1, + * "labor_matrix": "Standard", + * "description": "Full synthetic oil change", + * "department_id": 1, + * "sales_information": false, + * "rate_type": null, + * "labor_rate_id": null, + * "labor_hours": null, + * "sales_chart_of_account": null, + * "selling_price": "75.00", + * "purchase_information": false, + * "purchase_chart_of_account": null, + * "purchase_preferred_vendor_id": null, + * "purchase_price": null, + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "category": { + * "id": 1, + * "title": "Oil & Maintenance" + * }, + * "unit_type": { + * "id": 1, + * "title": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * }, + * "labor_rate": null + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + labor_name?: string; + service_code?: string; + unit_type_id?: number; + labor_matrix?: string; + description?: string; + department_id?: number; + sales_information?: boolean; + rate_type?: string | null; + labor_rate_id?: string | null; + labor_hours?: string | null; + sales_chart_of_account?: string | null; + selling_price?: string; + purchase_information?: boolean; + purchase_chart_of_account?: string | null; + purchase_preferred_vendor_id?: string | null; + purchase_price?: string | null; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + title?: string; + }; + department?: { + id?: number; + name?: string; + }; + labor_rate?: string | null; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-body-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Sedan" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "labor_name": "Oil Change Premium", + * "service_code": "SVC-001", + * "unit_type_id": 1, + * "labor_matrix": "Standard", + * "description": "Full synthetic oil change", + * "department_id": 1, + * "sales_information": false, + * "rate_type": null, + * "labor_rate_id": null, + * "labor_hours": null, + * "sales_chart_of_account": null, + * "selling_price": "85.00", + * "purchase_information": false, + * "purchase_chart_of_account": null, + * "purchase_preferred_vendor_id": null, + * "purchase_price": null, + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "category": { + * "id": 1, + * "title": "Oil & Maintenance" + * }, + * "unit_type": { + * "id": 1, + * "title": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * }, + * "labor_rate": null + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + labor_name?: string; + service_code?: string; + unit_type_id?: number; + labor_matrix?: string; + description?: string; + department_id?: number; + sales_information?: boolean; + rate_type?: string | null; + labor_rate_id?: string | null; + labor_hours?: string | null; + sales_chart_of_account?: string | null; + selling_price?: string; + purchase_information?: boolean; + purchase_chart_of_account?: string | null; + purchase_preferred_vendor_id?: string | null; + purchase_price?: string | null; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + title?: string; + }; + department?: { + id?: number; + name?: string; + }; + labor_rate?: string | null; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-fuel-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "Gasoline", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Gasoline" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "title": "Gasoline", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-fuel-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Gasoline" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "title": "Gasoline", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-transmissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Automatic" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-transmissions/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Automatic" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-colors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Black" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-colors/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Black" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "mileage": "10000", + * "owners_number": "1", + * "note": "New vehicle" + * } + */ + "application/json": { + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_size?: string; + drivetrain?: string; + mileage?: string; + owners_number?: string; + note?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "image": null, + * "image_url": null, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_number": null, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "reg_date": null, + * "mfg_date": null, + * "parked_at": null, + * "mileage": "10000", + * "owners_number": "1", + * "front_tire_size": null, + * "rear_tire_size": null, + * "note": "New vehicle", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "vehicle_body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "vehicle_fuel_type": { + * "id": 1, + * "title": "Petrol" + * }, + * "vehicle_transmission": { + * "id": 1, + * "title": "Automatic" + * }, + * "vehicle_color": { + * "id": 1, + * "title": "Red", + * "code": "RD" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + image?: string | null; + image_url?: string | null; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_number?: string | null; + engine_size?: string; + drivetrain?: string; + reg_date?: string | null; + mfg_date?: string | null; + parked_at?: string | null; + mileage?: string; + owners_number?: string; + front_tire_size?: string | null; + rear_tire_size?: string | null; + note?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + vehicle_body_type?: { + id?: number; + title?: string; + }; + vehicle_fuel_type?: { + id?: number; + title?: string; + }; + vehicle_transmission?: { + id?: number; + title?: string; + }; + vehicle_color?: { + id?: number; + title?: string; + code?: string; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicles/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "mileage": "12000", + * "license_plate": "ABC-123" + * } + */ + "application/json": { + mileage?: string; + license_plate?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "image": null, + * "image_url": null, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_number": null, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "reg_date": null, + * "mfg_date": null, + * "parked_at": null, + * "mileage": "12000", + * "owners_number": "1", + * "front_tire_size": null, + * "rear_tire_size": null, + * "note": "New vehicle", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "vehicle_body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "vehicle_fuel_type": { + * "id": 1, + * "title": "Petrol" + * }, + * "vehicle_transmission": { + * "id": 1, + * "title": "Automatic" + * }, + * "vehicle_color": { + * "id": 1, + * "title": "Red", + * "code": "RD" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + image?: string | null; + image_url?: string | null; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_number?: string | null; + engine_size?: string; + drivetrain?: string; + reg_date?: string | null; + mfg_date?: string | null; + parked_at?: string | null; + mileage?: string; + owners_number?: string; + front_tire_size?: string | null; + rear_tire_size?: string | null; + note?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + vehicle_body_type?: { + id?: number; + title?: string; + }; + vehicle_fuel_type?: { + id?: number; + title?: string; + }; + vehicle_transmission?: { + id?: number; + title?: string; + }; + vehicle_color?: { + id?: number; + title?: string; + code?: string; + }; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicles/export": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Export */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "customer_type_id": 1, + * "salutation": "Mr", + * "first_name": "John", + * "last_name": "Doe", + * "email": "john@example.com", + * "phone": "0501234567", + * "alternate_phone": "0551234567", + * "address_line_1": "Street 10", + * "address_line_2": "Near Central Plaza", + * "country_id": 1, + * "state_id": 1, + * "city": "Dubai", + * "zip_code": "00000" + * } + * ], + * "pagination": { + * "current_page": 1, + * "first_page_url": "{{base_url}}/api/get-vehicle-owners?page=1", + * "from": 1, + * "last_page_url": "{{base_url}}/api/get-vehicle-owners?page=1", + * "next_page_url": null, + * "path": "{{base_url}}/api/get-vehicle-owners", + * "per_page": 10, + * "prev_page_url": null, + * "to": 1, + * "total": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + customer_type_id?: number; + salutation?: string; + first_name?: string; + last_name?: string; + email?: string; + phone?: string; + alternate_phone?: string; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + }[]; + pagination?: { + current_page?: number; + first_page_url?: string; + from?: number; + last_page_url?: string; + next_page_url?: string | null; + path?: string; + per_page?: number; + prev_page_url?: string | null; + to?: number; + total?: number; + }; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicles/import": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Import */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Import completed successfully.", + * "data": { + * "imported_count": 10, + * "failed_count": 1, + * "failed_rows": [ + * { + * "row": 4, + * "errors": [ + * "The service code has already been taken." + * ], + * "values": { + * "service_code": "SVC-001" + * } + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + imported_count?: number; + failed_count?: number; + failed_rows?: { + row?: number; + errors?: string[]; + values?: { + service_code?: string; + }; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/get-vehicle-owners": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Vehicle Owners */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/link-customer-to-vehicle": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Link Customer to Vehicle */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "customer_id": 1, + * "vehicle_id": 1 + * } + */ + "application/json": { + customer_id?: number; + vehicle_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "image": null, + * "image_url": null, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "mileage": "10000", + * "note": "New vehicle", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "customers": [ + * { + * "id": 1, + * "first_name": "John", + * "last_name": "Doe", + * "email": "john@example.com" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + image?: string | null; + image_url?: string | null; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_size?: string; + drivetrain?: string; + mileage?: string; + note?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + customers?: { + id?: number; + first_name?: string; + last_name?: string; + email?: string; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/unlink-customer-from-vehicle": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Unlink Customer from Vehicle */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "customer_id": 1, + * "vehicle_id": 1 + * } + */ + "application/json": { + customer_id?: number; + vehicle_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "vehicle_body_type_id": 1, + * "vehicle_fuel_type_id": 1, + * "vehicle_transmission_id": 1, + * "vehicle_color_id": 1, + * "image": null, + * "image_url": null, + * "make": "Toyota", + * "model": "Camry", + * "year": "2024", + * "sub_model": "LE", + * "license_plate": "ABC-123", + * "vin_number": "1HGBH41JXMN109186", + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "mileage": "10000", + * "note": "New vehicle", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "customers": [] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + vehicle_body_type_id?: number; + vehicle_fuel_type_id?: number; + vehicle_transmission_id?: number; + vehicle_color_id?: number; + image?: string | null; + image_url?: string | null; + make?: string; + model?: string; + year?: string; + sub_model?: string; + license_plate?: string; + vin_number?: string; + engine_size?: string; + drivetrain?: string; + mileage?: string; + note?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + customers?: unknown[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/document-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Registration" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/document-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Registration" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-documents": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "vehicle_id": 1, + * "document_type_id": 1 + * } + */ + "application/json": { + vehicle_id?: number; + document_type_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-documents/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** @example {} */ + "application/json": Record; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-mile-and-kms": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "vehicle_id": 1, + * "mileage": 50000 + * } + */ + "application/json": { + vehicle_id?: number; + mileage?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vehicle-mile-and-kms/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "mileage": 51000 + * } + */ + "application/json": { + mileage?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/departments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "name": "Mechanical", + * "assignment_type": "bays" + * } + */ + "application/json": { + name?: string; + assignment_type?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/departments/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "name": "Mechanical" + * } + */ + "application/json": { + name?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-favorite-department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-favorite-department": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/employees": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "first_name": "Jane", + * "last_name": "Smith", + * "email": "jane@example.com", + * "phone": "0501234567", + * "department_id": 1, + * "position": "Technician", + * "status": "active", + * "type": "employee", + * "track_attendance": true, + * "notify_owner_when_punch_in_out": false, + * "shop_calender_id": 1, + * "shop_timing_id": 1, + * "geo_fence_radius": 100, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:00:00.000000Z", + * "department": { + * "id": 1, + * "name": "Mechanical" + * }, + * "shop_calender": { + * "id": 1, + * "title": "Default Calendar" + * }, + * "shop_timing": { + * "id": 1, + * "title": "Regular Shift" + * }, + * "has_active_time_sheet": false, + * "active_time_sheet": null + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + first_name?: string; + last_name?: string; + email?: string; + phone?: string; + department_id?: number; + position?: string; + status?: string; + type?: string; + track_attendance?: boolean; + notify_owner_when_punch_in_out?: boolean; + shop_calender_id?: number; + shop_timing_id?: number; + geo_fence_radius?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + department?: { + id?: number; + name?: string; + }; + shop_calender?: { + id?: number; + title?: string; + }; + shop_timing?: { + id?: number; + title?: string; + }; + has_active_time_sheet?: boolean; + active_time_sheet?: string | null; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "first_name": "Jane", + * "last_name": "Smith", + * "email": "jane@example.com", + * "phone": "0501234567", + * "department_id": 1, + * "position": "Technician", + * "status": "active", + * "type": "employee", + * "track_attendance": true, + * "notify_owner_when_punch_in_out": false, + * "shop_calender_id": 1, + * "shop_timing_id": 1, + * "geo_fence_radius": 100 + * } + */ + "application/json": { + first_name?: string; + last_name?: string; + email?: string; + phone?: string; + department_id?: number; + position?: string; + status?: string; + type?: string; + track_attendance?: boolean; + notify_owner_when_punch_in_out?: boolean; + shop_calender_id?: number; + shop_timing_id?: number; + geo_fence_radius?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Employee created successfully.", + * "data": { + * "id": 1, + * "first_name": "Jane", + * "last_name": "Smith", + * "email": "jane@example.com", + * "phone": "0501234567", + * "department_id": 1, + * "position": "Technician", + * "status": "active", + * "type": "employee", + * "track_attendance": true, + * "notify_owner_when_punch_in_out": false, + * "shop_calender_id": 1, + * "shop_timing_id": 1, + * "geo_fence_radius": 100, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:00:00.000000Z", + * "department": { + * "id": 1, + * "name": "Mechanical" + * }, + * "has_active_time_sheet": false, + * "active_time_sheet": null + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + first_name?: string; + last_name?: string; + email?: string; + phone?: string; + department_id?: number; + position?: string; + status?: string; + type?: string; + track_attendance?: boolean; + notify_owner_when_punch_in_out?: boolean; + shop_calender_id?: number; + shop_timing_id?: number; + geo_fence_radius?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + department?: { + id?: number; + name?: string; + }; + has_active_time_sheet?: boolean; + active_time_sheet?: string | null; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/employees/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "first_name": "Jane", + * "last_name": "Smith", + * "status": "inactive", + * "position": "Senior Technician", + * "shop_timing_id": 2 + * } + */ + "application/json": { + first_name?: string; + last_name?: string; + status?: string; + position?: string; + shop_timing_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Employee updated successfully.", + * "data": { + * "id": 1, + * "first_name": "Jane", + * "last_name": "Smith", + * "email": "jane@example.com", + * "phone": "0501234567", + * "department_id": 1, + * "position": "Senior Technician", + * "status": "inactive", + * "type": "employee", + * "track_attendance": true, + * "notify_owner_when_punch_in_out": false, + * "shop_calender_id": 1, + * "shop_timing_id": 2, + * "geo_fence_radius": 100, + * "created_at": "2026-03-24T12:00:00.000000Z", + * "updated_at": "2026-03-24T12:10:00.000000Z", + * "has_active_time_sheet": false, + * "active_time_sheet": null + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + first_name?: string; + last_name?: string; + email?: string; + phone?: string; + department_id?: number; + position?: string; + status?: string; + type?: string; + track_attendance?: boolean; + notify_owner_when_punch_in_out?: boolean; + shop_calender_id?: number; + shop_timing_id?: number; + geo_fence_radius?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + has_active_time_sheet?: boolean; + active_time_sheet?: string | null; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Employee deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/unit-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Hour" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/unit-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Hour" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-favorite-unit-type": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-favorite-unit-type": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-categories": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Parts", + * "shop_type_id": 1 + * } + */ + "application/json": { + title?: string; + shop_type_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-categories/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Parts" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-favorite-inventory-category": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-favorite-inventory-category": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/labor-rates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Standard", + * "rate": 75 + * } + */ + "application/json": { + title?: string; + rate?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/labor-rates/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Standard", + * "rate": 80 + * } + */ + "application/json": { + title?: string; + rate?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-favorite-labor-rate": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-favorite-labor-rate": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Favorite */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "first_name": "Vendor", + * "last_name": "Name", + * "company_name": "ACME", + * "email": "vendor@example.com" + * } + */ + "application/json": { + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendors/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "company_name": "ACME Inc" + * } + */ + "application/json": { + company_name?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/toggle-vendor-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Toggle Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/create-vendor-address": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create Vendor Address */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "vendor_id": 1, + * "address_line_1": "123 Main St", + * "address_line_2": "Suite 100", + * "country_id": 1, + * "state_id": 1, + * "city": "New York", + * "zip_code": "10001", + * "phone_number": "555-1234", + * "title": "Main Office" + * } + */ + "application/json": { + vendor_id?: number; + address_line_1?: string; + address_line_2?: string; + country_id?: number; + state_id?: number; + city?: string; + zip_code?: string; + phone_number?: string; + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-address/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Vendor Address */ + get: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-categories": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "inspection_name": "Brake Check" + * } + */ + "application/json": { + inspection_name?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-categories/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "inspection_name": "Brake Check" + * } + */ + "application/json": { + inspection_name?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Pre-purchase", + * "customer_id": 1, + * "vehicle_id": 1, + * "department_id": 1, + * "inspection_category_id": 1, + * "employee_id": 1, + * "order_number": "ORD-001", + * "date": "2026-03-16", + * "time": "10:00:00" + * } + */ + "application/json": { + title?: string; + customer_id?: number; + vehicle_id?: number; + department_id?: number; + inspection_category_id?: number; + employee_id?: number; + order_number?: string; + date?: string; + time?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspections/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Pre-purchase", + * "note": "Updated note" + * } + */ + "application/json": { + title?: string; + note?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/change-inspection-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Inspection Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1, + * "status": "completed" + * } + */ + "application/json": { + id?: number; + status?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/labels": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Urgent", + * "color_code": "#FF0000" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/labels/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Urgent", + * "color_code": "#FF0000" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/insurance-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Comprehensive" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/insurance-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Comprehensive" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/estimates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Estimate 001", + * "customer_id": 1, + * "vehicle_id": 1, + * "department_id": 1, + * "estimate_number": "EST-001", + * "date": "2026-03-16", + * "has_insurance": false, + * "label_ids": [ + * 1 + * ], + * "remarks": [ + * "Customer note" + * ] + * } + */ + "application/json": { + title?: string; + customer_id?: number; + vehicle_id?: number; + department_id?: number; + estimate_number?: string; + date?: string; + has_insurance?: boolean; + label_ids?: number[]; + remarks?: string[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/estimates/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Estimate 001", + * "label_ids": [ + * 1, + * 2 + * ], + * "remarks": [ + * "Updated note" + * ] + * } + */ + "application/json": { + title?: string; + label_ids?: number[]; + remarks?: string[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/quick-remark": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "description": "Needs follow-up" + * } + */ + "application/json": { + description?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/quick-remark/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "description": "Needs follow-up" + * } + */ + "application/json": { + description?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/quick-notes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "description": "Quick note text" + * } + */ + "application/json": { + description?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/quick-notes/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "description": "Updated note" + * } + */ + "application/json": { + description?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/reasons": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "Customer request", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Customer request" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Reason created successfully.", + * "data": { + * "id": 1, + * "title": "Customer request", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/reasons/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Updated reason title" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Reason updated successfully.", + * "data": { + * "id": 1, + * "title": "Updated reason title", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Reason deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/check-point-label": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Pass", + * "color_code": "#00FF00" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/check-point-label/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Pass", + * "color_code": "#00FF00" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "inspection_id": 1, + * "name": "Brake pads", + * "description": "Check thickness", + * "record_type": "record_conditions", + * "condition_rate": 85 + * } + */ + "application/json": { + inspection_id?: number; + name?: string; + description?: string; + record_type?: string; + condition_rate?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "name": "Brake pads", + * "record_type": "record_conditions", + * "condition_rate": 90, + * "file": null + * } + */ + "application/json": { + name?: string; + record_type?: string; + condition_rate?: number; + file?: string | null; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/toggle-label-to-checkpoint": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Toggle Label to Checkpoint */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "inspection_check_point_id": 1, + * "check_point_label_id": 1 + * } + */ + "application/json": { + inspection_check_point_id?: number; + check_point_label_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points/change-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "inspection_check_point_id": 1, + * "status": "passed" + * } + */ + "application/json": { + inspection_check_point_id?: number; + status?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + inspection_check_point_id?: string; + /** Format: binary */ + attachment?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points/{id}/upload-media": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Upload Media */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inspection-check-points/{id}/media": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Remove Media */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Job Card 001", + * "customer_id": 1, + * "vehicle_id": 1, + * "status": "draft" + * } + */ + "application/json": { + title?: string; + customer_id?: number; + vehicle_id?: number; + status?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Job Card 001 Updated", + * "status": "check_in", + * "department_id": 1, + * "check_in_date": "2026-03-18", + * "km_in": 50000, + * "label_ids": [ + * 1 + * ] + * } + */ + "application/json": { + title?: string; + status?: string; + department_id?: number; + check_in_date?: string; + km_in?: number; + label_ids?: number[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/change-date": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Date */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "order_date": "2026-03-18" + * } + */ + "application/json": { + order_date?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/change-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Status */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "status": "in_progress" + * } + */ + "application/json": { + status?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/add-customer-remark": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Customer Remark */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "remark": "Customer requested wash" + * } + */ + "application/json": { + remark?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/edit-customer-remark": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Edit Customer Remark */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "customer_remark_id": 1, + * "remark": "Updated remark" + * } + */ + "application/json": { + customer_remark_id?: number; + remark?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/delete-customer-remark": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Customer Remark */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/add-shop-recommendation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Shop Recommendation */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "recommendation": "Replace brake pads" + * } + */ + "application/json": { + recommendation?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/edit-shop-recommendation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Edit Shop Recommendation */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "shop_recommendation_id": 1, + * "recommendation": "Updated recommendation" + * } + */ + "application/json": { + shop_recommendation_id?: number; + recommendation?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/delete-shop-recommendation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Shop Recommendation */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Delete Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/change-service-writer-id": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Service Writer */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_writer_id": 1 + * } + */ + "application/json": { + service_writer_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/job-cards/{id}/change-sales-person-id": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Sales Person */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "sales_person_id": 1 + * } + */ + "application/json": { + sales_person_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mode": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Cash", + * "is_default": true + * } + */ + "application/json": { + title?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mode/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Bank Transfer", + * "is_default": false + * } + */ + "application/json": { + title?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-recieved": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + job_card_id?: string; + payment_mode_id?: string; + customer_id?: string; + amount_received?: string; + payment_number?: string; + payment_date?: string; + note?: string; + /** Format: binary */ + "attachment_files[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-recieved/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Update */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + _method?: string; + amount_received?: string; + note?: string; + "delete_attachment_ids[]"?: string; + /** Format: binary */ + "attachment_files[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/parts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "title": "Brake Pad", + * "sku": "BP-001", + * "part_number": "BP-001-A", + * "unit_type_id": 1, + * "manufactured_by": "Bosch", + * "description": "Front brake pad set", + * "location": "Rack A-3", + * "pricing_matrix": "Standard", + * "department_id": 1, + * "sales_information": true, + * "selling_price": "45.00", + * "sales_chart_of_account": 4000, + * "purchase_information": true, + * "purchase_chart_of_account": 5000, + * "purchase_preferred_vendor_id": 1, + * "purchase_price": "25.00", + * "track_inventory": true, + * "opening_stock": 10, + * "as_on_date": "2026-03-20", + * "min_stock": 2, + * "max_stock": 50, + * "inventory_chart_of_account": 3000, + * "tracking_type": 1, + * "inventory_purchase_price": "24.00", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + title?: string; + sku?: string; + part_number?: string; + unit_type_id?: number; + manufactured_by?: string; + description?: string; + location?: string; + pricing_matrix?: string; + department_id?: number; + sales_information?: boolean; + selling_price?: string; + sales_chart_of_account?: number; + purchase_information?: boolean; + purchase_chart_of_account?: number; + purchase_preferred_vendor_id?: number; + purchase_price?: string; + track_inventory?: boolean; + opening_stock?: number; + as_on_date?: string; + min_stock?: number; + max_stock?: number; + inventory_chart_of_account?: number; + tracking_type?: number; + inventory_purchase_price?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "shop_type_id": 1, + * "category_id": 1, + * "title": "Brake Pad", + * "sku": "BP-001", + * "unit_type_id": 1, + * "department_id": 1, + * "description": "Front brake pad set", + * "selling_price": 45, + * "purchase_price": 25 + * } + */ + "application/json": { + shop_type_id?: number; + category_id?: number; + title?: string; + sku?: string; + unit_type_id?: number; + department_id?: number; + description?: string; + selling_price?: number; + purchase_price?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "title": "Brake Pad", + * "sku": "BP-001", + * "part_number": "BP-001-A", + * "unit_type_id": 1, + * "manufactured_by": "Bosch", + * "description": "Front brake pad set", + * "location": "Rack A-3", + * "pricing_matrix": "Standard", + * "department_id": 1, + * "sales_information": true, + * "selling_price": "45.00", + * "sales_chart_of_account": 4000, + * "purchase_information": true, + * "purchase_chart_of_account": 5000, + * "purchase_preferred_vendor_id": 1, + * "purchase_price": "25.00", + * "track_inventory": true, + * "opening_stock": 10, + * "as_on_date": "2026-03-20", + * "min_stock": 2, + * "max_stock": 50, + * "inventory_chart_of_account": 3000, + * "tracking_type": 1, + * "inventory_purchase_price": "24.00", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + title?: string; + sku?: string; + part_number?: string; + unit_type_id?: number; + manufactured_by?: string; + description?: string; + location?: string; + pricing_matrix?: string; + department_id?: number; + sales_information?: boolean; + selling_price?: string; + sales_chart_of_account?: number; + purchase_information?: boolean; + purchase_chart_of_account?: number; + purchase_preferred_vendor_id?: number; + purchase_price?: string; + track_inventory?: boolean; + opening_stock?: number; + as_on_date?: string; + min_stock?: number; + max_stock?: number; + inventory_chart_of_account?: number; + tracking_type?: number; + inventory_purchase_price?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/parts/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Brake Pad Updated", + * "selling_price": 50 + * } + */ + "application/json": { + title?: string; + selling_price?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "category_id": 1, + * "title": "Brake Pad Updated", + * "sku": "BP-001", + * "part_number": "BP-001-A", + * "unit_type_id": 1, + * "manufactured_by": "Bosch", + * "description": "Front brake pad set", + * "location": "Rack A-3", + * "pricing_matrix": "Standard", + * "department_id": 1, + * "sales_information": true, + * "selling_price": "50.00", + * "sales_chart_of_account": 4000, + * "purchase_information": true, + * "purchase_chart_of_account": 5000, + * "purchase_preferred_vendor_id": 1, + * "purchase_price": "25.00", + * "track_inventory": true, + * "opening_stock": 10, + * "as_on_date": "2026-03-20", + * "min_stock": 2, + * "max_stock": 50, + * "inventory_chart_of_account": 3000, + * "tracking_type": 1, + * "inventory_purchase_price": "24.00", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + category_id?: number; + title?: string; + sku?: string; + part_number?: string; + unit_type_id?: number; + manufactured_by?: string; + description?: string; + location?: string; + pricing_matrix?: string; + department_id?: number; + sales_information?: boolean; + selling_price?: string; + sales_chart_of_account?: number; + purchase_information?: boolean; + purchase_chart_of_account?: number; + purchase_preferred_vendor_id?: number; + purchase_price?: string; + track_inventory?: boolean; + opening_stock?: number; + as_on_date?: string; + min_stock?: number; + max_stock?: number; + inventory_chart_of_account?: number; + tracking_type?: number; + inventory_purchase_price?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/import-parts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Import */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Import completed successfully.", + * "data": { + * "imported_count": 8, + * "failed_count": 1, + * "failed_rows": [ + * { + * "row": 4, + * "errors": [ + * "The sku has already been taken." + * ], + * "values": { + * "sku": "BP-001" + * } + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + imported_count?: number; + failed_count?: number; + failed_rows?: { + row?: number; + errors?: string[]; + values?: { + sku?: string; + }; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/export-parts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Export */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "search": "", + * "shop_type_id": null, + * "category_id": null, + * "department_id": null + * } + */ + "application/json": { + search?: string; + shop_type_id?: string | null; + category_id?: string | null; + department_id?: string | null; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Export generated successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/toggle-part-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Toggle Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Status updated successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/purchase-orders": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "service_name": "Engine Service Group", + * "shop_type_id": 1, + * "code": "SG-001", + * "inventory_category_id": 1, + * "unit_type_id": 1, + * "department_id": 1, + * "service_description": "Common engine services", + * "show_as_lump_sum": false, + * "mark_as_recommended": true, + * "set_packaged_pricing": false, + * "selling_price": "100.00", + * "selling_chart_of_account": "4000", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "inventory_category": { + * "id": 1, + * "title": "Engine" + * }, + * "unit_type": { + * "id": 1, + * "name": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * } + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + service_name?: string; + shop_type_id?: number; + code?: string; + inventory_category_id?: number; + unit_type_id?: number; + department_id?: number; + service_description?: string; + show_as_lump_sum?: boolean; + mark_as_recommended?: boolean; + set_packaged_pricing?: boolean; + selling_price?: string; + selling_chart_of_account?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + inventory_category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + name?: string; + }; + department?: { + id?: number; + name?: string; + }; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "job_card_id": 1, + * "vendor_id": 1, + * "title": "PO-001", + * "order_number": "PO-2026-001", + * "order_date": "2026-03-19", + * "delivery_date": "2026-03-25", + * "department_id": 1, + * "notes": "Urgent order", + * "label_ids": [ + * 1 + * ], + * "items": [ + * { + * "part_id": 1, + * "quantity": 5, + * "rate": 25, + * "description": "Brake pads" + * } + * ] + * } + */ + "application/json": { + job_card_id?: number; + vendor_id?: number; + title?: string; + order_number?: string; + order_date?: string; + delivery_date?: string; + department_id?: number; + notes?: string; + label_ids?: number[]; + items?: { + part_id?: number; + quantity?: number; + rate?: number; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group created successfully.", + * "data": { + * "id": 1, + * "service_name": "Engine Service Group", + * "shop_type_id": 1, + * "code": "SG-001", + * "inventory_category_id": 1, + * "unit_type_id": 1, + * "department_id": 1, + * "service_description": "Common engine services", + * "show_as_lump_sum": false, + * "mark_as_recommended": true, + * "set_packaged_pricing": false, + * "selling_price": "100.00", + * "selling_chart_of_account": "4000", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "inventory_category": { + * "id": 1, + * "title": "Engine" + * }, + * "unit_type": { + * "id": 1, + * "name": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_name?: string; + shop_type_id?: number; + code?: string; + inventory_category_id?: number; + unit_type_id?: number; + department_id?: number; + service_description?: string; + show_as_lump_sum?: boolean; + mark_as_recommended?: boolean; + set_packaged_pricing?: boolean; + selling_price?: string; + selling_chart_of_account?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + inventory_category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + name?: string; + }; + department?: { + id?: number; + name?: string; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/purchase-orders/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "PO-001 Updated", + * "notes": "Updated notes", + * "label_ids": [ + * 1, + * 2 + * ], + * "items": [ + * { + * "part_id": 1, + * "quantity": 10, + * "rate": 22, + * "description": "Brake pads bulk" + * } + * ] + * } + */ + "application/json": { + title?: string; + notes?: string; + label_ids?: number[]; + items?: { + part_id?: number; + quantity?: number; + rate?: number; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group updated successfully.", + * "data": { + * "id": 1, + * "service_name": "Engine Service Group Updated", + * "shop_type_id": 1, + * "code": "SG-001", + * "inventory_category_id": 1, + * "unit_type_id": 1, + * "department_id": 1, + * "service_description": "Common engine services", + * "show_as_lump_sum": false, + * "mark_as_recommended": true, + * "set_packaged_pricing": false, + * "selling_price": "125.00", + * "selling_chart_of_account": "4000", + * "is_active": true, + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "inventory_category": { + * "id": 1, + * "title": "Engine" + * }, + * "unit_type": { + * "id": 1, + * "name": "Hour" + * }, + * "department": { + * "id": 1, + * "name": "Service Department" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_name?: string; + shop_type_id?: number; + code?: string; + inventory_category_id?: number; + unit_type_id?: number; + department_id?: number; + service_description?: string; + show_as_lump_sum?: boolean; + mark_as_recommended?: boolean; + set_packaged_pricing?: boolean; + selling_price?: string; + selling_chart_of_account?: string; + is_active?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + inventory_category?: { + id?: number; + title?: string; + }; + unit_type?: { + id?: number; + name?: string; + }; + department?: { + id?: number; + name?: string; + }; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/services": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "shop_type_id": 1, + * "category_id": 1, + * "labor_name": "Oil Change", + * "service_code": "SVC-001", + * "unit_type_id": 1, + * "labor_matrix": "Standard", + * "department_id": 1, + * "description": "Full synthetic oil change", + * "selling_price": 75 + * } + */ + "application/json": { + shop_type_id?: number; + category_id?: number; + labor_name?: string; + service_code?: string; + unit_type_id?: number; + labor_matrix?: string; + department_id?: number; + description?: string; + selling_price?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/services/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "labor_name": "Oil Change Premium", + * "selling_price": 85 + * } + */ + "application/json": { + labor_name?: string; + selling_price?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/import-services": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Import */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Import completed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/export-services": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Export */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "search": "", + * "shop_type_id": null, + * "category_id": null, + * "department_id": null + * } + */ + "application/json": { + search?: string; + shop_type_id?: string | null; + category_id?: string | null; + department_id?: string | null; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Export generated successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/expense-items": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "item_type": "Office Supply", + * "category_id": 1, + * "item_name": "Printer Paper", + * "sku": "EXP-001", + * "unit_type_id": 1, + * "department_id": 1, + * "description": "A4 printer paper", + * "selling_price": 15, + * "purchase_price": 10 + * } + */ + "application/json": { + item_type?: string; + category_id?: number; + item_name?: string; + sku?: string; + unit_type_id?: number; + department_id?: number; + description?: string; + selling_price?: number; + purchase_price?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/expense-items/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "item_name": "Printer Paper A4", + * "selling_price": 18 + * } + */ + "application/json": { + item_name?: string; + selling_price?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/toggle-expense-item-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Toggle Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/bills": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Bill 001", + * "job_card_id": 1, + * "vendor_id": 1, + * "vendor_address_id": 1, + * "bill_date": "2026-03-19", + * "bill_due_date": "2026-04-19", + * "payment_terms_id": 1, + * "department_id": 1, + * "notes": "Monthly bill", + * "label_ids": [ + * 1 + * ], + * "items": [ + * { + * "part_id": 1, + * "quantity": 3, + * "rate": 25, + * "chart_of_account": null, + * "description": "Brake pads" + * } + * ] + * } + */ + "application/json": { + title?: string; + job_card_id?: number; + vendor_id?: number; + vendor_address_id?: number; + bill_date?: string; + bill_due_date?: string; + payment_terms_id?: number; + department_id?: number; + notes?: string; + label_ids?: number[]; + items?: { + part_id?: number; + quantity?: number; + rate?: number; + chart_of_account?: string | null; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/bills/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Bill 001 Updated", + * "notes": "Updated notes", + * "label_ids": [ + * 1, + * 2 + * ], + * "items": [ + * { + * "part_id": 1, + * "quantity": 5, + * "rate": 22, + * "description": "Brake pads bulk" + * } + * ] + * } + */ + "application/json": { + title?: string; + notes?: string; + label_ids?: number[]; + items?: { + part_id?: number; + quantity?: number; + rate?: number; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/expenses": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "job_card_id": 1, + * "title": "Office Supplies", + * "category_id": 1, + * "vendor_id": 1, + * "invoice_number": "INV-001", + * "expense_date": "2026-03-19", + * "department_id": 1, + * "notes": "Monthly office expense", + * "status": "open", + * "label_ids": [ + * 1 + * ], + * "items": [ + * { + * "expense_item_id": 1, + * "quantity": 2, + * "rate": 15, + * "chart_of_account": null, + * "description": "Printer paper" + * } + * ] + * } + */ + "application/json": { + job_card_id?: number; + title?: string; + category_id?: number; + vendor_id?: number; + invoice_number?: string; + expense_date?: string; + department_id?: number; + notes?: string; + status?: string; + label_ids?: number[]; + items?: { + expense_item_id?: number; + quantity?: number; + rate?: number; + chart_of_account?: string | null; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/expenses/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Office Supplies Updated", + * "status": "paid", + * "label_ids": [ + * 1, + * 2 + * ], + * "items": [ + * { + * "expense_item_id": 1, + * "quantity": 5, + * "rate": 12, + * "description": "Printer paper bulk" + * } + * ] + * } + */ + "application/json": { + title?: string; + status?: string; + label_ids?: number[]; + items?: { + expense_item_id?: number; + quantity?: number; + rate?: number; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/task-types": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Maintenance", + * "is_default": false + * } + */ + "application/json": { + title?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/task-types/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Maintenance Updated" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-task-type": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-task-type": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/task-sections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "To Do", + * "arrangement": 1, + * "is_default": false + * } + */ + "application/json": { + title?: string; + arrangement?: number; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/task-sections/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "To Do Updated" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-task-section": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-task-section": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/change-task-section-arrangement": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Change Arrangement */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1, + * "arrangement": 3 + * } + */ + "application/json": { + id?: number; + arrangement?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/tasks": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "task_type_id": 1, + * "task_section_id": 1, + * "job_card_id": 1, + * "subject": "Replace brake pads", + * "description": "Front and rear brake pads need replacement", + * "owner_id": 1, + * "department_id": 1, + * "priority": 2, + * "due_date": "2026-03-25", + * "task_number": "TSK-001", + * "status": "pending" + * } + */ + "application/json": { + task_type_id?: number; + task_section_id?: number; + job_card_id?: number; + subject?: string; + description?: string; + owner_id?: number; + department_id?: number; + priority?: number; + due_date?: string; + task_number?: string; + status?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/tasks/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Replace brake pads - Updated", + * "priority": 3, + * "due_date": "2026-03-28" + * } + */ + "application/json": { + subject?: string; + priority?: number; + due_date?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/tasks/{id}/complete": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Complete */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/appointments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Brake Inspection", + * "date": "2026-03-25", + * "from_time": "09:00", + * "to_time": "10:00", + * "customer_id": 1, + * "vehicle_id": 1, + * "service_writer_id": 1, + * "technician_id": 1, + * "department_id": 1, + * "job_card_id": 1, + * "notes": "Customer requested morning slot", + * "label_ids": [ + * 1 + * ] + * } + */ + "application/json": { + title?: string; + date?: string; + from_time?: string; + to_time?: string; + customer_id?: number; + vehicle_id?: number; + service_writer_id?: number; + technician_id?: number; + department_id?: number; + job_card_id?: number; + notes?: string; + label_ids?: number[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/appointments/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Brake Inspection Updated", + * "date": "2026-03-26", + * "from_time": "14:00", + * "to_time": "15:00", + * "label_ids": [ + * 1, + * 2 + * ] + * } + */ + "application/json": { + title?: string; + date?: string; + from_time?: string; + to_time?: string; + label_ids?: number[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/appointments/{id}/un-link-job-card": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Unlink Job Card */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-sequences": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Default Invoice Sequence", + * "sequence_title": "INV 2026", + * "is_default": true, + * "auto_generate": true, + * "prefix": "INV-", + * "start_number": 1, + * "department_id": 1 + * } + */ + "application/json": { + title?: string; + sequence_title?: string; + is_default?: boolean; + auto_generate?: boolean; + prefix?: string; + start_number?: number; + department_id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-sequences/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Updated Sequence", + * "prefix": "INV-2026-", + * "start_number": 100 + * } + */ + "application/json": { + title?: string; + prefix?: string; + start_number?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-invoice-sequence": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-invoice-sequence": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Removed successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-groups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_name": "Engine Service Group", + * "shop_type_id": 1, + * "code": "SG-001", + * "inventory_category_id": 1, + * "unit_type_id": 1, + * "department_id": 1, + * "service_description": "Common engine services", + * "show_as_lump_sum": false, + * "mark_as_recommended": true, + * "set_packaged_pricing": false, + * "selling_price": 100, + * "selling_chart_of_account": "4000", + * "is_active": true + * } + */ + "application/json": { + service_name?: string; + shop_type_id?: number; + code?: string; + inventory_category_id?: number; + unit_type_id?: number; + department_id?: number; + service_description?: string; + show_as_lump_sum?: boolean; + mark_as_recommended?: boolean; + set_packaged_pricing?: boolean; + selling_price?: number; + selling_chart_of_account?: string; + is_active?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-groups/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_name": "Engine Service Group Updated", + * "selling_price": 125, + * "is_active": true + * } + */ + "application/json": { + service_name?: string; + selling_price?: number; + is_active?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-groups/{id}/add-label": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Label */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "label_id": 1 + * } + */ + "application/json": { + label_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Label added to service group successfully.", + * "data": { + * "id": 1, + * "service_name": "Engine Service Group", + * "labels": [ + * { + * "id": 1, + * "title": "Recommended", + * "color_code": "#00AAFF" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_name?: string; + labels?: { + id?: number; + title?: string; + color_code?: string; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-groups/{id}/delete-label": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Label */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "label_id": 1 + * } + */ + "application/json": { + label_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Label removed from service group successfully.", + * "data": { + * "id": 1, + * "service_name": "Engine Service Group", + * "labels": [] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_name?: string; + labels?: unknown[]; + }; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-includes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Includes List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "service_group_id": 1, + * "title": "Basic inspection", + * "arrangement": 1, + * "created_at": "2026-03-26T18:40:00.000000Z", + * "updated_at": "2026-03-26T18:40:00.000000Z", + * "service_group": { + * "id": 1, + * "service_name": "Engine Service Group" + * } + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + service_group_id?: number; + title?: string; + arrangement?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + service_group?: { + id?: number; + service_name?: string; + }; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Includes Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_group_id": 1, + * "title": "Basic inspection", + * "arrangement": 1 + * } + */ + "application/json": { + service_group_id?: number; + title?: string; + arrangement?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group include created successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "title": "Basic inspection", + * "arrangement": 1 + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + title?: string; + arrangement?: number; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-includes/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Includes Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Basic inspection updated" + * } + */ + "application/json": { + title?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group include updated successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "title": "Basic inspection updated", + * "arrangement": 1 + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + title?: string; + arrangement?: number; + }; + }; + }; + }; + }; + }; + post?: never; + /** Includes Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group include deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-includes/{id}/change-arrangement": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Includes Change Arrangement */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "arrangement": 2 + * } + */ + "application/json": { + arrangement?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group include arrangement updated successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "title": "Basic inspection", + * "arrangement": 2 + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + title?: string; + arrangement?: number; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-pricings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Pricings List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "service_group_id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "fuel_type_id": 1, + * "body_type_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "labor_hours": "2.00", + * "selling_price": "120.00" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + service_group_id?: number; + shop_type_id?: number; + make?: string; + model?: string; + fuel_type_id?: number; + body_type_id?: number; + rate_type?: string; + labor_rate_id?: number; + labor_hours?: string; + selling_price?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Pricings Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_group_id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "fuel_type_id": 1, + * "body_type_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "labor_hours": 2, + * "selling_price": 120 + * } + */ + "application/json": { + service_group_id?: number; + shop_type_id?: number; + make?: string; + model?: string; + fuel_type_id?: number; + body_type_id?: number; + rate_type?: string; + labor_rate_id?: number; + labor_hours?: number; + selling_price?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group pricing created successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "fuel_type_id": 1, + * "body_type_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "labor_hours": "2.00", + * "selling_price": "120.00" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + shop_type_id?: number; + make?: string; + model?: string; + fuel_type_id?: number; + body_type_id?: number; + rate_type?: string; + labor_rate_id?: number; + labor_hours?: string; + selling_price?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-pricings/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Pricings Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "selling_price": 150 + * } + */ + "application/json": { + selling_price?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group pricing updated successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "selling_price": "150.00" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + selling_price?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Pricings Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group pricing deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-services": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Services List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "service_group_id": 1, + * "service_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "rate": "100.00", + * "hours": "1.50", + * "tax_id": 1, + * "chart_of_account": "4000", + * "description": "Labor line" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + service_group_id?: number; + service_id?: number; + rate_type?: string; + labor_rate_id?: number; + rate?: string; + hours?: string; + tax_id?: number; + chart_of_account?: string; + description?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Services Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_group_id": 1, + * "service_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "rate": 100, + * "hours": 1.5, + * "tax_id": 1, + * "chart_of_account": "4000", + * "description": "Labor line" + * } + */ + "application/json": { + service_group_id?: number; + service_id?: number; + rate_type?: string; + labor_rate_id?: number; + rate?: number; + hours?: number; + tax_id?: number; + chart_of_account?: string; + description?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group service created successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "service_id": 1, + * "rate_type": "hourly", + * "labor_rate_id": 1, + * "rate": "100.00", + * "hours": "1.50", + * "tax_id": 1, + * "chart_of_account": "4000", + * "description": "Labor line" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + service_id?: number; + rate_type?: string; + labor_rate_id?: number; + rate?: string; + hours?: string; + tax_id?: number; + chart_of_account?: string; + description?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-services/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Services Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "rate": 120, + * "hours": 2 + * } + */ + "application/json": { + rate?: number; + hours?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group service updated successfully.", + * "data": { + * "id": 1, + * "rate": "120.00", + * "hours": "2.00" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + rate?: string; + hours?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Services Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group service deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-parts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Parts List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "service_group_id": 1, + * "part_id": 1, + * "quantity": "2.00", + * "rate": "50.00", + * "tax_id": 1, + * "chart_of_account": "5000", + * "description": "Parts line" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + service_group_id?: number; + part_id?: number; + quantity?: string; + rate?: string; + tax_id?: number; + chart_of_account?: string; + description?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Parts Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "service_group_id": 1, + * "part_id": 1, + * "quantity": 2, + * "rate": 50, + * "tax_id": 1, + * "chart_of_account": "5000", + * "description": "Parts line" + * } + */ + "application/json": { + service_group_id?: number; + part_id?: number; + quantity?: number; + rate?: number; + tax_id?: number; + chart_of_account?: string; + description?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group part created successfully.", + * "data": { + * "id": 1, + * "service_group_id": 1, + * "part_id": 1, + * "quantity": "2.00", + * "rate": "50.00", + * "tax_id": 1, + * "chart_of_account": "5000", + * "description": "Parts line" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + service_group_id?: number; + part_id?: number; + quantity?: string; + rate?: string; + tax_id?: number; + chart_of_account?: string; + description?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/service-group-parts/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Parts Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "quantity": 3, + * "rate": 55 + * } + */ + "application/json": { + quantity?: number; + rate?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group part updated successfully.", + * "data": { + * "id": 1, + * "quantity": "3.00", + * "rate": "55.00" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + quantity?: string; + rate?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Parts Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Service group part deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-labels": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Urgent Invoice", + * "color_code": "#FF0000" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-labels/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Urgent", + * "color_code": "#D60000" + * } + */ + "application/json": { + title?: string; + color_code?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoices": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Invoice 001", + * "customer_id": 1, + * "vehicle_id": 1, + * "invoice_date": "2026-03-23", + * "due_date": "2026-03-30", + * "invoice_sequence_id": 1, + * "invoice_number": "INV-0001", + * "department_id": 1, + * "status": "draft", + * "inspection_categories": [ + * { + * "inspection_category_id": 1, + * "rate": 100 + * } + * ], + * "parts": [ + * { + * "part_id": 1, + * "quantity": 1, + * "rate": 25 + * } + * ], + * "services": [ + * { + * "service_id": 1, + * "rate": 50 + * } + * ], + * "expenses": [ + * { + * "expense_id": 1, + * "quantity": 1, + * "rate": 10 + * } + * ], + * "service_groups": [ + * { + * "service_group_id": 1, + * "rate": 120 + * } + * ] + * } + */ + "application/json": { + subject?: string; + customer_id?: number; + vehicle_id?: number; + invoice_date?: string; + due_date?: string; + invoice_sequence_id?: number; + invoice_number?: string; + department_id?: number; + status?: string; + inspection_categories?: { + inspection_category_id?: number; + rate?: number; + }[]; + parts?: { + part_id?: number; + quantity?: number; + rate?: number; + }[]; + services?: { + service_id?: number; + rate?: number; + }[]; + expenses?: { + expense_id?: number; + quantity?: number; + rate?: number; + }[]; + service_groups?: { + service_group_id?: number; + rate?: number; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoices/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Invoice 001 Updated", + * "status": "open", + * "notes": "Updated note" + * } + */ + "application/json": { + subject?: string; + status?: string; + notes?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoices/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoices/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Attachment */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-documents": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "invoice_id": 1, + * "customer_id": 1, + * "vehicle_id": 1, + * "document_type_id": 1, + * "document_number": "DOC-001", + * "show_in_invoice": true, + * "show_in_estimate": false, + * "show_in_statement": false + * } + */ + "application/json": { + invoice_id?: number; + customer_id?: number; + vehicle_id?: number; + document_type_id?: number; + document_number?: string; + show_in_invoice?: boolean; + show_in_estimate?: boolean; + show_in_statement?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-documents/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "document_number": "DOC-001-UPDATED", + * "show_in_statement": true + * } + */ + "application/json": { + document_number?: string; + show_in_statement?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-notes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "invoice_id": 1, + * "note": "Call customer before delivery" + * } + */ + "application/json": { + invoice_id?: number; + note?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/invoice-notes/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "note": "Updated internal note" + * } + */ + "application/json": { + note?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Credit Note 001", + * "customer_id": 1, + * "date": "2026-03-23", + * "status": "open", + * "labels": [ + * { + * "label_id": 1 + * } + * ], + * "inspections": [ + * { + * "inspection_category_id": 1, + * "rate": 20 + * } + * ], + * "parts": [ + * { + * "part_id": 1, + * "quantity": 1, + * "rate": 10 + * } + * ], + * "services": [ + * { + * "service_id": 1, + * "rate": 15 + * } + * ], + * "expenses": [ + * { + * "expense_id": 1, + * "quantity": 1, + * "rate": 5 + * } + * ] + * } + */ + "application/json": { + subject?: string; + customer_id?: number; + date?: string; + status?: string; + labels?: { + label_id?: number; + }[]; + inspections?: { + inspection_category_id?: number; + rate?: number; + }[]; + parts?: { + part_id?: number; + quantity?: number; + rate?: number; + }[]; + services?: { + service_id?: number; + rate?: number; + }[]; + expenses?: { + expense_id?: number; + quantity?: number; + rate?: number; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Credit Note 001 Updated", + * "notes": "Adjusted amount" + * } + */ + "application/json": { + subject?: string; + notes?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Attachment */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}/add-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Internal Note */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "note": "Internal review needed" + * } + */ + "application/json": { + note?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}/edit-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Edit Internal Note */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "internal_note_id": 1, + * "note": "Updated internal note" + * } + */ + "application/json": { + internal_note_id?: number; + note?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/credit-notes/{id}/delete-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Internal Note */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "internal_note_id": 1 + * } + */ + "application/json": { + internal_note_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mades": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "vendor_id": 1, + * "employee_id": null, + * "payment_for": "bill", + * "payment_made": "100.00", + * "payment_number": "PM-001", + * "payment_reference": "REF-001", + * "payment_date": "2026-03-23", + * "payment_mode_id": 1, + * "paid_through": 1, + * "notes": "Payment against vendor bills", + * "excess_amount_will_be_deposited": null, + * "amount_paid": "100.00", + * "amount_used_for_payments": "100.00", + * "amount_in_excess": "0.00", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z", + * "vendor": { + * "id": 1, + * "first_name": "Vendor", + * "last_name": "One", + * "company_name": "ACME Parts", + * "email": "vendor1@example.com" + * }, + * "payment_mode": { + * "id": 1, + * "title": "Cash" + * }, + * "details": [ + * { + * "id": 1, + * "payment_made_id": 1, + * "bill_id": 10, + * "expense_id": null, + * "amount_paid": "60.00", + * "bill": { + * "id": 10, + * "title": "Bill #10", + * "status": "partially_paid" + * }, + * "expense": null + * }, + * { + * "id": 2, + * "payment_made_id": 1, + * "bill_id": 11, + * "expense_id": null, + * "amount_paid": "40.00", + * "bill": { + * "id": 11, + * "title": "Bill #11", + * "status": "paid" + * }, + * "expense": null + * } + * ], + * "attachments": [ + * { + * "id": 1, + * "payment_made_id": 1, + * "attachment_path": "payment_made_attachments/sample-receipt.pdf", + * "original_name": "receipt.pdf", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ] + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + vendor_id?: number; + employee_id?: string | null; + payment_for?: string; + payment_made?: string; + payment_number?: string; + payment_reference?: string; + payment_date?: string; + payment_mode_id?: number; + paid_through?: number; + notes?: string; + excess_amount_will_be_deposited?: string | null; + amount_paid?: string; + amount_used_for_payments?: string; + amount_in_excess?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + vendor?: { + id?: number; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + }; + payment_mode?: { + id?: number; + title?: string; + }; + details?: { + id?: number; + payment_made_id?: number; + bill_id?: number; + expense_id?: string | null; + amount_paid?: string; + bill?: { + id?: number; + title?: string; + status?: string; + }; + expense?: string | null; + }[]; + attachments?: { + id?: number; + payment_made_id?: number; + attachment_path?: string; + original_name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create (Expense) */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "employee_id": 1, + * "payment_for": "expense", + * "payment_made": 50, + * "payment_number": "PM-002", + * "payment_reference": "REF-002", + * "payment_date": "2026-03-23", + * "payment_mode_id": 1, + * "paid_through": 1, + * "notes": "Office expense reimbursement", + * "details": [ + * { + * "expense_id": 1, + * "amount_paid": 50 + * } + * ] + * } + */ + "application/json": { + employee_id?: number; + payment_for?: string; + payment_made?: number; + payment_number?: string; + payment_reference?: string; + payment_date?: string; + payment_mode_id?: number; + paid_through?: number; + notes?: string; + details?: { + expense_id?: number; + amount_paid?: number; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Payment made created successfully.", + * "data": { + * "id": 2, + * "vendor_id": null, + * "employee_id": 1, + * "payment_for": "expense", + * "payment_made": "50.00", + * "payment_number": "PM-002", + * "payment_reference": "REF-002", + * "payment_date": "2026-03-23", + * "payment_mode_id": 1, + * "paid_through": 1, + * "notes": "Office expense reimbursement", + * "excess_amount_will_be_deposited": null, + * "amount_paid": "50.00", + * "amount_used_for_payments": "50.00", + * "amount_in_excess": "0.00", + * "created_at": "2026-03-23T12:05:00.000000Z", + * "updated_at": "2026-03-23T12:05:00.000000Z", + * "vendor": null, + * "payment_mode": { + * "id": 1, + * "title": "Cash" + * }, + * "details": [ + * { + * "id": 3, + * "payment_made_id": 2, + * "bill_id": null, + * "expense_id": 1, + * "amount_paid": "50.00" + * } + * ], + * "attachments": [] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + vendor_id?: string | null; + employee_id?: number; + payment_for?: string; + payment_made?: string; + payment_number?: string; + payment_reference?: string; + payment_date?: string; + payment_mode_id?: number; + paid_through?: number; + notes?: string; + excess_amount_will_be_deposited?: string | null; + amount_paid?: string; + amount_used_for_payments?: string; + amount_in_excess?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + vendor?: string | null; + payment_mode?: { + id?: number; + title?: string; + }; + details?: { + id?: number; + payment_made_id?: number; + bill_id?: string | null; + expense_id?: number; + amount_paid?: string; + }[]; + attachments?: unknown[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mades/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "notes": "Updated payment made", + * "details": [ + * { + * "bill_id": 1, + * "amount_paid": 75 + * } + * ] + * } + */ + "application/json": { + notes?: string; + details?: { + bill_id?: number; + amount_paid?: number; + }[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Payment made updated successfully.", + * "data": { + * "id": 1, + * "vendor_id": 1, + * "employee_id": null, + * "payment_for": "bill", + * "payment_made": "100.00", + * "payment_number": "PM-001", + * "payment_reference": "REF-001", + * "payment_date": "2026-03-23", + * "payment_mode_id": 1, + * "paid_through": 1, + * "notes": "Updated payment made", + * "excess_amount_will_be_deposited": null, + * "amount_paid": "100.00", + * "amount_used_for_payments": "75.00", + * "amount_in_excess": "25.00", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:20:00.000000Z", + * "vendor": { + * "id": 1, + * "first_name": "Vendor", + * "last_name": "One", + * "company_name": "ACME Parts", + * "email": "vendor1@example.com" + * }, + * "payment_mode": { + * "id": 1, + * "title": "Cash" + * }, + * "details": [ + * { + * "id": 4, + * "payment_made_id": 1, + * "bill_id": 1, + * "expense_id": null, + * "amount_paid": "75.00" + * } + * ], + * "attachments": [ + * { + * "id": 1, + * "payment_made_id": 1, + * "attachment_path": "payment_made_attachments/sample-receipt.pdf", + * "original_name": "receipt.pdf", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + vendor_id?: number; + employee_id?: string | null; + payment_for?: string; + payment_made?: string; + payment_number?: string; + payment_reference?: string; + payment_date?: string; + payment_mode_id?: number; + paid_through?: number; + notes?: string; + excess_amount_will_be_deposited?: string | null; + amount_paid?: string; + amount_used_for_payments?: string; + amount_in_excess?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + vendor?: { + id?: number; + first_name?: string; + last_name?: string; + company_name?: string; + email?: string; + }; + payment_mode?: { + id?: number; + title?: string; + }; + details?: { + id?: number; + payment_made_id?: number; + bill_id?: number; + expense_id?: string | null; + amount_paid?: string; + }[]; + attachments?: { + id?: number; + payment_made_id?: number; + attachment_path?: string; + original_name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mades/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Payment made attachments added successfully.", + * "data": { + * "id": 1, + * "attachments": [ + * { + * "id": 1, + * "payment_made_id": 1, + * "attachment_path": "payment_made_attachments/sample-receipt.pdf", + * "original_name": "receipt.pdf", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * }, + * { + * "id": 2, + * "payment_made_id": 1, + * "attachment_path": "payment_made_attachments/new-proof.jpg", + * "original_name": "proof.jpg", + * "created_at": "2026-03-23T12:25:00.000000Z", + * "updated_at": "2026-03-23T12:25:00.000000Z" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + attachments?: { + id?: number; + payment_made_id?: number; + attachment_path?: string; + original_name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/payment-mades/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Attachment */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Payment made attachment deleted successfully.", + * "data": { + * "id": 1, + * "attachments": [ + * { + * "id": 2, + * "payment_made_id": 1, + * "attachment_path": "payment_made_attachments/new-proof.jpg", + * "original_name": "proof.jpg", + * "created_at": "2026-03-23T12:25:00.000000Z", + * "updated_at": "2026-03-23T12:25:00.000000Z" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + attachments?: { + id?: number; + payment_made_id?: number; + attachment_path?: string; + original_name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Vendor Credit 001", + * "credit_number": "VC-001", + * "vendor_id": 1, + * "vendor_credit_date": "2026-03-23", + * "department_id": 1, + * "labels": [ + * { + * "label_id": 1 + * } + * ], + * "parts": [ + * { + * "part_id": 1, + * "quantity": 1, + * "rate": 25 + * } + * ], + * "services": [ + * { + * "service_id": 1, + * "quantity": 1, + * "rate": 50 + * } + * ], + * "expenses": [ + * { + * "expense_id": 1, + * "quantity": 1, + * "rate": 10 + * } + * ] + * } + */ + "application/json": { + subject?: string; + credit_number?: string; + vendor_id?: number; + vendor_credit_date?: string; + department_id?: number; + labels?: { + label_id?: number; + }[]; + parts?: { + part_id?: number; + quantity?: number; + rate?: number; + }[]; + services?: { + service_id?: number; + quantity?: number; + rate?: number; + }[]; + expenses?: { + expense_id?: number; + quantity?: number; + rate?: number; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "subject": "Vendor Credit 001 Updated", + * "notes": "Updated notes" + * } + */ + "application/json": { + subject?: string; + notes?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Attachment */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}/add-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Internal Note */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "note": "Internal note" + * } + */ + "application/json": { + note?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}/edit-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Edit Internal Note */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "internal_note_id": 1, + * "note": "Updated internal note" + * } + */ + "application/json": { + internal_note_id?: number; + note?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/vendor-credits/{id}/delete-internal-note": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Internal Note */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "internal_note_id": 1 + * } + */ + "application/json": { + internal_note_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-adjustments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "reference_number": "IA-001", + * "date": "2026-03-23", + * "chart_of_account": 1, + * "reason_id": 1, + * "job_card_id": 1, + * "invoice_id": 1, + * "notes": "Stock correction", + * "parts": [ + * { + * "part_id": 1, + * "quantity": 2, + * "rate": 25, + * "description": "Adjustment line" + * } + * ] + * } + */ + "application/json": { + reference_number?: string; + date?: string; + chart_of_account?: number; + reason_id?: number; + job_card_id?: number; + invoice_id?: number; + notes?: string; + parts?: { + part_id?: number; + quantity?: number; + rate?: number; + description?: string; + }[]; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-adjustments/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "notes": "Updated adjustment", + * "parts": [ + * { + * "part_id": 1, + * "quantity": 3, + * "rate": 25 + * } + * ] + * } + */ + "application/json": { + notes?: string; + parts?: { + part_id?: number; + quantity?: number; + rate?: number; + }[]; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-adjustments/{id}/add-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Add Attachment */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + "attachments[]"?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/inventory-adjustments/{id}/delete-attachment": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Attachment */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "attachment_id": 1 + * } + */ + "application/json": { + attachment_id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/time-sheets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "employee_id": 1, + * "date": "2026-03-23", + * "clock_in": "09:00:00", + * "clock_out": "17:00:00", + * "note": "Regular shift", + * "activity_type": "general" + * } + */ + "application/json": { + employee_id?: number; + date?: string; + clock_in?: string; + clock_out?: string; + note?: string; + activity_type?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Created successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/time-sheets/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "clock_out": "18:00:00", + * "note": "Overtime" + * } + */ + "application/json": { + clock_out?: string; + note?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/time-sheet/clock-in": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Clock In */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "employee_id": 1, + * "date": "2026-03-23", + * "activity_type": "general", + * "note": "Clock in" + * } + */ + "application/json": { + employee_id?: number; + date?: string; + activity_type?: string; + note?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/time-sheet/clock-out": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Clock Out */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "employee_id": 1, + * "date": "2026-03-23" + * } + */ + "application/json": { + employee_id?: number; + date?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Updated successfully.", + * "data": { + * "id": 1, + * "name": "Sample Item", + * "created_at": "2026-03-23T12:00:00.000000Z", + * "updated_at": "2026-03-23T12:10:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-timings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "Regular Shift", + * "in_time": "10:00:00", + * "out_time": "19:00:00", + * "full_day_hours": "09:00:00", + * "half_day_hours": "04:30:00", + * "punch_in": "10:00:00", + * "punch_out": "19:00:00", + * "before_time": "01:00:00", + * "after_time": "01:00:00", + * "is_default": true, + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + in_time?: string; + out_time?: string; + full_day_hours?: string; + half_day_hours?: string; + punch_in?: string; + punch_out?: string; + before_time?: string; + after_time?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Regular Shift", + * "in_time": "10:00:00", + * "out_time": "19:00:00", + * "full_day_hours": "09:00:00", + * "half_day_hours": "04:30:00", + * "punch_in": "10:00:00", + * "punch_out": "19:00:00", + * "before_time": "01:00:00", + * "after_time": "01:00:00", + * "is_default": true + * } + */ + "application/json": { + title?: string; + in_time?: string; + out_time?: string; + full_day_hours?: string; + half_day_hours?: string; + punch_in?: string; + punch_out?: string; + before_time?: string; + after_time?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop timing created successfully.", + * "data": { + * "id": 1, + * "title": "Regular Shift", + * "in_time": "10:00:00", + * "out_time": "19:00:00", + * "full_day_hours": "09:00:00", + * "half_day_hours": "04:30:00", + * "punch_in": "10:00:00", + * "punch_out": "19:00:00", + * "before_time": "01:00:00", + * "after_time": "01:00:00", + * "is_default": true, + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + in_time?: string; + out_time?: string; + full_day_hours?: string; + half_day_hours?: string; + punch_in?: string; + punch_out?: string; + before_time?: string; + after_time?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-timings/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Weekend Shift", + * "in_time": "09:00:00", + * "out_time": "15:00:00", + * "is_default": false + * } + */ + "application/json": { + title?: string; + in_time?: string; + out_time?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop timing updated successfully.", + * "data": { + * "id": 1, + * "title": "Weekend Shift", + * "in_time": "09:00:00", + * "out_time": "15:00:00", + * "full_day_hours": "06:00:00", + * "half_day_hours": "03:00:00", + * "punch_in": "09:00:00", + * "punch_out": "15:00:00", + * "before_time": "00:30:00", + * "after_time": "00:30:00", + * "is_default": false, + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:20:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + in_time?: string; + out_time?: string; + full_day_hours?: string; + half_day_hours?: string; + punch_in?: string; + punch_out?: string; + before_time?: string; + after_time?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop timing deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-shop-timing": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default shop timing updated successfully.", + * "data": { + * "id": 1, + * "title": "Regular Shift", + * "is_default": true + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-shop-timing": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default shop timing removed successfully.", + * "data": { + * "id": 1, + * "title": "Regular Shift", + * "is_default": false + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/holiday-years": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "year": 2026, + * "created_at": "2026-03-24T11:00:00.000000Z", + * "updated_at": "2026-03-24T11:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + year?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "year": 2026 + * } + */ + "application/json": { + year?: number; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Holiday year created successfully.", + * "data": { + * "id": 1, + * "year": 2026, + * "created_at": "2026-03-24T11:00:00.000000Z", + * "updated_at": "2026-03-24T11:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + year?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-calenders": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "Default Calendar", + * "is_default": true, + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:00:00.000000Z", + * "shop_calender_days": [ + * { + * "id": 1, + * "shop_calender_id": 1, + * "day_number": 1, + * "type": "full_day", + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:00:00.000000Z" + * } + * ] + * } + * ], + * "meta": { + * "current_page": 1, + * "last_page": 1, + * "per_page": 15, + * "total": 1, + * "from": 1, + * "to": 1 + * } + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_calender_days?: { + id?: number; + shop_calender_id?: number; + day_number?: number; + type?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }[]; + meta?: { + current_page?: number; + last_page?: number; + per_page?: number; + total?: number; + from?: number; + to?: number; + }; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "Default Calendar", + * "is_default": true + * } + */ + "application/json": { + title?: string; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop calender created successfully.", + * "data": { + * "id": 1, + * "title": "Default Calendar", + * "is_default": true, + * "created_at": "2026-03-24T10:00:00.000000Z", + * "updated_at": "2026-03-24T10:00:00.000000Z", + * "shop_calender_days": [ + * { + * "id": 1, + * "shop_calender_id": 1, + * "day_number": 1, + * "type": "full_day" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_calender_days?: { + id?: number; + shop_calender_id?: number; + day_number?: number; + type?: string; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-calenders/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop calender deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-shop-calender": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default shop calender updated successfully.", + * "data": { + * "id": 1, + * "title": "Default Calendar", + * "is_default": true + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-shop-calender": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default shop calender removed successfully.", + * "data": { + * "id": 1, + * "title": "Default Calendar", + * "is_default": false + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/shop-calenders/{id}/update-day-type": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Update Day Type */ + post: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "day_number": 1, + * "type": "week_off" + * } + */ + "application/json": { + day_number?: number; + type?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Shop calender day type updated successfully.", + * "data": { + * "id": 1, + * "title": "Default Calendar", + * "is_default": true, + * "shop_calender_days": [ + * { + * "id": 1, + * "shop_calender_id": 1, + * "day_number": 1, + * "type": "week_off" + * } + * ] + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + is_default?: boolean; + shop_calender_days?: { + id?: number; + shop_calender_id?: number; + day_number?: number; + type?: string; + }[]; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/holidays": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "holiday_year_id": 1, + * "date": "2026-12-02", + * "name": "National Day", + * "created_at": "2026-03-24T11:10:00.000000Z", + * "updated_at": "2026-03-24T11:10:00.000000Z", + * "holiday_year": { + * "id": 1, + * "year": 2026, + * "created_at": "2026-03-24T11:00:00.000000Z", + * "updated_at": "2026-03-24T11:00:00.000000Z" + * } + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + holiday_year_id?: number; + date?: string; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + holiday_year?: { + id?: number; + year?: number; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "holiday_year_id": 1, + * "date": "2026-12-02", + * "name": "National Day" + * } + */ + "application/json": { + holiday_year_id?: number; + date?: string; + name?: string; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Holiday created successfully.", + * "data": { + * "id": 1, + * "holiday_year_id": 1, + * "date": "2026-12-02", + * "name": "National Day", + * "created_at": "2026-03-24T11:10:00.000000Z", + * "updated_at": "2026-03-24T11:10:00.000000Z", + * "holiday_year": { + * "id": 1, + * "year": 2026 + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + holiday_year_id?: number; + date?: string; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + holiday_year?: { + id?: number; + year?: number; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/holidays/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "name": "National Day Holiday" + * } + */ + "application/json": { + name?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Holiday updated successfully.", + * "data": { + * "id": 1, + * "holiday_year_id": 1, + * "date": "2026-12-02", + * "name": "National Day Holiday", + * "created_at": "2026-03-24T11:10:00.000000Z", + * "updated_at": "2026-03-24T11:20:00.000000Z", + * "holiday_year": { + * "id": 1, + * "year": 2026 + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + holiday_year_id?: number; + date?: string; + name?: string; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + holiday_year?: { + id?: number; + year?: number; + }; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Holiday deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/settings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": { + * "id": 1, + * "name": "Reparee", + * "email": "support@reparee.com", + * "phone": "1234567890", + * "alternative_phone": "0987654321", + * "website": "https://reparee.com", + * "time_zone": "Asia/Kolkata", + * "upi_id": "reparee@upi", + * "first_day_of_work": "monday", + * "latitude": "23.0225", + * "longitude": "72.5714", + * "bank_details": "Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234", + * "first_address_line": "123 Business Park", + * "second_address_line": "Near Central Plaza", + * "country_id": "101", + * "state_id": "12", + * "city": "Ahmedabad", + * "zip_code": "380001", + * "logo": "settings/logo.png" + * } + * } + */ + "application/json": { + data?: { + id?: number; + name?: string; + email?: string; + phone?: string; + alternative_phone?: string; + website?: string; + time_zone?: string; + upi_id?: string; + first_day_of_work?: string; + latitude?: string; + longitude?: string; + bank_details?: string; + first_address_line?: string; + second_address_line?: string; + country_id?: string; + state_id?: string; + city?: string; + zip_code?: string; + logo?: string; + }; + }; + }; + }; + }; + }; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + name?: string; + email?: string; + phone?: string; + first_day_of_work?: string; + /** Format: binary */ + logo?: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Settings updated successfully.", + * "data": { + * "id": 1, + * "name": "Reparee", + * "email": "support@reparee.com", + * "phone": "1234567890", + * "alternative_phone": "0987654321", + * "website": "https://reparee.com", + * "time_zone": "Asia/Kolkata", + * "upi_id": "reparee@upi", + * "first_day_of_work": "monday", + * "latitude": "23.0225", + * "longitude": "72.5714", + * "bank_details": "Bank: Example Bank, A/C: 1234567890, IFSC: EXMP0001234", + * "first_address_line": "123 Business Park", + * "second_address_line": "Near Central Plaza", + * "country_id": "101", + * "state_id": "12", + * "city": "Ahmedabad", + * "zip_code": "380001", + * "logo": "settings/logo.png" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + name?: string; + email?: string; + phone?: string; + alternative_phone?: string; + website?: string; + time_zone?: string; + upi_id?: string; + first_day_of_work?: string; + latitude?: string; + longitude?: string; + bank_details?: string; + first_address_line?: string; + second_address_line?: string; + country_id?: string; + state_id?: string; + city?: string; + zip_code?: string; + logo?: string; + }; + }; + }; + }; + }; + }; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/taxes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "title": "VAT", + * "note": "Standard rate", + * "rate": "18.00", + * "is_default": true, + * "created_at": "2026-03-25T10:00:00.000000Z", + * "updated_at": "2026-03-25T10:00:00.000000Z" + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + title?: string; + note?: string; + rate?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "VAT", + * "note": "Standard rate", + * "rate": 18, + * "is_default": true + * } + */ + "application/json": { + title?: string; + note?: string; + rate?: number; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Tax created successfully.", + * "data": { + * "id": 1, + * "title": "VAT", + * "note": "Standard rate", + * "rate": "18.00", + * "is_default": true, + * "created_at": "2026-03-25T10:00:00.000000Z", + * "updated_at": "2026-03-25T10:00:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + note?: string; + rate?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/taxes/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "title": "VAT (updated)", + * "note": "Revised rate", + * "rate": 20, + * "is_default": false + * } + */ + "application/json": { + title?: string; + note?: string; + rate?: number; + is_default?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Tax updated successfully.", + * "data": { + * "id": 1, + * "title": "VAT (updated)", + * "note": "Revised rate", + * "rate": "20.00", + * "is_default": false, + * "created_at": "2026-03-25T10:00:00.000000Z", + * "updated_at": "2026-03-25T10:15:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + note?: string; + rate?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Tax deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/set-default-tax": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Set Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default tax updated successfully.", + * "data": { + * "id": 1, + * "title": "VAT", + * "note": "Standard rate", + * "rate": "18.00", + * "is_default": true, + * "created_at": "2026-03-25T10:00:00.000000Z", + * "updated_at": "2026-03-25T10:20:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + note?: string; + rate?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/remove-default-tax": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Remove Default */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Default tax removed successfully.", + * "data": { + * "id": 1, + * "title": "VAT", + * "note": "Standard rate", + * "rate": "18.00", + * "is_default": false, + * "created_at": "2026-03-25T10:00:00.000000Z", + * "updated_at": "2026-03-25T10:25:00.000000Z" + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + title?: string; + note?: string; + rate?: string; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/make-and-models": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List */ + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "data": [ + * { + * "id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "year": 2024, + * "sub_model": "LE", + * "body_type_id": 1, + * "fuel_id": 1, + * "transmission_id": 1, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "is_active": true, + * "is_default": false, + * "created_at": "2026-03-25T12:00:00.000000Z", + * "updated_at": "2026-03-25T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "fuel": { + * "id": 1, + * "title": "Petrol" + * }, + * "transmission": { + * "id": 1, + * "title": "Automatic" + * } + * } + * ] + * } + */ + "application/json": { + data?: { + id?: number; + shop_type_id?: number; + make?: string; + model?: string; + year?: number; + sub_model?: string; + body_type_id?: number; + fuel_id?: number; + transmission_id?: number; + engine_size?: string; + drivetrain?: string; + is_active?: boolean; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + body_type?: { + id?: number; + title?: string; + }; + fuel?: { + id?: number; + title?: string; + }; + transmission?: { + id?: number; + title?: string; + }; + }[]; + }; + }; + }; + }; + }; + put?: never; + /** Create */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "year": 2024, + * "sub_model": "LE", + * "body_type_id": 1, + * "fuel_id": 1, + * "transmission_id": 1, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "is_active": true + * } + */ + "application/json": { + shop_type_id?: number; + make?: string; + model?: string; + year?: number; + sub_model?: string; + body_type_id?: number; + fuel_id?: number; + transmission_id?: number; + engine_size?: string; + drivetrain?: string; + is_active?: boolean; + }; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Make and model created successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "year": 2024, + * "sub_model": "LE", + * "body_type_id": 1, + * "fuel_id": 1, + * "transmission_id": 1, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "is_active": true, + * "is_default": false, + * "created_at": "2026-03-25T12:00:00.000000Z", + * "updated_at": "2026-03-25T12:00:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "fuel": { + * "id": 1, + * "title": "Petrol" + * }, + * "transmission": { + * "id": 1, + * "title": "Automatic" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + make?: string; + model?: string; + year?: number; + sub_model?: string; + body_type_id?: number; + fuel_id?: number; + transmission_id?: number; + engine_size?: string; + drivetrain?: string; + is_active?: boolean; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + body_type?: { + id?: number; + title?: string; + }; + fuel?: { + id?: number; + title?: string; + }; + transmission?: { + id?: number; + title?: string; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/make-and-models/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update */ + put: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "make": "Toyota", + * "model": "Camry Hybrid", + * "year": 2025, + * "is_active": true + * } + */ + "application/json": { + make?: string; + model?: string; + year?: number; + is_active?: boolean; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Make and model updated successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry Hybrid", + * "year": 2025, + * "sub_model": "LE", + * "body_type_id": 1, + * "fuel_id": 1, + * "transmission_id": 1, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "is_active": true, + * "is_default": false, + * "created_at": "2026-03-25T12:00:00.000000Z", + * "updated_at": "2026-03-25T12:30:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "fuel": { + * "id": 1, + * "title": "Petrol" + * }, + * "transmission": { + * "id": 1, + * "title": "Automatic" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + make?: string; + model?: string; + year?: number; + sub_model?: string; + body_type_id?: number; + fuel_id?: number; + transmission_id?: number; + engine_size?: string; + drivetrain?: string; + is_active?: boolean; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + body_type?: { + id?: number; + title?: string; + }; + fuel?: { + id?: number; + title?: string; + }; + transmission?: { + id?: number; + title?: string; + }; + }; + }; + }; + }; + }; + }; + post?: never; + /** Delete */ + delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Make and model deleted successfully." + * } + */ + "application/json": { + message?: string; + }; + }; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/toggle-make-and-model-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Toggle Status */ + post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** + * @example { + * "id": 1 + * } + */ + "application/json": { + id?: number; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "message": "Make and model status updated successfully.", + * "data": { + * "id": 1, + * "shop_type_id": 1, + * "make": "Toyota", + * "model": "Camry", + * "year": 2024, + * "sub_model": "LE", + * "body_type_id": 1, + * "fuel_id": 1, + * "transmission_id": 1, + * "engine_size": "2.5L", + * "drivetrain": "FWD", + * "is_active": false, + * "is_default": false, + * "created_at": "2026-03-25T12:00:00.000000Z", + * "updated_at": "2026-03-25T12:45:00.000000Z", + * "shop_type": { + * "id": 1, + * "title": "Main Workshop" + * }, + * "body_type": { + * "id": 1, + * "title": "Sedan" + * }, + * "fuel": { + * "id": 1, + * "title": "Petrol" + * }, + * "transmission": { + * "id": 1, + * "title": "Automatic" + * } + * } + * } + */ + "application/json": { + message?: string; + data?: { + id?: number; + shop_type_id?: number; + make?: string; + model?: string; + year?: number; + sub_model?: string; + body_type_id?: number; + fuel_id?: number; + transmission_id?: number; + engine_size?: string; + drivetrain?: string; + is_active?: boolean; + is_default?: boolean; + /** Format: date-time */ + created_at?: string; + /** Format: date-time */ + updated_at?: string; + shop_type?: { + id?: number; + title?: string; + }; + body_type?: { + id?: number; + title?: string; + }; + fuel?: { + id?: number; + title?: string; + }; + transmission?: { + id?: number; + title?: string; + }; + }; + }; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: never; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export type operations = Record; diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md new file mode 100644 index 0000000..8b42d90 --- /dev/null +++ b/packages/eslint-config/README.md @@ -0,0 +1,3 @@ +# `@turbo/eslint-config` + +Collection of internal eslint configurations. diff --git a/packages/eslint-config/base.js b/packages/eslint-config/base.js new file mode 100644 index 0000000..09d316e --- /dev/null +++ b/packages/eslint-config/base.js @@ -0,0 +1,32 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import turboPlugin from "eslint-plugin-turbo"; +import tseslint from "typescript-eslint"; +import onlyWarn from "eslint-plugin-only-warn"; + +/** + * A shared ESLint configuration for the repository. + * + * @type {import("eslint").Linter.Config[]} + * */ +export const config = [ + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + plugins: { + turbo: turboPlugin, + }, + rules: { + "turbo/no-undeclared-env-vars": "warn", + }, + }, + { + plugins: { + onlyWarn, + }, + }, + { + ignores: ["dist/**"], + }, +]; diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js new file mode 100644 index 0000000..4df088a --- /dev/null +++ b/packages/eslint-config/next.js @@ -0,0 +1,57 @@ +import js from "@eslint/js"; +import { globalIgnores } from "eslint/config"; +import eslintConfigPrettier from "eslint-config-prettier"; +import tseslint from "typescript-eslint"; +import pluginReactHooks from "eslint-plugin-react-hooks"; +import pluginReact from "eslint-plugin-react"; +import globals from "globals"; +import pluginNext from "@next/eslint-plugin-next"; +import { config as baseConfig } from "./base.js"; + +/** + * A custom ESLint configuration for libraries that use Next.js. + * + * @type {import("eslint").Linter.Config[]} + * */ +export const nextJsConfig = [ + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), + { + ...pluginReact.configs.flat.recommended, + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + }, + }, + }, + { + plugins: { + "@next/next": pluginNext, + }, + rules: { + ...pluginNext.configs.recommended.rules, + ...pluginNext.configs["core-web-vitals"].rules, + }, + }, + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, + }, +]; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json new file mode 100644 index 0000000..6fd5c24 --- /dev/null +++ b/packages/eslint-config/package.json @@ -0,0 +1,24 @@ +{ + "name": "@repo/eslint-config", + "version": "0.0.0", + "type": "module", + "private": true, + "exports": { + "./base": "./base.js", + "./next-js": "./next.js", + "./react-internal": "./react-internal.js" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@next/eslint-plugin-next": "^16.2.0", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.1", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-turbo": "^2.7.1", + "globals": "^16.5.0", + "typescript": "^5.9.2", + "typescript-eslint": "^8.50.0" + } +} diff --git a/packages/eslint-config/react-internal.js b/packages/eslint-config/react-internal.js new file mode 100644 index 0000000..daeccba --- /dev/null +++ b/packages/eslint-config/react-internal.js @@ -0,0 +1,39 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import tseslint from "typescript-eslint"; +import pluginReactHooks from "eslint-plugin-react-hooks"; +import pluginReact from "eslint-plugin-react"; +import globals from "globals"; +import { config as baseConfig } from "./base.js"; + +/** + * A custom ESLint configuration for libraries that use React. + * + * @type {import("eslint").Linter.Config[]} */ +export const config = [ + ...baseConfig, + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, + { + languageOptions: { + ...pluginReact.configs.flat.recommended.languageOptions, + globals: { + ...globals.serviceworker, + ...globals.browser, + }, + }, + }, + { + plugins: { + "react-hooks": pluginReactHooks, + }, + settings: { react: { version: "detect" } }, + rules: { + ...pluginReactHooks.configs.recommended.rules, + // React scope no longer necessary with new JSX transform. + "react/react-in-jsx-scope": "off", + }, + }, +]; diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json new file mode 100644 index 0000000..5117f2a --- /dev/null +++ b/packages/typescript-config/base.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "incremental": false, + "isolatedModules": true, + "lib": ["es2022", "DOM", "DOM.Iterable"], + "module": "NodeNext", + "moduleDetection": "force", + "moduleResolution": "NodeNext", + "noUncheckedIndexedAccess": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES2022" + } +} diff --git a/packages/typescript-config/nextjs.json b/packages/typescript-config/nextjs.json new file mode 100644 index 0000000..e6defa4 --- /dev/null +++ b/packages/typescript-config/nextjs.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "plugins": [{ "name": "next" }], + "module": "ESNext", + "moduleResolution": "Bundler", + "allowJs": true, + "jsx": "preserve", + "noEmit": true + } +} diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json new file mode 100644 index 0000000..27c0e60 --- /dev/null +++ b/packages/typescript-config/package.json @@ -0,0 +1,9 @@ +{ + "name": "@repo/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/typescript-config/react-library.json b/packages/typescript-config/react-library.json new file mode 100644 index 0000000..c3a1b26 --- /dev/null +++ b/packages/typescript-config/react-library.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/packages/ui/eslint.config.mjs b/packages/ui/eslint.config.mjs new file mode 100644 index 0000000..19170f8 --- /dev/null +++ b/packages/ui/eslint.config.mjs @@ -0,0 +1,4 @@ +import { config } from "@repo/eslint-config/react-internal"; + +/** @type {import("eslint").Linter.Config} */ +export default config; diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 0000000..90c1488 --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,26 @@ +{ + "name": "@repo/ui", + "version": "0.0.0", + "private": true, + "exports": { + "./*": "./src/*.tsx" + }, + "scripts": { + "lint": "eslint . --max-warnings 0", + "generate:component": "turbo gen react-component", + "check-types": "tsc --noEmit" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@types/node": "^22.15.3", + "@types/react": "19.2.2", + "@types/react-dom": "19.2.2", + "eslint": "^9.39.1", + "typescript": "5.9.2" + }, + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0" + } +} diff --git a/packages/ui/src/button.tsx b/packages/ui/src/button.tsx new file mode 100644 index 0000000..78e5420 --- /dev/null +++ b/packages/ui/src/button.tsx @@ -0,0 +1,20 @@ +"use client"; + +import { ReactNode } from "react"; + +interface ButtonProps { + children: ReactNode; + className?: string; + appName: string; +} + +export const Button = ({ children, className, appName }: ButtonProps) => { + return ( + + ); +}; diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx new file mode 100644 index 0000000..7b98893 --- /dev/null +++ b/packages/ui/src/card.tsx @@ -0,0 +1,27 @@ +import { type JSX } from "react"; + +export function Card({ + className, + title, + children, + href, +}: { + className?: string; + title: string; + children: React.ReactNode; + href: string; +}): JSX.Element { + return ( + +

+ {title} -> +

+

{children}

+
+ ); +} diff --git a/packages/ui/src/code.tsx b/packages/ui/src/code.tsx new file mode 100644 index 0000000..f7cbd22 --- /dev/null +++ b/packages/ui/src/code.tsx @@ -0,0 +1,11 @@ +import { type JSX } from "react"; + +export function Code({ + children, + className, +}: { + children: React.ReactNode; + className?: string; +}): JSX.Element { + return {children}; +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json new file mode 100644 index 0000000..ed023ce --- /dev/null +++ b/packages/ui/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@repo/typescript-config/react-library.json", + "compilerOptions": { + "outDir": "dist", + "strictNullChecks": true + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..140b431 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,9926 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + prettier: + specifier: ^3.7.4 + version: 3.7.4 + turbo: + specifier: ^2.8.20 + version: 2.8.20 + typescript: + specifier: 5.9.2 + version: 5.9.2 + + apps/dashboard: + dependencies: + '@base-ui/react': + specifier: ^1.3.0 + version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@hookform/resolvers': + specifier: ^5.2.2 + version: 5.2.2(react-hook-form@7.72.0(react@19.2.4)) + '@repo/api': + specifier: workspace:* + version: link:../../packages/api + '@tanstack/react-query': + specifier: ^5.95.2 + version: 5.95.2(react@19.2.4) + '@tanstack/react-table': + specifier: ^8.21.3 + version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + cmdk: + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + embla-carousel-react: + specifier: ^8.6.0 + version: 8.6.0(react@19.2.4) + input-otp: + specifier: ^1.4.2 + version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + lucide-react: + specifier: ^0.577.0 + version: 0.577.0(react@19.2.4) + next: + specifier: 16.1.7 + version: 16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + nuqs: + specifier: ^2.8.9 + version: 2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + radix-ui: + specifier: ^1.4.3 + version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: + specifier: ^19.2.4 + version: 19.2.4 + react-day-picker: + specifier: ^9.14.0 + version: 9.14.0(react@19.2.4) + react-dom: + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) + react-hook-form: + specifier: ^7.72.0 + version: 7.72.0(react@19.2.4) + react-resizable-panels: + specifier: ^4.7.5 + version: 4.7.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + recharts: + specifier: 3.8.0 + version: 3.8.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@16.13.1)(react@19.2.4)(redux@5.0.1) + sonner: + specifier: ^2.0.7 + version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + tailwind-merge: + specifier: ^3.5.0 + version: 3.5.0 + tw-animate-css: + specifier: ^1.4.0 + version: 1.4.0 + vaul: + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + zod: + specifier: ^4.3.6 + version: 4.3.6 + zustand: + specifier: ^5.0.12 + version: 5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.1 + '@tailwindcss/postcss': + specifier: ^4.2.1 + version: 4.2.2 + '@types/node': + specifier: ^25.5.0 + version: 25.5.0 + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + cypress: + specifier: ^15.13.0 + version: 15.13.0 + eslint: + specifier: ^9.39.4 + version: 9.39.4(jiti@2.6.1) + eslint-config-next: + specifier: 16.1.7 + version: 16.1.7(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8 + version: 8.4.31 + prettier: + specifier: ^3.8.1 + version: 3.8.1 + prettier-plugin-tailwindcss: + specifier: ^0.7.2 + version: 0.7.2(prettier@3.8.1) + shadcn: + specifier: ^4.1.0 + version: 4.1.0(@types/node@25.5.0)(typescript@5.9.3) + tailwindcss: + specifier: ^4.2.1 + version: 4.2.2 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + packages/api: + dependencies: + next: + specifier: '>=14' + version: 16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + openapi-fetch: + specifier: ^0.14.0 + version: 0.14.1 + server-only: + specifier: '*' + version: 0.0.1 + devDependencies: + openapi-typescript: + specifier: ^7.10.1 + version: 7.13.0(typescript@5.9.3) + + packages/eslint-config: + devDependencies: + '@eslint/js': + specifier: ^9.39.1 + version: 9.39.1 + '@next/eslint-plugin-next': + specifier: ^16.2.0 + version: 16.2.0 + eslint: + specifier: ^9.39.1 + version: 9.39.1(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.1.1 + version: 10.1.1(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-only-warn: + specifier: ^1.1.0 + version: 1.1.0 + eslint-plugin-react: + specifier: ^7.37.5 + version: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-turbo: + specifier: ^2.7.1 + version: 2.7.1(eslint@9.39.1(jiti@2.6.1))(turbo@2.8.20) + globals: + specifier: ^16.5.0 + version: 16.5.0 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + typescript-eslint: + specifier: ^8.50.0 + version: 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + + packages/typescript-config: {} + + packages/ui: + dependencies: + react: + specifier: ^19.2.0 + version: 19.2.0 + react-dom: + specifier: ^19.2.0 + version: 19.2.0(react@19.2.0) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/node': + specifier: ^22.15.3 + version: 22.15.3 + '@types/react': + specifier: 19.2.2 + version: 19.2.2 + '@types/react-dom': + specifier: 19.2.2 + version: 19.2.2(@types/react@19.2.2) + eslint: + specifier: ^9.39.1 + version: 9.39.1(jiti@2.6.1) + typescript: + specifier: 5.9.2 + version: 5.9.2 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@base-ui/react@1.3.0': + resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@base-ui/utils@0.2.6': + resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@cypress/request@3.0.10': + resolution: {integrity: sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==} + engines: {node: '>= 6'} + + '@cypress/xvfb@1.2.4': + resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + + '@date-fns/tz@1.4.1': + resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} + + '@dotenvx/dotenvx@1.57.2': + resolution: {integrity: sha512-lv9+UZPnl/KOvShepevLWm3+/wc1It5kgO5Q580evnvOFMZcgKVEYFwxlL7Ohl9my1yjTsWo28N3PJYUEO8wFQ==} + hasBin: true + + '@ecies/ciphers@0.2.5': + resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + peerDependencies: + '@noble/ciphers': ^1.0.0 + + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + + '@hookform/resolvers@5.2.2': + resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} + peerDependencies: + react-hook-form: ^7.55.0 + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + + '@mswjs/interceptors@0.41.3': + resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} + engines: {node: '>=18'} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@next/env@16.1.7': + resolution: {integrity: sha512-rJJbIdJB/RQr2F1nylZr/PJzamvNNhfr3brdKP6s/GW850jbtR70QlSfFselvIBbcPUOlQwBakexjFzqLzF6pg==} + + '@next/eslint-plugin-next@16.1.7': + resolution: {integrity: sha512-v/bRGOJlfRCO+NDKt0bZlIIWjhMKU8xbgEQBo+rV9C8S6czZvs96LZ/v24/GvpEnovZlL4QDpku/RzWHVbmPpA==} + + '@next/eslint-plugin-next@16.2.0': + resolution: {integrity: sha512-3D3pEMcGKfENC9Pzlkr67GOm+205+5hRdYPZvHuNIy5sr9k0ybSU8g+sxOO/R/RLEh/gWZ3UlY+5LmEyZ1xgXQ==} + + '@next/swc-darwin-arm64@16.1.7': + resolution: {integrity: sha512-b2wWIE8sABdyafc4IM8r5Y/dS6kD80JRtOGrUiKTsACFQfWWgUQ2NwoUX1yjFMXVsAwcQeNpnucF2ZrujsBBPg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.1.7': + resolution: {integrity: sha512-zcnVaaZulS1WL0Ss38R5Q6D2gz7MtBu8GZLPfK+73D/hp4GFMrC2sudLky1QibfV7h6RJBJs/gOFvYP0X7UVlQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.1.7': + resolution: {integrity: sha512-2ant89Lux/Q3VyC8vNVg7uBaFVP9SwoK2jJOOR0L8TQnX8CAYnh4uctAScy2Hwj2dgjVHqHLORQZJ2wH6VxhSQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@16.1.7': + resolution: {integrity: sha512-uufcze7LYv0FQg9GnNeZ3/whYfo+1Q3HnQpm16o6Uyi0OVzLlk2ZWoY7j07KADZFY8qwDbsmFnMQP3p3+Ftprw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@16.1.7': + resolution: {integrity: sha512-KWVf2gxYvHtvuT+c4MBOGxuse5TD7DsMFYSxVxRBnOzok/xryNeQSjXgxSv9QpIVlaGzEn/pIuI6Koosx8CGWA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@16.1.7': + resolution: {integrity: sha512-HguhaGwsGr1YAGs68uRKc4aGWxLET+NevJskOcCAwXbwj0fYX0RgZW2gsOCzr9S11CSQPIkxmoSbuVaBp4Z3dA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@16.1.7': + resolution: {integrity: sha512-S0n3KrDJokKTeFyM/vGGGR8+pCmXYrjNTk2ZozOL1C/JFdfUIL9O1ATaJOl5r2POe56iRChbsszrjMAdWSv7kQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.1.7': + resolution: {integrity: sha512-mwgtg8CNZGYm06LeEd+bNnOUfwOyNem/rOiP14Lsz+AnUY92Zq/LXwtebtUiaeVkhbroRCQ0c8GlR4UT1U+0yg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-accessible-icon@1.1.7': + resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-alert-dialog@1.1.15': + resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-aspect-ratio@1.1.7': + resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-avatar@1.1.10': + resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context-menu@2.2.16': + resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-form@0.1.8': + resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-hover-card@1.1.15': + resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-label@2.1.7': + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menubar@1.1.16': + resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-navigation-menu@1.2.14': + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-one-time-password-field@0.1.8': + resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-password-toggle-field@0.1.3': + resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-progress@1.1.7': + resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-radio-group@1.3.8': + resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-separator@1.1.7': + resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slider@1.3.6': + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.15': + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle-group@1.1.11': + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toolbar@1.1.11': + resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-is-hydrated@0.1.0': + resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.22.0': + resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} + + '@redocly/openapi-core@1.34.11': + resolution: {integrity: sha512-V09ayfnb5GyysmvARbt+voFZAjGcf7hSYxOYxSkCc4fbH/DTfq5YWoec8cflvmHHqyIFbqvmGKmYFzqhr9zxDg==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@reduxjs/toolkit@2.11.2': + resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tabby_ai/hijri-converter@1.0.5': + resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} + engines: {node: '>=16.0.0'} + + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.2.2': + resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==} + + '@tanstack/query-core@5.95.2': + resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} + + '@tanstack/react-query@5.95.2': + resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} + peerDependencies: + react: ^18 || ^19 + + '@tanstack/react-table@8.21.3': + resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@tanstack/table-core@8.21.3': + resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} + engines: {node: '>=12'} + + '@ts-morph/common@0.27.0': + resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + + '@turbo/darwin-64@2.8.20': + resolution: {integrity: sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.8.20': + resolution: {integrity: sha512-Gpyh9ATFGThD6/s9L95YWY54cizg/VRWl2B67h0yofG8BpHf67DFAh9nuJVKG7bY0+SBJDAo5cMur+wOl9YOYw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.8.20': + resolution: {integrity: sha512-p2QxWUYyYUgUFG0b0kR+pPi8t7c9uaVlRtjTTI1AbCvVqkpjUfCcReBn6DgG/Hu8xrWdKLuyQFaLYFzQskZbcA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.8.20': + resolution: {integrity: sha512-Gn5yjlZGLRZWarLWqdQzv0wMqyBNIdq1QLi48F1oY5Lo9kiohuf7BPQWtWxeNVS2NgJ1+nb/DzK1JduYC4AWOA==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.8.20': + resolution: {integrity: sha512-vyaDpYk/8T6Qz5V/X+ihKvKFEZFUoC0oxYpC1sZanK6gaESJlmV3cMRT3Qhcg4D2VxvtC2Jjs9IRkrZGL+exLw==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.8.20': + resolution: {integrity: sha512-voicVULvUV5yaGXo0Iue13BcHGYW3u0VgqSbfQwBaHbpj1zLjYV4KIe+7fYIo6DO8FVUJzxFps3ODCQG/Wy2Qw==} + cpu: [arm64] + os: [win32] + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@22.15.3': + resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} + + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + + '@types/react-dom@19.2.2': + resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + + '@types/sinonjs__fake-timers@8.1.1': + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + + '@types/sizzle@2.3.10': + resolution: {integrity: sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==} + + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + + '@types/tmp@0.2.6': + resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + + '@types/validate-npm-package-name@4.0.2': + resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@8.50.0': + resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.50.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.50.0': + resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.50.0': + resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.50.0': + resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.50.0': + resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.50.0': + resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.50.0': + resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.50.0': + resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.50.0': + resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.50.0': + resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + axe-core@4.11.1: + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.10.8: + resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.1: + resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + cypress@15.13.0: + resolution: {integrity: sha512-hJ9sY++TUC/HlUzHVJpIrDyqKMjlhx5PTXl/A7eA91JNEtUWkJAqefQR5mo9AtLra/9+m+JJaMg2U5Qd0a74Fw==} + engines: {node: ^20.1.0 || ^22.0.0 || >=24.0.0} + hasBin: true + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-fns-jalali@4.1.0-0: + resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + engines: {node: '>=0.3.1'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + eciesjs@0.4.18: + resolution: {integrity: sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==} + engines: {bun: '>=1', deno: '>=2', node: '>=16'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.321: + resolution: {integrity: sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==} + + embla-carousel-react@8.6.0: + resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} + peerDependencies: + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + embla-carousel-reactive-utils@8.6.0: + resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@16.1.7: + resolution: {integrity: sha512-FTq1i/QDltzq+zf9aB/cKWAiZ77baG0V7h8dRQh3thVx7I4dwr6ZXQrWKAaTB7x5VwVXlzoUTyMLIVQPLj2gJg==} + peerDependencies: + eslint: '>=9.0.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@10.1.1: + resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-turbo@2.7.1: + resolution: {integrity: sha512-ZC7dTOdw6tGuvx1CeC1WQ0pMkgT/Jmj69QW93d63nysiLbbKRLiDKKA9s/TvwJHq8Uvbou2+hnU8if1L0jHsVQ==} + peerDependencies: + eslint: '>6.6.0' + turbo: '>2.0.0' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + + executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + fuzzysort@3.1.0: + resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-own-enumerable-keys@1.0.0: + resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==} + engines: {node: '>=14.16'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphql@16.13.1: + resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hono@4.12.8: + resolution: {integrity: sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==} + engines: {node: '>=16.9.0'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} + engines: {node: '>=0.10'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} + + immer@11.1.4: + resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + input-otp@1.4.2: + resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@3.0.0: + resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} + engines: {node: '>=12'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-regexp@3.1.0: + resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} + engines: {node: '>=12'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.5: + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lucide-react@0.577.0: + resolution: {integrity: sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.12.14: + resolution: {integrity: sha512-4KXa4nVBIBjbDbd7vfQNuQ25eFxug0aropCQFoI0JdOBuJWamkT1yLVIWReFI8SiTRc+H1hKzaNk+cLk2N9rtQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.1.7: + resolution: {integrity: sha512-WM0L7WrSvKwoLegLYr6V+mz+RIofqQgVAfHhMp9a88ms0cFX8iX9ew+snpWlSBwpkURJOUdvCEt3uLl3NNzvWg==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + nuqs@2.8.9: + resolution: {integrity: sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ==} + peerDependencies: + '@remix-run/react': '>=2' + '@tanstack/react-router': ^1 + next: '>=14.2.0' + react: '>=18.2.0 || ^19.0.0-0' + react-router: ^5 || ^6 || ^7 + react-router-dom: ^5 || ^6 || ^7 + peerDependenciesMeta: + '@remix-run/react': + optional: true + '@tanstack/react-router': + optional: true + next: + optional: true + react-router: + optional: true + react-router-dom: + optional: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} + + openapi-fetch@0.14.1: + resolution: {integrity: sha512-l7RarRHxlEZYjMLd/PR0slfMVse2/vvIAGm75/F7J6MlQ8/b9uUQmUF2kCPrQhJqMXSxmYWObVgeYXbFYzZR+A==} + + openapi-typescript-helpers@0.0.15: + resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} + + openapi-typescript@7.13.0: + resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-tailwindcss@0.7.2: + resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} + engines: {node: '>=20.19'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + engines: {node: '>=14'} + hasBin: true + + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.14.2: + resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} + engines: {node: '>=0.6'} + + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + radix-ui@1.4.3: + resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + + react-day-picker@9.14.0: + resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} + engines: {node: '>=18'} + peerDependencies: + react: '>=16.8.0' + + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + peerDependencies: + react: ^19.2.0 + + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + peerDependencies: + react: ^19.2.4 + + react-hook-form@7.72.0: + resolution: {integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-resizable-panels@4.7.5: + resolution: {integrity: sha512-ma22FpbUolymMK6xIwZOzzNxszi59kZdJiw805byxuGBrjAs8HngpQrrgEp5dj1OOV2jVFBCJxhVult6G+2KaQ==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} + + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + recharts@3.8.0: + resolution: {integrity: sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rettime@0.10.1: + resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shadcn@4.1.0: + resolution: {integrity: sha512-3zETJ+0Ezj69FS6RL0HOkLKKAR5yXisXx1iISJdfLQfrUqj/VIQlanQi1Ukk+9OE+XHZVj4FQNTBSfbr2CyCYg==} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-object@5.0.0: + resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==} + engines: {node: '>=14.16'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + systeminformation@5.31.5: + resolution: {integrity: sha512-5SyLdip4/3alxD4Kh+63bUQTJmu7YMfYQTC+koZy7X73HgNqZSD2P4wOZQWtUncvPvcEmnfIjCoygN4MRoEejQ==} + engines: {node: '>=8.0.0'} + os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] + hasBin: true + + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + + tailwindcss@4.2.2: + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + throttleit@1.0.1: + resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts-core@7.0.27: + resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + + tldts@7.0.27: + resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} + hasBin: true + + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + engines: {node: '>=16'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-morph@26.0.0: + resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + turbo@2.8.20: + resolution: {integrity: sha512-Rb4qk5YT8RUwwdXtkLpkVhNEe/lor6+WV7S5tTlLpxSz6MjV5Qi8jGNn4gS6NAvrYGA/rNrE6YUQM85sCZUDbQ==} + hasBin: true + + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-fest@5.5.0: + resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} + engines: {node: '>=20'} + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.50.0: + resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + validate-npm-package-name@7.0.2: + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} + engines: {node: ^20.17.0 || >=22.9.0} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vaul@1.1.2: + resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + victory-vendor@37.3.6: + resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + peerDependencies: + zod: ^3.25 || ^4 + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + + zustand@5.0.12: + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.29.2': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@base-ui/react@1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.29.2 + '@base-ui/utils': 0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + tabbable: 6.4.0 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + '@base-ui/utils@0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.29.2 + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + '@cypress/request@3.0.10': + dependencies: + aws-sign2: 0.7.0 + aws4: 1.13.2 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 4.0.5 + http-signature: 1.4.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + performance-now: 2.1.0 + qs: 6.14.2 + safe-buffer: 5.2.1 + tough-cookie: 5.1.2 + tunnel-agent: 0.6.0 + uuid: 8.3.2 + + '@cypress/xvfb@1.2.4(supports-color@8.1.1)': + dependencies: + debug: 3.2.7(supports-color@8.1.1) + lodash.once: 4.1.1 + transitivePeerDependencies: + - supports-color + + '@date-fns/tz@1.4.1': {} + + '@dotenvx/dotenvx@1.57.2': + dependencies: + commander: 11.1.0 + dotenv: 17.3.1 + eciesjs: 0.4.18 + execa: 5.1.1 + fdir: 6.5.0(picomatch@4.0.3) + ignore: 5.3.2 + object-treeify: 1.1.33 + picomatch: 4.0.3 + which: 4.0.0 + + '@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)': + dependencies: + '@noble/ciphers': 1.3.0 + + '@emnapi/core@1.9.1': + dependencies: + '@emnapi/wasi-threads': 1.2.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.4(jiti@2.6.1))': + dependencies: + eslint: 9.39.4(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3(supports-color@10.2.2) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.14.0 + debug: 4.4.3(supports-color@10.2.2) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.1': {} + + '@eslint/js@9.39.4': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@floating-ui/utils@0.2.11': {} + + '@hono/node-server@1.19.11(hono@4.12.8)': + dependencies: + hono: 4.12.8 + + '@hookform/resolvers@5.2.2(react-hook-form@7.72.0(react@19.2.4))': + dependencies: + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.72.0(react@19.2.4) + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.7.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@inquirer/ansi@1.0.2': {} + + '@inquirer/confirm@5.1.21(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/core@10.3.2(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.5.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/type@3.0.10(@types/node@25.5.0)': + optionalDependencies: + '@types/node': 25.5.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.11(hono@4.12.8) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.8 + jose: 6.2.2 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - supports-color + + '@mswjs/interceptors@0.41.3': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@next/env@16.1.7': {} + + '@next/eslint-plugin-next@16.1.7': + dependencies: + fast-glob: 3.3.1 + + '@next/eslint-plugin-next@16.2.0': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@16.1.7': + optional: true + + '@next/swc-darwin-x64@16.1.7': + optional: true + + '@next/swc-linux-arm64-gnu@16.1.7': + optional: true + + '@next/swc-linux-arm64-musl@16.1.7': + optional: true + + '@next/swc-linux-x64-gnu@16.1.7': + optional: true + + '@next/swc-linux-x64-musl@16.1.7': + optional: true + + '@next/swc-win32-arm64-msvc@16.1.7': + optional: true + + '@next/swc-win32-x64-msvc@16.1.7': + optional: true + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.2.14 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@radix-ui/rect@1.1.1': {} + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.11(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@standard-schema/utils': 0.3.0 + immer: 11.1.4 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 + optionalDependencies: + react: 19.2.4 + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) + + '@rtsao/scc@1.1.0': {} + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@standard-schema/spec@1.0.0': {} + + '@standard-schema/spec@1.1.0': {} + + '@standard-schema/utils@0.3.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tabby_ai/hijri-converter@1.0.5': {} + + '@tailwindcss/node@4.2.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.2 + + '@tailwindcss/oxide-android-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + optional: true + + '@tailwindcss/oxide@4.2.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 + + '@tailwindcss/postcss@4.2.2': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + postcss: 8.5.8 + tailwindcss: 4.2.2 + + '@tanstack/query-core@5.95.2': {} + + '@tanstack/react-query@5.95.2(react@19.2.4)': + dependencies: + '@tanstack/query-core': 5.95.2 + react: 19.2.4 + + '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@tanstack/table-core': 8.21.3 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@tanstack/table-core@8.21.3': {} + + '@ts-morph/common@0.27.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 10.2.4 + path-browserify: 1.0.1 + + '@turbo/darwin-64@2.8.20': + optional: true + + '@turbo/darwin-arm64@2.8.20': + optional: true + + '@turbo/linux-64@2.8.20': + optional: true + + '@turbo/linux-arm64@2.8.20': + optional: true + + '@turbo/windows-64@2.8.20': + optional: true + + '@turbo/windows-arm64@2.8.20': + optional: true + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/d3-array@3.2.2': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@22.15.3': + dependencies: + undici-types: 6.21.0 + + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 + + '@types/react-dom@19.2.2(@types/react@19.2.2)': + dependencies: + '@types/react': 19.2.2 + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@types/react@19.2.2': + dependencies: + csstype: 3.1.3 + + '@types/sinonjs__fake-timers@8.1.1': {} + + '@types/sizzle@2.3.10': {} + + '@types/statuses@2.0.6': {} + + '@types/tmp@0.2.6': {} + + '@types/use-sync-external-store@0.0.6': {} + + '@types/validate-npm-package-name@4.0.2': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 25.5.0 + optional: true + + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.50.0 + eslint: 9.39.1(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.0 + eslint: 9.39.4(jiti@2.6.1) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.50.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2) + '@typescript-eslint/types': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/types': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.50.0': + dependencies: + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 + + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.1(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.4(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.50.0': {} + + '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.50.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 9.0.5 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.3(supports-color@10.2.2) + minimatch: 9.0.5 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.50.0': + dependencies: + '@typescript-eslint/types': 8.50.0 + eslint-visitor-keys: 4.2.1 + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@7.1.4: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-formats@3.0.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + arch@2.2.0: {} + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + + ast-types-flow@0.0.8: {} + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + astral-regex@2.0.0: {} + + async-function@1.0.0: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + aws-sign2@0.7.0: {} + + aws4@1.13.2: {} + + axe-core@4.11.1: {} + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.10.8: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + blob-util@2.0.2: {} + + bluebird@3.7.2: {} + + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3(supports-color@10.2.2) + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.0 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.8 + caniuse-lite: 1.0.30001761 + electron-to-chromium: 1.5.321 + node-releases: 2.0.36 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + bytes@3.1.2: {} + + cachedir@2.4.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001761: {} + + caseless@0.12.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + change-case@5.4.4: {} + + ci-info@4.4.0: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.1: + dependencies: + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + + code-block-writer@13.0.3: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@1.4.0: {} + + colorette@2.0.20: {} + + colors@1.4.0: + optional: true + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.1.0: {} + + commander@14.0.3: {} + + commander@6.2.1: {} + + common-tags@1.8.2: {} + + concat-map@0.0.1: {} + + content-disposition@1.0.1: {} + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cookie@1.1.1: {} + + core-util-is@1.0.2: {} + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@9.0.1(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + csstype@3.2.3: {} + + cypress@15.13.0: + dependencies: + '@cypress/request': 3.0.10 + '@cypress/xvfb': 1.2.4(supports-color@8.1.1) + '@types/sinonjs__fake-timers': 8.1.1 + '@types/sizzle': 2.3.10 + '@types/tmp': 0.2.6 + arch: 2.2.0 + blob-util: 2.0.2 + bluebird: 3.7.2 + buffer: 5.7.1 + cachedir: 2.4.0 + chalk: 4.1.2 + ci-info: 4.4.0 + cli-cursor: 3.1.0 + cli-table3: 0.6.1 + commander: 6.2.1 + common-tags: 1.8.2 + dayjs: 1.11.20 + debug: 4.4.3(supports-color@8.1.1) + enquirer: 2.4.1 + eventemitter2: 6.4.7 + execa: 4.1.0 + executable: 4.1.1 + extract-zip: 2.0.1(supports-color@8.1.1) + figures: 3.2.0 + fs-extra: 9.1.0 + hasha: 5.2.2 + is-installed-globally: 0.4.0 + listr2: 3.14.0(enquirer@2.4.1) + lodash: 4.17.23 + log-symbols: 4.1.0 + minimist: 1.2.8 + ospath: 1.2.2 + pretty-bytes: 5.6.0 + process: 0.11.10 + proxy-from-env: 1.0.0 + request-progress: 3.0.0 + supports-color: 8.1.1 + systeminformation: 5.31.5 + tmp: 0.2.5 + tree-kill: 1.2.2 + tslib: 1.14.1 + untildify: 4.0.0 + yauzl: 2.10.0 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-ease@3.0.1: {} + + d3-format@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@3.1.0: {} + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + damerau-levenshtein@1.0.8: {} + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + data-uri-to-buffer@4.0.1: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + date-fns-jalali@4.1.0-0: {} + + date-fns@4.1.0: {} + + dayjs@1.11.20: {} + + debug@3.2.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.4.3(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + debug@4.4.3(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decimal.js-light@2.5.1: {} + + dedent@1.7.2: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + diff@8.0.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dotenv@16.0.3: {} + + dotenv@17.3.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + eciesjs@0.4.18: + dependencies: + '@ecies/ciphers': 0.2.5(@noble/ciphers@1.3.0) + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + + ee-first@1.1.1: {} + + electron-to-chromium@1.5.321: {} + + embla-carousel-react@8.6.0(react@19.2.4): + dependencies: + embla-carousel: 8.6.0 + embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) + react: 19.2.4 + + embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: {} + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es-toolkit@1.45.1: {} + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@16.1.7(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 16.1.7 + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4(jiti@2.6.1)) + globals: 16.4.0 + typescript-eslint: 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-prettier@10.1.1(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7(supports-color@8.1.1) + is-core-module: 2.16.1 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3(supports-color@10.2.2) + eslint: 9.39.4(jiti@2.6.1) + get-tsconfig: 4.13.7 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)): + dependencies: + debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: + '@typescript-eslint/parser': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7(supports-color@8.1.1) + doctrine: 2.1.0 + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)))(eslint@9.39.4(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@2.6.1)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.11.1 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.4(jiti@2.6.1) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-only-warn@1.1.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + eslint: 9.39.4(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.3.6 + zod-validation-error: 4.0.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.1(jiti@2.6.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.4(jiti@2.6.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-plugin-turbo@2.7.1(eslint@9.39.1(jiti@2.6.1))(turbo@2.8.20): + dependencies: + dotenv: 16.0.3 + eslint: 9.39.1(jiti@2.6.1) + turbo: 2.8.20 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@10.2.2) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + eslint@9.39.4(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@10.2.2) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + eventemitter2@6.4.7: {} + + eventemitter3@5.0.4: {} + + eventsource-parser@3.0.6: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.6 + + execa@4.1.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + + executable@4.1.1: + dependencies: + pify: 2.3.0 + + express-rate-limit@8.3.1(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3(supports-color@10.2.2) + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extend@3.0.2: {} + + extract-zip@2.0.1(supports-color@8.1.1): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + extsprintf@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.0: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.1: + dependencies: + debug: 4.4.3(supports-color@10.2.2) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + forever-agent@0.6.1: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + forwarded@0.2.0: {} + + fresh@2.0.0: {} + + fs-extra@11.3.4: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + fuzzysort@3.1.0: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.5.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-own-enumerable-keys@1.0.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.4 + + get-stream@6.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.13.7: + dependencies: + resolve-pkg-maps: 1.0.0 + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + global-dirs@3.0.1: + dependencies: + ini: 2.0.0 + + globals@14.0.0: {} + + globals@16.4.0: {} + + globals@16.5.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphql@16.13.1: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasha@5.2.2: + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + headers-polyfill@4.0.3: {} + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hono@4.12.8: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-signature@1.4.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.18.0 + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + human-signals@1.1.1: {} + + human-signals@2.1.0: {} + + human-signals@8.0.1: {} + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + immer@10.2.0: {} + + immer@11.1.4: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + index-to-position@1.2.0: {} + + inherits@2.0.4: {} + + ini@2.0.0: {} + + input-otp@1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + internmap@2.0.3: {} + + ip-address@10.1.0: {} + + ipaddr.js@1.9.1: {} + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.3 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ssh@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + + is-interactive@2.0.0: {} + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-node-process@1.2.0: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@3.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@4.1.0: {} + + is-promise@4.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-regexp@3.1.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@2.0.1: {} + + is-stream@4.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-typedarray@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isexe@3.1.5: {} + + isstream@0.1.2: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.6.1: {} + + jose@6.2.2: {} + + js-levenshtein@1.1.6: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsbn@0.1.1: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema-typed@8.0.2: {} + + json-schema@0.4.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsprim@2.0.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + kleur@4.1.5: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lines-and-columns@1.2.4: {} + + listr2@3.14.0(enquirer@2.4.1): + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.4.1 + rxjs: 7.8.2 + through: 2.3.8 + wrap-ansi: 7.0.0 + optionalDependencies: + enquirer: 2.4.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash@4.17.23: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + + log-update@4.0.0: + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lucide-react@0.577.0(react@19.2.4): + dependencies: + react: 19.2.4 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + media-typer@1.1.0: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mimic-fn@2.1.0: {} + + mimic-function@5.0.1: {} + + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.4 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + msw@2.12.14(@types/node@25.5.0)(typescript@5.9.3): + dependencies: + '@inquirer/confirm': 5.1.21(@types/node@25.5.0) + '@mswjs/interceptors': 0.41.3 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.13.1 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.10.1 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.1 + type-fest: 5.5.0 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + + mute-stream@2.0.0: {} + + nanoid@3.3.11: {} + + napi-postinstall@0.3.4: {} + + natural-compare@1.4.0: {} + + negotiator@1.0.0: {} + + next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@next/env': 16.1.7 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.8 + caniuse-lite: 1.0.30001761 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) + optionalDependencies: + '@next/swc-darwin-arm64': 16.1.7 + '@next/swc-darwin-x64': 16.1.7 + '@next/swc-linux-arm64-gnu': 16.1.7 + '@next/swc-linux-arm64-musl': 16.1.7 + '@next/swc-linux-x64-gnu': 16.1.7 + '@next/swc-linux-x64-musl': 16.1.7 + '@next/swc-win32-arm64-msvc': 16.1.7 + '@next/swc-win32-x64-msvc': 16.1.7 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-domexception@1.0.0: {} + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-releases@2.0.36: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + nuqs@2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + dependencies: + '@standard-schema/spec': 1.0.0 + react: 19.2.4 + optionalDependencies: + next: 16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object-treeify@1.1.33: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@11.0.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 + + openapi-fetch@0.14.1: + dependencies: + openapi-typescript-helpers: 0.0.15 + + openapi-typescript-helpers@0.0.15: {} + + openapi-typescript@7.13.0(typescript@5.9.3): + dependencies: + '@redocly/openapi-core': 1.34.11(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 5.9.3 + yargs-parser: 21.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.2.0 + + ospath@1.2.2: {} + + outvariant@1.4.3: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + + parseurl@1.3.3: {} + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-to-regexp@6.3.0: {} + + path-to-regexp@8.3.0: {} + + pend@1.2.0: {} + + performance-now@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pify@2.3.0: {} + + pkce-challenge@5.0.1: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.1.0: {} + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.8: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + powershell-utils@0.1.0: {} + + prelude-ls@1.2.1: {} + + prettier-plugin-tailwindcss@0.7.2(prettier@3.8.1): + dependencies: + prettier: 3.8.1 + + prettier@3.7.4: {} + + prettier@3.8.1: {} + + pretty-bytes@5.6.0: {} + + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.0.0: {} + + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + punycode@2.3.1: {} + + qs@6.14.2: + dependencies: + side-channel: 1.1.0 + + qs@6.15.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + radix-ui@1.4.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + range-parser@1.2.1: {} + + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + + react-day-picker@9.14.0(react@19.2.4): + dependencies: + '@date-fns/tz': 1.4.1 + '@tabby_ai/hijri-converter': 1.0.5 + date-fns: 4.1.0 + date-fns-jalali: 4.1.0-0 + react: 19.2.4 + + react-dom@19.2.0(react@19.2.0): + dependencies: + react: 19.2.0 + scheduler: 0.27.0 + + react-dom@19.2.4(react@19.2.4): + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + + react-hook-form@7.72.0(react@19.2.4): + dependencies: + react: 19.2.4 + + react-is@16.13.1: {} + + react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + redux: 5.0.1 + + react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + + react-resizable-panels@4.7.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + get-nonce: 1.0.1 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + react@19.2.0: {} + + react@19.2.4: {} + + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + recharts@3.8.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@16.13.1)(react@19.2.4)(redux@5.0.1): + dependencies: + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4) + clsx: 2.1.1 + decimal.js-light: 2.5.1 + es-toolkit: 1.45.1 + eventemitter3: 5.0.4 + immer: 10.2.0 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-is: 16.13.1 + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) + reselect: 5.1.1 + tiny-invariant: 1.3.3 + use-sync-external-store: 1.6.0(react@19.2.4) + victory-vendor: 37.3.6 + transitivePeerDependencies: + - '@types/react' + - redux + + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + request-progress@3.0.0: + dependencies: + throttleit: 1.0.1 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + reselect@5.1.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rettime@0.10.1: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + router@2.2.0: + dependencies: + debug: 4.4.3(supports-color@10.2.2) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color + + run-applescript@7.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safer-buffer@2.1.2: {} + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.7.3: {} + + send@1.2.1: + dependencies: + debug: 4.4.3(supports-color@10.2.2) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + + server-only@0.0.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + setprototypeof@1.2.0: {} + + shadcn@4.1.0(@types/node@25.5.0)(typescript@5.9.3): + dependencies: + '@babel/core': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@dotenvx/dotenvx': 1.57.2 + '@modelcontextprotocol/sdk': 1.27.1(zod@3.25.76) + '@types/validate-npm-package-name': 4.0.2 + browserslist: 4.28.1 + commander: 14.0.3 + cosmiconfig: 9.0.1(typescript@5.9.3) + dedent: 1.7.2 + deepmerge: 4.3.1 + diff: 8.0.3 + execa: 9.6.1 + fast-glob: 3.3.3 + fs-extra: 11.3.4 + fuzzysort: 3.1.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + kleur: 4.1.5 + msw: 2.12.14(@types/node@25.5.0)(typescript@5.9.3) + node-fetch: 3.3.2 + open: 11.0.0 + ora: 8.2.0 + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 + prompts: 2.4.2 + recast: 0.23.11 + stringify-object: 5.0.0 + tailwind-merge: 3.5.0 + ts-morph: 26.0.0 + tsconfig-paths: 4.2.0 + validate-npm-package-name: 7.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/node' + - babel-plugin-macros + - supports-color + - typescript + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + stable-hash@0.0.5: {} + + statuses@2.0.2: {} + + stdin-discarder@0.2.2: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + strict-event-emitter@0.5.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + stringify-object@5.0.0: + dependencies: + get-own-enumerable-keys: 1.0.0 + is-obj: 3.0.0 + is-regexp: 3.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + strip-bom@3.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4): + dependencies: + client-only: 0.0.1 + react: 19.2.4 + optionalDependencies: + '@babel/core': 7.29.0 + + supports-color@10.2.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + systeminformation@5.31.5: {} + + tabbable@6.4.0: {} + + tagged-tag@1.0.0: {} + + tailwind-merge@3.5.0: {} + + tailwindcss@4.2.2: {} + + tapable@2.3.0: {} + + throttleit@1.0.1: {} + + through@2.3.8: {} + + tiny-invariant@1.3.3: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tldts-core@6.1.86: {} + + tldts-core@7.0.27: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + + tldts@7.0.27: + dependencies: + tldts-core: 7.0.27 + + tmp@0.2.5: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + + tough-cookie@6.0.1: + dependencies: + tldts: 7.0.27 + + tree-kill@1.2.2: {} + + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-morph@26.0.0: + dependencies: + '@ts-morph/common': 0.27.0 + code-block-writer: 13.0.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + turbo@2.8.20: + optionalDependencies: + '@turbo/darwin-64': 2.8.20 + '@turbo/darwin-arm64': 2.8.20 + '@turbo/linux-64': 2.8.20 + '@turbo/linux-arm64': 2.8.20 + '@turbo/windows-64': 2.8.20 + '@turbo/windows-arm64': 2.8.20 + + tw-animate-css@1.4.0: {} + + tweetnacl@0.14.5: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.21.3: {} + + type-fest@0.8.1: {} + + type-fest@4.41.0: {} + + type-fest@5.5.0: + dependencies: + tagged-tag: 1.0.0 + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + typescript-eslint@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.2: {} + + typescript@5.9.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.21.0: {} + + undici-types@7.18.2: {} + + unicorn-magic@0.3.0: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + + until-async@3.0.2: {} + + untildify@4.0.0: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js-replace@1.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.4 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.14 + + use-sync-external-store@1.6.0(react@19.2.4): + dependencies: + react: 19.2.4 + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + validate-npm-package-name@7.0.2: {} + + vary@1.1.2: {} + + vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + victory-vendor@37.3.6: + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + + web-streams-polyfill@3.3.3: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@4.0.0: + dependencies: + isexe: 3.1.5 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.1 + powershell-utils: 0.1.0 + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yaml-ast-parser@0.0.43: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.3: {} + + yoctocolors@2.1.2: {} + + zod-to-json-schema@3.25.1(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod-validation-error@4.0.2(zod@4.3.6): + dependencies: + zod: 4.3.6 + + zod@3.25.76: {} + + zod@4.3.6: {} + + zustand@5.0.12(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): + optionalDependencies: + '@types/react': 19.2.14 + immer: 11.1.4 + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..3ff5faa --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - "apps/*" + - "packages/*" diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..93f7e37 --- /dev/null +++ b/turbo.json @@ -0,0 +1,46 @@ +{ + "$schema": "https://turborepo.dev/schema.json", + "ui": "tui", + + "tasks": { + "build": { + "dependsOn": [ + "^build" + ], + "inputs": [ + "$TURBO_DEFAULT$", + ".env*" + ], + "outputs": [ + ".next/**", + "!.next/cache/**", + "open-api/**", + "types/**" + ] + }, + "lint": { + "dependsOn": [ + "^lint" + ] + }, + "check-types": { + "dependsOn": [ + "^check-types" + ] + }, + "dev": { + "cache": false, + "persistent": true + }, + "start": { + "cache": false, + "persistent": true + }, + "test:e2e": { + "dependsOn": [ + "build" + ], + "cache": false + } + } +} \ No newline at end of file