Files
fullstack-starter/src/server/api/contracts/battery.contract.ts
T

36 lines
1.1 KiB
TypeScript

import { oc } from '@orpc/contract'
import { z } from 'zod'
import {
BATTERY_LIST_SORT,
BATTERY_LIST_SORT_VALUES,
batteriesResponseSchema,
dashboardSnapshotSchema,
POWER_STATUS,
} from '@/domain/battery'
export const dashboard = oc.input(z.void()).output(dashboardSnapshotSchema)
const batteryListInputSchema = z.object({
pageSize: z.number().int().min(1).max(100).default(50),
cursor: z.string().min(1).max(1024).optional(),
search: z.preprocess(
(value) => (typeof value === 'string' ? value.trim() || undefined : value),
z.string().min(1).max(100).optional(),
),
lowPower: z.boolean().optional(),
powerStatus: z
.union([z.literal(POWER_STATUS.NOT_CHARGING), z.literal(POWER_STATUS.CHARGING), z.literal(POWER_STATUS.FULL)])
.optional(),
sort: z.enum(BATTERY_LIST_SORT_VALUES).default(BATTERY_LIST_SORT.CREATED_AT_DESC),
})
export const batteries = oc.input(batteryListInputSchema).output(batteriesResponseSchema)
export const history = oc
.input(
z.object({
mac: z.string().min(1),
}),
)
.output(batteriesResponseSchema)