Fix resource new id number

This commit is contained in:
Owen Schwartz 2024-10-26 12:15:03 -04:00
parent c6d4c4db20
commit 261b3c7e31
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
19 changed files with 31 additions and 28 deletions

View file

@ -38,7 +38,7 @@ export const resources = sqliteTable("resources", {
export const targets = sqliteTable("targets", {
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
resourceId: text("resourceId").references(() => resources.resourceId, {
resourceId: integer("resourceId").references(() => resources.resourceId, {
onDelete: "cascade",
}),
ip: text("ip").notNull(),
@ -188,7 +188,7 @@ export const roleResources = sqliteTable("roleResources", {
roleId: integer("roleId")
.notNull()
.references(() => roles.roleId, { onDelete: "cascade" }),
resourceId: text("resourceId")
resourceId: integer("resourceId")
.notNull()
.references(() => resources.resourceId, { onDelete: "cascade" }),
});
@ -197,7 +197,7 @@ export const userResources = sqliteTable("userResources", {
userId: text("userId")
.notNull()
.references(() => users.userId, { onDelete: "cascade" }),
resourceId: text("resourceId")
resourceId: integer("resourceId")
.notNull()
.references(() => resources.resourceId, { onDelete: "cascade" }),
});

View file

@ -65,10 +65,13 @@ export async function createOrg(req: Request, res: Response, next: NextFunction)
);
}
// create a url from config.app.base_url and get the hostname
const domain = new URL(config.app.base_url).hostname;
const newOrg = await db.insert(orgs).values({
orgId,
name,
domain: config.app.base_domain
domain
}).returning();
const roleId = await createSuperuserRole(newOrg[0].orgId);

View file

@ -75,11 +75,11 @@ export async function createResource(req: Request, res: Response, next: NextFunc
}
// Generate a unique resourceId
const resourceId = `${subdomain}.${org[0].orgId}.${org[0].domain}`;
const fullDomain = `${subdomain}.${org[0].orgId}.${org[0].domain}`;
// Create new resource in the database
const newResource = await db.insert(resources).values({
resourceId,
fullDomain,
siteId,
orgId,
name,

View file

@ -11,7 +11,7 @@ import logger from '@server/logger';
// Define Zod schema for request parameters validation
const deleteResourceSchema = z.object({
resourceId: z.string()
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
export async function deleteResource(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -11,11 +11,11 @@ import logger from '@server/logger';
// Define Zod schema for request parameters validation
const getResourceSchema = z.object({
resourceId: z.string()
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
export type GetResourceResponse = {
resourceId: string;
resourceId: number;
siteId: number;
orgId: string;
name: string;

View file

@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
import logger from '@server/logger';
const listResourceRolesSchema = z.object({
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
export async function listResourceRoles(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -41,7 +41,7 @@ const listResourcesSchema = z.object({
});
function queryResources(
accessibleResourceIds: string[],
accessibleResourceIds: number[],
siteId?: number,
orgId?: string,
) {
@ -141,7 +141,7 @@ export async function listResources(
// Get the list of resources the user has access to
const accessibleResources = await db
.select({
resourceId: sql<string>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
resourceId: sql<number>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
})
.from(userResources)
.fullJoin(

View file

@ -11,7 +11,7 @@ import logger from '@server/logger';
// Define Zod schema for request parameters validation
const updateResourceParamsSchema = z.object({
resourceId: z.string()
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
// Define Zod schema for request body validation

View file

@ -13,7 +13,7 @@ const addRoleResourceParamsSchema = z.object({
});
const addRoleResourceSchema = z.object({
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
export async function addRoleResource(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -14,7 +14,7 @@ const removeRoleResourceParamsSchema = z.object({
});
const removeRoleResourceSchema = z.object({
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
export async function removeRoleResource(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -9,7 +9,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
import logger from '@server/logger';
const createTargetParamsSchema = z.object({
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
const createTargetSchema = z.object({

View file

@ -11,7 +11,7 @@ import { fromError } from "zod-validation-error";
import logger from "@server/logger";
const listTargetsParamsSchema = z.object({
resourceId: z.string()
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
});
const listTargetsSchema = z.object({
@ -29,7 +29,7 @@ const listTargetsSchema = z.object({
.pipe(z.number().int().nonnegative()),
});
function queryTargets(resourceId: string) {
function queryTargets(resourceId: number) {
let baseQuery = db
.select({
targetId: targets.targetId,

View file

@ -10,7 +10,7 @@ import logger from '@server/logger';
const addUserResourceSchema = z.object({
userId: z.string(),
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive())
});
export async function addUserResource(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -11,7 +11,7 @@ import logger from '@server/logger';
const removeUserResourceSchema = z.object({
userId: z.string(),
resourceId: z.string(),
resourceId: z.string().transform(Number).pipe(z.number().int().positive())
});
export async function removeUserResource(req: Request, res: Response, next: NextFunction): Promise<any> {

View file

@ -22,7 +22,7 @@ export const metadata: Metadata = {
interface SettingsLayoutProps {
children: React.ReactNode;
params: Promise<{ resourceId: string; orgId: string }>;
params: Promise<{ resourceId: number | string; orgId: string }>;
}
export default async function SettingsLayout(props: SettingsLayoutProps) {

View file

@ -5,7 +5,7 @@ import { GeneralForm } from "./components/GeneralForm";
export default async function SettingsPage(
props: {
params: Promise<{ resourceId: string }>;
params: Promise<{ resourceId: number | string }>;
}
) {
const params = await props.params;

View file

@ -27,7 +27,7 @@ const isValidIPAddress = (ip: string) => {
export default function ReverseProxyTargets(
props: {
params: Promise<{ resourceId: string }>;
params: Promise<{ resourceId: number }>;
}
) {
const params = use(props.params);

View file

@ -15,7 +15,7 @@ import { useRouter } from "next/navigation";
import api from "@app/api";
export type ResourceRow = {
id: string;
id: number;
name: string;
orgId: string;
domain: string;
@ -66,7 +66,7 @@ export const columns: ColumnDef<ResourceRow>[] = [
const resourceRow = row.original;
const deleteResource = (resourceId: string) => {
const deleteResource = (resourceId: number) => {
api.delete(`/resource/${resourceId}`)
.catch((e) => {
console.error("Error deleting resource", e);

View file

@ -23,7 +23,7 @@ export default async function Page(props: ResourcesPageProps) {
const resourceRows: ResourceRow[] = resources.map((resource) => {
return {
id: resource.resourceId.toString(),
id: resource.resourceId,
name: resource.name,
orgId: params.orgId,
domain: resource.subdomain || "",