feat: 添加设备注册 API 并重构安装横幅组件
This commit is contained in:
@@ -11,24 +11,29 @@ import {
|
||||
} from "drizzle-orm/mysql-core";
|
||||
import { sql } from "drizzle-orm";
|
||||
|
||||
export const claws = mysqlTable("claws", {
|
||||
id: varchar("id", { length: 21 }).primaryKey(),
|
||||
apiKey: varchar("api_key", { length: 64 }).notNull().unique(),
|
||||
name: varchar("name", { length: 100 }).notNull(),
|
||||
platform: varchar("platform", { length: 20 }),
|
||||
model: varchar("model", { length: 50 }),
|
||||
ip: varchar("ip", { length: 45 }),
|
||||
latitude: decimal("latitude", { precision: 10, scale: 7 }),
|
||||
longitude: decimal("longitude", { precision: 10, scale: 7 }),
|
||||
city: varchar("city", { length: 100 }),
|
||||
country: varchar("country", { length: 100 }),
|
||||
countryCode: varchar("country_code", { length: 5 }),
|
||||
region: varchar("region", { length: 50 }),
|
||||
lastHeartbeat: datetime("last_heartbeat"),
|
||||
totalTasks: int("total_tasks").default(0),
|
||||
createdAt: datetime("created_at").default(sql`NOW()`),
|
||||
updatedAt: datetime("updated_at").default(sql`NOW()`),
|
||||
});
|
||||
export const claws = mysqlTable(
|
||||
"claws",
|
||||
{
|
||||
id: varchar("id", { length: 21 }).primaryKey(),
|
||||
apiKey: varchar("api_key", { length: 64 }).notNull().unique(),
|
||||
deviceId: varchar("device_id", { length: 64 }),
|
||||
name: varchar("name", { length: 100 }).notNull(),
|
||||
platform: varchar("platform", { length: 20 }),
|
||||
model: varchar("model", { length: 50 }),
|
||||
ip: varchar("ip", { length: 45 }),
|
||||
latitude: decimal("latitude", { precision: 10, scale: 7 }),
|
||||
longitude: decimal("longitude", { precision: 10, scale: 7 }),
|
||||
city: varchar("city", { length: 100 }),
|
||||
country: varchar("country", { length: 100 }),
|
||||
countryCode: varchar("country_code", { length: 5 }),
|
||||
region: varchar("region", { length: 50 }),
|
||||
lastHeartbeat: datetime("last_heartbeat"),
|
||||
totalTasks: int("total_tasks").default(0),
|
||||
createdAt: datetime("created_at").default(sql`NOW()`),
|
||||
updatedAt: datetime("updated_at").default(sql`NOW()`),
|
||||
},
|
||||
(table) => [uniqueIndex("claws_device_id_unq").on(table.deviceId)]
|
||||
);
|
||||
|
||||
export const heartbeats = mysqlTable(
|
||||
"heartbeats",
|
||||
|
||||
@@ -27,7 +27,26 @@ export const tokenSchema = z.object({
|
||||
date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
||||
});
|
||||
|
||||
export const deviceRegisterSchema = z.object({
|
||||
deviceId: z.string().min(1).max(64),
|
||||
name: z.string().min(1).max(100).optional(),
|
||||
platform: z.string().max(50).optional(),
|
||||
browser: z.string().max(100).optional(),
|
||||
screen: z.string().max(20).optional(),
|
||||
language: z.string().max(10).optional(),
|
||||
});
|
||||
|
||||
export const updateNameSchema = z.object({
|
||||
name: z
|
||||
.string()
|
||||
.min(1)
|
||||
.max(30)
|
||||
.regex(/^[A-Za-z0-9_-]+$/, "Only alphanumeric, hyphens, and underscores"),
|
||||
});
|
||||
|
||||
export type RegisterInput = z.infer<typeof registerSchema>;
|
||||
export type HeartbeatInput = z.infer<typeof heartbeatSchema>;
|
||||
export type TaskInput = z.infer<typeof taskSchema>;
|
||||
export type TokenInput = z.infer<typeof tokenSchema>;
|
||||
export type DeviceRegisterInput = z.infer<typeof deviceRegisterSchema>;
|
||||
export type UpdateNameInput = z.infer<typeof updateNameSchema>;
|
||||
|
||||
Reference in New Issue
Block a user