Fix integration site resource lookup

This commit is contained in:
Shubham Singh
2026-07-30 15:34:00 +05:30
parent 146c287aba
commit c11fc86b63
2 changed files with 69 additions and 13 deletions
@@ -0,0 +1,58 @@
import { assertEquals } from "@test/assert";
import { getSiteResourceParamsSchema } from "./getSiteResource";
function testSiteResourceIdOnlyParams() {
const result = getSiteResourceParamsSchema.safeParse({
siteResourceId: "42"
});
assertEquals(
result.success,
true,
"siteResourceId-only integration routes should pass validation"
);
if (result.success) {
assertEquals(
result.data.siteResourceId,
42,
"siteResourceId should be parsed as a number"
);
assertEquals(
result.data.orgId,
undefined,
"orgId should remain optional"
);
}
}
function testOrgScopedParamsRemainSupported() {
const result = getSiteResourceParamsSchema.safeParse({
siteResourceId: "42",
orgId: "org-id"
});
assertEquals(
result.success,
true,
"org-scoped routes should continue to pass validation"
);
}
function testInvalidSiteResourceId() {
const result = getSiteResourceParamsSchema.safeParse({
siteResourceId: "not-a-number"
});
assertEquals(
result.success,
false,
"non-numeric siteResourceIds should fail validation"
);
}
testSiteResourceIdOnlyParams();
testOrgScopedParamsRemainSupported();
testInvalidSiteResourceId();
console.log("All getSiteResource parameter validation tests passed.");
+8 -10
View File
@@ -10,7 +10,7 @@ import { fromError } from "zod-validation-error";
import logger from "@server/logger"; import logger from "@server/logger";
import { OpenAPITags, registry } from "@server/openApi"; import { OpenAPITags, registry } from "@server/openApi";
const getSiteResourceParamsSchema = z.strictObject({ export const getSiteResourceParamsSchema = z.strictObject({
siteResourceId: z siteResourceId: z
.string() .string()
.optional() .optional()
@@ -18,19 +18,21 @@ const getSiteResourceParamsSchema = z.strictObject({
.pipe(z.int().positive().optional()) .pipe(z.int().positive().optional())
.optional(), .optional(),
niceId: z.string().optional(), niceId: z.string().optional(),
orgId: z.string() orgId: z.string().optional()
}); });
async function query(siteResourceId?: number, niceId?: string, orgId?: string) { async function query(siteResourceId?: number, niceId?: string, orgId?: string) {
if (siteResourceId && orgId) { if (siteResourceId) {
const [siteResource] = await db const [siteResource] = await db
.select() .select()
.from(siteResources) .from(siteResources)
.where( .where(
and( orgId
? and(
eq(siteResources.siteResourceId, siteResourceId), eq(siteResources.siteResourceId, siteResourceId),
eq(siteResources.orgId, orgId) eq(siteResources.orgId, orgId)
) )
: eq(siteResources.siteResourceId, siteResourceId)
) )
.limit(1); .limit(1);
return siteResource; return siteResource;
@@ -60,9 +62,7 @@ registry.registerPath({
tags: [OpenAPITags.PrivateResourceLegacy], tags: [OpenAPITags.PrivateResourceLegacy],
request: { request: {
params: z.object({ params: z.object({
siteResourceId: z.number(), siteResourceId: z.number()
siteId: z.number(),
orgId: z.string()
}) })
}, },
responses: { responses: {
@@ -90,9 +90,7 @@ registry.registerPath({
tags: [OpenAPITags.PrivateResource], tags: [OpenAPITags.PrivateResource],
request: { request: {
params: z.object({ params: z.object({
siteResourceId: z.number(), siteResourceId: z.number()
siteId: z.number(),
orgId: z.string()
}) })
}, },
responses: { responses: {