feat : add academics api

This commit is contained in:
ARJUN S THAMPI
2026-03-16 12:39:41 +05:30
parent 9ae190754a
commit aaa62ae3f5
9 changed files with 9723 additions and 9403 deletions

View File

@@ -0,0 +1,13 @@
-- CreateTable
CREATE TABLE "Inquiry" (
"id" SERIAL NOT NULL,
"fullName" TEXT NOT NULL,
"number" TEXT NOT NULL,
"emailId" TEXT,
"subject" TEXT,
"message" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Inquiry_pkey" PRIMARY KEY ("id")
);

View File

@@ -0,0 +1,14 @@
-- CreateTable
CREATE TABLE "AcademicsResearch" (
"id" SERIAL NOT NULL,
"fullName" TEXT NOT NULL,
"number" TEXT NOT NULL,
"emailId" TEXT,
"subject" TEXT,
"courseName" TEXT,
"message" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "AcademicsResearch_pkey" PRIMARY KEY ("id")
);

View File

@@ -147,3 +147,30 @@ model Appointment {
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
} }
model Inquiry {
id Int @id @default(autoincrement())
fullName String
number String
emailId String?
subject String?
message String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model AcademicsResearch {
id Int @id @default(autoincrement())
fullName String
number String
emailId String?
subject String?
courseName String?
message String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

View File

@@ -10,6 +10,8 @@ import doctorRoutes from "./routes/doctor.routes.js";
import careerRoutes from "./routes/career.routes.js"; import careerRoutes from "./routes/career.routes.js";
import candidateRoutes from "./routes/candidate.routes.js"; import candidateRoutes from "./routes/candidate.routes.js";
import appointmentRoutes from "./routes/appointment.routes.js"; import appointmentRoutes from "./routes/appointment.routes.js";
import inquiryRoutes from "./routes/inquiry.routes.js";
import academicsResearchRoutes from "./routes/academicsResearch.routes.js";
dotenv.config(); dotenv.config();
@@ -43,6 +45,8 @@ app.use("/api/doctors", doctorRoutes);
app.use("/api/careers", careerRoutes); app.use("/api/careers", careerRoutes);
app.use("/api/candidates", candidateRoutes); app.use("/api/candidates", candidateRoutes);
app.use("/api/appointments", appointmentRoutes); app.use("/api/appointments", appointmentRoutes);
app.use("/api/inquiry", inquiryRoutes);
app.use("/api/academics", academicsResearchRoutes);
const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;
app.listen(PORT, () => { app.listen(PORT, () => {

View File

@@ -0,0 +1,117 @@
import prisma from "../prisma/client.js";
// CREATE ACADEMICS & RESEARCH
export const createAcademicsResearch = async (req, res) => {
try {
const {fullName, number, emailId, subject, courseName, message} = req.body;
if (!fullName || !number) {
return res.status(400).json({
success: false,
message: "Full name and number are required",
});
}
const data = await prisma.academicsResearch.create({
data: {
fullName,
number,
emailId,
subject,
courseName,
message,
},
});
res.status(200).json({
success: true,
status: 200,
data,
message: "Academics & Research added successfully",
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to add Academics & Research inquiry",
});
}
};
// GET ALL
export const getAcademicsResearch = async (req, res) => {
try {
const data = await prisma.academicsResearch.findMany({
orderBy: {
createdAt: "desc",
},
});
res.json({
success: true,
data,
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch records",
});
}
};
// GET SINGLE
export const getSingleAcademicsResearch = async (req, res) => {
try {
const {id} = req.params;
const data = await prisma.academicsResearch.findUnique({
where: {
id: Number(id),
},
});
if (!data) {
return res.status(404).json({
success: false,
message: "Record not found",
});
}
res.json({
success: true,
data,
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch record",
});
}
};
// DELETE
export const deleteAcademicsResearch = async (req, res) => {
try {
const {id} = req.params;
await prisma.academicsResearch.delete({
where: {
id: Number(id),
},
});
res.json({
success: true,
message: "Record deleted successfully",
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to delete record",
});
}
};

View File

@@ -0,0 +1,108 @@
import prisma from "../prisma/client.js";
/* CREATE INQUIRY */
export const createInquiry = async (req, res) => {
try {
const {fullName, number, emailId, subject, message} = req.body;
if (!fullName || !number) {
return res.status(400).json({
success: false,
message: "Full name and number are required",
});
}
const inquiry = await prisma.inquiry.create({
data: {
fullName,
number,
emailId,
subject,
message,
},
});
res.status(200).json({
success: true,
status: 200,
data: inquiry,
message: "Inquiry added successfully",
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to add inquiry",
});
}
};
/* GET ALL */
export const getInquiries = async (req, res) => {
try {
const inquiries = await prisma.inquiry.findMany({
orderBy: {
createdAt: "desc",
},
});
res.json({
success: true,
data: inquiries,
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch inquiries",
});
}
};
/* GET SINGLE */
export const getInquiry = async (req, res) => {
try {
const {id} = req.params;
const inquiry = await prisma.inquiry.findUnique({
where: {id: Number(id)},
});
if (!inquiry) {
return res.status(404).json({
success: false,
message: "Inquiry not found",
});
}
res.json({
success: true,
data: inquiry,
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch inquiry",
});
}
};
/* DELETE */
export const deleteInquiry = async (req, res) => {
try {
const {id} = req.params;
await prisma.inquiry.delete({
where: {id: Number(id)},
});
res.json({
success: true,
message: "Inquiry deleted successfully",
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to delete inquiry",
});
}
};

View File

@@ -0,0 +1,18 @@
import express from "express";
import {
createAcademicsResearch,
getAcademicsResearch,
getSingleAcademicsResearch,
deleteAcademicsResearch,
} from "../controllers/academicsResearch.controller.js";
import jwtAuthMiddleware from "../middleware/auth.js";
const router = express.Router();
router.post("/", createAcademicsResearch);
router.get("/getAll", getAcademicsResearch);
router.get("/:id", getSingleAcademicsResearch);
router.delete("/:id", jwtAuthMiddleware, deleteAcademicsResearch);
export default router;

View File

@@ -0,0 +1,19 @@
import express from "express";
import {
createInquiry,
getInquiries,
getInquiry,
deleteInquiry,
} from "../controllers/inquiry.controller.js";
import jwtAuthMiddleware from "../middleware/auth.js";
const router = express.Router();
router.post("/", createInquiry);
router.get("/getAll", getInquiries);
router.get("/:id", getInquiry);
router.delete("/:id", jwtAuthMiddleware, deleteInquiry);
export default router;