generated from corrad-software/corrad-af-2024
126 lines
3.3 KiB
JavaScript
126 lines
3.3 KiB
JavaScript
import prisma from "../../utils/prisma";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// Get organization ID from route
|
|
const id = parseInt(event.context.params.id);
|
|
|
|
if (isNaN(id)) {
|
|
return {
|
|
statusCode: 400,
|
|
message: "Invalid organization ID"
|
|
};
|
|
}
|
|
|
|
// Get request body
|
|
const body = await readBody(event);
|
|
|
|
console.log("Request body:", JSON.stringify(body));
|
|
|
|
// Validate required fields
|
|
if (!body || typeof body !== 'object') {
|
|
return {
|
|
statusCode: 400,
|
|
message: "Invalid request body, expected JSON object",
|
|
received: body
|
|
};
|
|
}
|
|
|
|
if (!body.org_name) {
|
|
return {
|
|
statusCode: 400,
|
|
message: "Organization name is required",
|
|
receivedBody: body
|
|
};
|
|
}
|
|
|
|
// Check if organization exists
|
|
const existingOrg = await prisma.organization.findUnique({
|
|
where: {
|
|
org_id: id
|
|
}
|
|
});
|
|
|
|
if (!existingOrg) {
|
|
return {
|
|
statusCode: 404,
|
|
message: "Organization not found"
|
|
};
|
|
}
|
|
|
|
// Check if the name is already taken by another organization
|
|
if (body.org_name !== existingOrg.org_name) {
|
|
const nameExists = await prisma.organization.findFirst({
|
|
where: {
|
|
org_name: body.org_name,
|
|
org_id: {
|
|
not: id
|
|
}
|
|
}
|
|
});
|
|
|
|
if (nameExists) {
|
|
return {
|
|
statusCode: 409,
|
|
message: "Organization with this name already exists"
|
|
};
|
|
}
|
|
}
|
|
|
|
// Update organization
|
|
const organization = await prisma.organization.update({
|
|
where: {
|
|
org_id: id
|
|
},
|
|
data: {
|
|
org_name: body.org_name,
|
|
org_address1: body.org_address1 !== undefined ? body.org_address1 : existingOrg.org_address1,
|
|
org_address2: body.org_address2 !== undefined ? body.org_address2 : existingOrg.org_address2,
|
|
org_postcode: body.org_postcode !== undefined ? parseInt(body.org_postcode) : existingOrg.org_postcode,
|
|
org_state: body.org_state !== undefined ? body.org_state : existingOrg.org_state,
|
|
org_country: body.org_country !== undefined ? body.org_country : existingOrg.org_country,
|
|
org_active: body.org_active !== undefined ? parseInt(body.org_active) : existingOrg.org_active
|
|
}
|
|
});
|
|
|
|
// Create audit log
|
|
await prisma.audit.create({
|
|
data: {
|
|
auditIP: getRequestIP(event),
|
|
auditURL: getRequestURL(event),
|
|
auditURLMethod: 'PUT',
|
|
auditAction: 'UPDATE_ORGANIZATION',
|
|
auditDetails: JSON.stringify({
|
|
before: existingOrg,
|
|
after: organization
|
|
}),
|
|
auditUserID: null,
|
|
auditUsername: null
|
|
}
|
|
});
|
|
|
|
return {
|
|
statusCode: 200,
|
|
message: "Organization updated successfully",
|
|
data: organization
|
|
};
|
|
} catch (error) {
|
|
console.error("Error updating organization:", error);
|
|
|
|
return {
|
|
statusCode: 500,
|
|
message: "Internal server error",
|
|
error: error.message
|
|
};
|
|
}
|
|
});
|
|
|
|
// Helper functions
|
|
function getRequestIP(event) {
|
|
return event.node.req.headers['x-forwarded-for'] ||
|
|
event.node.req.connection.remoteAddress;
|
|
}
|
|
|
|
function getRequestURL(event) {
|
|
return event.node.req.url;
|
|
}
|