Files
gitea-mirror/src/pages/api/organizations/[id].ts
2025-07-10 23:15:37 +05:30

64 lines
1.8 KiB
TypeScript

import type { APIRoute } from "astro";
import { db, organizations } from "@/lib/db";
import { eq, and } from "drizzle-orm";
import { createSecureErrorResponse } from "@/lib/utils";
import { requireAuth } from "@/lib/utils/auth-helpers";
export const PATCH: APIRoute = async (context) => {
try {
// Check authentication
const { user, response } = await requireAuth(context);
if (response) return response;
const userId = user!.id;
const orgId = context.params.id;
if (!orgId) {
return new Response(JSON.stringify({ error: "Organization ID is required" }), {
status: 400,
headers: { "Content-Type": "application/json" },
});
}
const body = await context.request.json();
const { destinationOrg } = body;
// Validate that the organization belongs to the user
const [existingOrg] = await db
.select()
.from(organizations)
.where(and(eq(organizations.id, orgId), eq(organizations.userId, userId)))
.limit(1);
if (!existingOrg) {
return new Response(JSON.stringify({ error: "Organization not found" }), {
status: 404,
headers: { "Content-Type": "application/json" },
});
}
// Update the organization's destination override
await db
.update(organizations)
.set({
destinationOrg: destinationOrg || null,
updatedAt: new Date(),
})
.where(eq(organizations.id, orgId));
return new Response(
JSON.stringify({
success: true,
message: "Organization destination updated successfully",
destinationOrg: destinationOrg || null,
}),
{
status: 200,
headers: { "Content-Type": "application/json" },
}
);
} catch (error) {
return createSecureErrorResponse(error, "Update organization destination", 500);
}
};