Merge pull request #3510 from shubhamsinnh/codex/fix-integration-site-resource

Fix integration API site resource lookup
This commit is contained in:
Owen Schwartz
2026-09-21 15:01:37 -04:00
committed by GitHub
2 changed files with 66 additions and 6 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.");
@@ -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()
@@ -22,15 +22,17 @@ const getSiteResourceParamsSchema = z.strictObject({
}); });
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
eq(siteResources.siteResourceId, siteResourceId), ? and(
eq(siteResources.orgId, orgId) eq(siteResources.siteResourceId, siteResourceId),
) eq(siteResources.orgId, orgId)
)
: eq(siteResources.siteResourceId, siteResourceId)
) )
.limit(1); .limit(1);
return siteResource; return siteResource;