get contacts from emailid,ids (#99)

This commit is contained in:
KM Koushik
2025-02-06 00:27:03 +11:00
committed by GitHub
parent d224be07a2
commit b9d9037ec7
5 changed files with 270 additions and 81 deletions

View File

@@ -0,0 +1,82 @@
import { createRoute, z } from "@hono/zod-openapi";
import { PublicAPIApp } from "~/server/public-api/hono";
import { getTeamFromToken } from "~/server/public-api/auth";
import { db } from "~/server/db";
import { UnsendApiError } from "../../api-error";
import { getContactBook } from "../../api-utils";
const route = createRoute({
method: "get",
path: "/v1/contactBooks/{contactBookId}/contacts",
request: {
params: z.object({
contactBookId: z.string().openapi({
param: {
name: "contactBookId",
in: "path",
},
example: "cuiwqdj74rygf74",
}),
}),
query: z.object({
emails: z.string().optional(),
page: z.number().optional(),
limit: z.number().optional(),
ids: z.string().optional(),
}),
},
responses: {
200: {
content: {
"application/json": {
schema: z.array(
z.object({
id: z.string(),
firstName: z.string().optional().nullable(),
lastName: z.string().optional().nullable(),
email: z.string(),
subscribed: z.boolean().default(true),
properties: z.record(z.string()),
contactBookId: z.string(),
createdAt: z.string(),
updatedAt: z.string(),
})
),
},
},
description: "Retrieve multiple contacts",
},
},
});
function getContacts(app: PublicAPIApp) {
app.openapi(route, async (c) => {
const team = await getTeamFromToken(c);
await getContactBook(c, team.id);
const contactIds = c.req.query("ids")?.split(",");
const emails = c.req.query("emails")?.split(",");
const page = c.req.query("page") ? Number(c.req.query("page")) : 1;
const limit = c.req.query("limit") ? Number(c.req.query("limit")) : 5000;
const contacts = await db.contact.findMany({
where: {
id: { in: contactIds },
email: { in: emails },
},
skip: (page - 1) * limit,
take: limit,
});
// Ensure properties is a Record<string, string>
const sanitizedContacts = contacts.map((contact) => ({
...contact,
properties: contact.properties as Record<string, string>,
}));
return c.json(sanitizedContacts);
});
}
export default getContacts;

View File

@@ -7,6 +7,9 @@ import updateContactInfo from "./api/contacts/update-contact";
import getContact from "./api/contacts/get-contact";
import updateEmailScheduledAt from "./api/emails/update-email";
import cancelScheduledEmail from "./api/emails/cancel-email";
import getContacts from "./api/contacts/get-contacts";
import upsertContact from "./api/contacts/upsert-contact";
import deleteContact from "./api/contacts/delete-contact";
export const app = getApp();
@@ -23,5 +26,8 @@ cancelScheduledEmail(app);
addContact(app);
updateContactInfo(app);
getContact(app);
getContacts(app);
upsertContact(app);
deleteContact(app);
export default app;