Make APIs more similar
This commit is contained in:
parent
9f0e1f8b61
commit
c40d7d056e
57 changed files with 3994 additions and 1801 deletions
130
apps/bridge-signal/src/routes.ts
Normal file
130
apps/bridge-signal/src/routes.ts
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
import { createLogger } from "@link-stack/logger";
|
||||
import { Hono } from "hono";
|
||||
|
||||
import type SignalService from "./service.ts";
|
||||
|
||||
const logger = createLogger("bridge-signal-routes");
|
||||
|
||||
const errorMessage = (error: unknown): string => (error instanceof Error ? error.message : String(error));
|
||||
|
||||
export function createRoutes(service: SignalService): Hono {
|
||||
const app = new Hono();
|
||||
|
||||
// Start device linking
|
||||
app.post("/api/bots/:id/register", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
const { phoneNumber, deviceName } = await c.req.json<{
|
||||
phoneNumber: string;
|
||||
deviceName?: string;
|
||||
}>();
|
||||
|
||||
try {
|
||||
const result = await service.register(id, phoneNumber, deviceName);
|
||||
logger.info({ id }, "Device linking started");
|
||||
return c.json(result);
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to start device linking");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Bot status
|
||||
app.get("/api/bots/:id", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
try {
|
||||
return c.json(await service.getBot(id));
|
||||
} catch (error) {
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Send message
|
||||
app.post("/api/bots/:id/send", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
const { recipient, message, attachments, autoGroup } = await c.req.json<{
|
||||
recipient: string;
|
||||
message: string;
|
||||
attachments?: Array<{ data: string; filename: string; mime_type: string }>;
|
||||
autoGroup?: { ticketNumber: string };
|
||||
}>();
|
||||
|
||||
try {
|
||||
const result = await service.send(id, recipient, message, attachments, autoGroup);
|
||||
logger.info({ id, recipient: result.recipient, attachmentCount: attachments?.length || 0 }, "Sent message");
|
||||
return c.json({ result });
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to send message");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Unregister bot
|
||||
app.post("/api/bots/:id/unregister", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
try {
|
||||
await service.unregister(id);
|
||||
logger.info({ id }, "Bot unregistered");
|
||||
return c.body(null, 200);
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to unregister bot");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Create group
|
||||
app.post("/api/bots/:id/groups", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
const { name, members, description } = await c.req.json<{
|
||||
name: string;
|
||||
members: string[];
|
||||
description?: string;
|
||||
}>();
|
||||
|
||||
try {
|
||||
const result = await service.createGroup(id, name, members, description);
|
||||
logger.info({ id, groupId: result.groupId }, "Group created");
|
||||
return c.json(result);
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to create group");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Update group
|
||||
app.put("/api/bots/:id/groups/:groupId", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
const groupId = c.req.param("groupId");
|
||||
const { name, description } = await c.req.json<{
|
||||
name?: string;
|
||||
description?: string;
|
||||
}>();
|
||||
|
||||
try {
|
||||
await service.updateGroup(id, groupId, name, description);
|
||||
logger.info({ id, groupId }, "Group updated");
|
||||
return c.json({ success: true });
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to update group");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// List groups
|
||||
app.get("/api/bots/:id/groups", async (c) => {
|
||||
const id = c.req.param("id");
|
||||
try {
|
||||
const groups = await service.listGroups(id);
|
||||
return c.json(groups);
|
||||
} catch (error) {
|
||||
logger.error({ id, error: errorMessage(error) }, "Failed to list groups");
|
||||
return c.json({ error: errorMessage(error) }, 500);
|
||||
}
|
||||
});
|
||||
|
||||
// Health check
|
||||
app.get("/api/health", (c) => {
|
||||
return c.json({ status: "ok" });
|
||||
});
|
||||
|
||||
return app;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue