Adjust create and update to be many to one

This commit is contained in:
Owen
2026-03-18 20:54:49 -07:00
parent 102a235407
commit d8b511b198
2 changed files with 193 additions and 149 deletions

View File

@@ -8,6 +8,7 @@ import {
SiteResource,
siteResources,
sites,
siteSiteResources,
userSiteResources
} from "@server/db";
import { getUniqueSiteResourceName } from "@server/db/names";
@@ -23,7 +24,7 @@ import response from "@server/lib/response";
import logger from "@server/logger";
import { OpenAPITags, registry } from "@server/openApi";
import HttpCode from "@server/types/HttpCode";
import { and, eq } from "drizzle-orm";
import { and, eq, inArray } from "drizzle-orm";
import { NextFunction, Request, Response } from "express";
import createHttpError from "http-errors";
import { z } from "zod";
@@ -37,7 +38,7 @@ const createSiteResourceSchema = z
.strictObject({
name: z.string().min(1).max(255),
mode: z.enum(["host", "cidr", "port"]),
siteId: z.int(),
siteIds: z.array(z.int()),
// protocol: z.enum(["tcp", "udp"]).optional(),
// proxyPort: z.int().positive().optional(),
// destinationPort: z.int().positive().optional(),
@@ -159,7 +160,7 @@ export async function createSiteResource(
const { orgId } = parsedParams.data;
const {
name,
siteId,
siteIds,
mode,
// protocol,
// proxyPort,
@@ -178,14 +179,14 @@ export async function createSiteResource(
} = parsedBody.data;
// Verify the site exists and belongs to the org
const [site] = await db
const sitesToAssign = await db
.select()
.from(sites)
.where(and(eq(sites.siteId, siteId), eq(sites.orgId, orgId)))
.where(and(inArray(sites.siteId, siteIds), eq(sites.orgId, orgId)))
.limit(1);
if (!site) {
return next(createHttpError(HttpCode.NOT_FOUND, "Site not found"));
if (sitesToAssign.length !== siteIds.length) {
return next(createHttpError(HttpCode.NOT_FOUND, "Some site not found"));
}
const [org] = await db
@@ -289,7 +290,6 @@ export async function createSiteResource(
await db.transaction(async (trx) => {
// Create the site resource
const insertValues: typeof siteResources.$inferInsert = {
siteId,
niceId,
orgId,
name,
@@ -317,6 +317,13 @@ export async function createSiteResource(
//////////////////// update the associations ////////////////////
for (const siteId of siteIds) {
await trx.insert(siteSiteResources).values({
siteId: siteId,
siteResourceId: siteResourceId
});
}
const [adminRole] = await trx
.select()
.from(roles)
@@ -359,17 +366,18 @@ export async function createSiteResource(
);
}
const [newt] = await trx
.select()
.from(newts)
.where(eq(newts.siteId, site.siteId))
.limit(1);
// Not sure what this is doing??
// const [newt] = await trx
// .select()
// .from(newts)
// .where(eq(newts.siteId, site.siteId))
// .limit(1);
if (!newt) {
return next(
createHttpError(HttpCode.NOT_FOUND, "Newt not found")
);
}
// if (!newt) {
// return next(
// createHttpError(HttpCode.NOT_FOUND, "Newt not found")
// );
// }
await rebuildClientAssociationsFromSiteResource(
newSiteResource,
@@ -387,7 +395,7 @@ export async function createSiteResource(
}
logger.info(
`Created site resource ${newSiteResource.siteResourceId} for site ${siteId}`
`Created site resource ${newSiteResource.siteResourceId} for org ${orgId}`
);
return response(res, {