mockup API device

This commit is contained in:
2025-10-08 22:13:24 +07:00
parent 4ec61fa51e
commit af4f6a3eea
11 changed files with 207 additions and 152 deletions
+52
View File
@@ -0,0 +1,52 @@
import { z } from 'zod'
// Request body schema
export const deviceCommandBody = z.object({
merchantName: z.string(),
floorName: z.string(),
unitNumber: z.string(),
deviceName: z.string(),
roomName: z.string(),
deviceType: z.string(),
commandType: z.string(),
towerNumber: z.string(),
timestamp: z.string().datetime(), // ISO8601
nonce: z.string(),
payload: z.object({
AC: z.string(),
Temp: z.number(),
}),
signature: z.string(),
})
export type DeviceCommandBody = z.infer<typeof deviceCommandBody>
// Response schemas
export const deviceCommandResponseSchema = {
200: z.object({
status: z.literal('success'),
message: z.literal('Command accepted'),
receivedAt: z.string().datetime(),
}),
400: z.object({
status: z.literal('invalid_request'),
message: z.literal('Invalid request format'),
}),
401: z.union([
z.object({
status: z.literal('invalid_signature'),
message: z.literal('Signature mismatch'),
}),
z.object({
status: z.literal('invalid_api_key'),
message: z.literal('API Key is not valid'),
}),
]),
403: z.object({
status: z.literal('replay_attack_detected'),
message: z.literal('Timestamp or nonce is invalid/has been reused'),
}),
500: z.object({
status: z.literal('internal_error'),
message: z.literal('Server error'),
}),
}