36 lines
1.1 KiB
TypeScript
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)
|