diff --git a/controllers/scholarship.controller.ts b/controllers/scholarship.controller.ts index 1fd40203164e3d25530fbe83d9354d57946ab7ba..c6cd26574c8a7aca604ddbd079fed36259e6c57f 100644 --- a/controllers/scholarship.controller.ts +++ b/controllers/scholarship.controller.ts @@ -2,8 +2,7 @@ import { Prisma, PrismaClient } from "@prisma/client" import { Request, Response } from "express" import { viewScholarshipCount } from "../templates/scholarship" import jwt from "jsonwebtoken" -import { it } from "node:test" - +import { setAcceptance } from "../templates/scholarshipAcceptance" const prisma = new PrismaClient() const xml2js = require("xml2js") const soapRequest = require("easy-soap-request") @@ -387,4 +386,69 @@ export const scholarshipCount = async (id: Number) => { ][0]["return"] return scholarships -} \ No newline at end of file +} +export const scholarshipAcceptance = async (req: Request, res: Response) => { + try { + const { sid } = req.params + const { status, user_id } = req.body + + const accessToken = req.cookies.accToken + + if (!accessToken) { + res.status(401).json({ message: "Access token missing" }) + return + } + + const scholarship = await prisma.scholarship.findUnique({ + where: { + scholarship_id: Number(sid) + }, + include: { + scholarshiptype: true, + organization: true + } + }) + + if (!scholarship) { + throw new Error("Scholarship not found") + } + + const { response } = await soapRequest({ + url: setAcceptance.url, + headers: setAcceptance.headers, + xml: util.format( + setAcceptance.body, + user_id, + scholarship.scholarship_id, + scholarship.title, + status + ) + }) + + const { body } = response + + const parser = new xml2js.Parser() + const parsedBody = await parser.parseStringPromise(body) + const scholarships = + parsedBody["S:Envelope"]["S:Body"][0]["ns2:setAcceptanceResponse"][0][ + "return" + ] + + res.status(200).json({ + status: "success", + message: "Scholarship acceptance updated successfully", + data: { + user_id: scholarships.user_id_student[0], + scholarship_id: scholarships.scholarship_id_rest[0], + scholarship_name: scholarships.scholarship_name[0], + status: scholarships.status[0] + } + }) + } catch (error: any) { + res.status(500).json({ + status: "error", + message: error.message, + data: error + }) + } +} diff --git a/polling/scholarships.ts b/polling/scholarships.ts index de86793bb099d5b275d73c06bf908e9172f2d879..168a52806f6ab64b5ddbaf11a191320cc3923c52 100644 --- a/polling/scholarships.ts +++ b/polling/scholarships.ts @@ -170,7 +170,7 @@ const soapSync = async (scholarship: any, newScholarship: any) => { /* If scholarship already has acceptance, update the scholarship_id_rest in SOAP */ const { res } = await soapRequest({ - url: setAcceptanceScholarshipIDREST.scholarshipAccUrl, + url: setAcceptanceScholarshipIDREST.url, headers: setAcceptanceScholarshipIDREST.headers, xml: util.format( setAcceptanceScholarshipIDREST.body, diff --git a/routes/scholarship.routes.ts b/routes/scholarship.routes.ts index 63b130fcab61f5ca075c1fbd33327600ee6c0a2a..f019e9b6960d021753f55b095e72df969cf72b60 100644 --- a/routes/scholarship.routes.ts +++ b/routes/scholarship.routes.ts @@ -6,13 +6,10 @@ import { updateScholarship, deleteScholarship, getAllScholarshipTypes, - scholarshipCount + scholarshipCount, + scholarshipAcceptance } from "../controllers/scholarship.controller" -// import { -// getAssignment, -// } from "../controllers/assignment.controller"; - const router = express.Router() router.post("/scholarship", createScholarship) router.get("/scholarship", getScholarships) @@ -21,7 +18,6 @@ router.patch("/scholarship/:id", updateScholarship) router.delete("/scholarship/:id", deleteScholarship) router.get("/scholarshiptype", getAllScholarshipTypes) router.get("/scholarship/:id/count", scholarshipCount) -// router.get("/scholarsip/:sid/assignment/:aid", getAssignment); -// router.post("/scholarsip/:sid/assignment", getAssignment); +router.post("/scholarship/:sid/accept", scholarshipAcceptance) module.exports = router diff --git a/server.ts b/server.ts index dd72027c80efa76027ca949802433bb4c2dbbbcf..f0f560f0f3a3cf7686a155c99d1d92dc512a6296 100644 --- a/server.ts +++ b/server.ts @@ -48,11 +48,6 @@ app.use("/api", OrganizationRoute) app.use("/api", AssignmentRoute) app.use("/api", fileRoute) -app.listen(PORT, () => { - console.log(`âš¡ï¸[server]: Server is running at http://localhost:${PORT}`) - sync() -}) - const start = async () => { try { await client.connect()