feat : add academics api
This commit is contained in:
@@ -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")
|
||||
);
|
||||
@@ -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")
|
||||
);
|
||||
@@ -147,3 +147,30 @@ model Appointment {
|
||||
createdAt DateTime @default(now())
|
||||
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
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import doctorRoutes from "./routes/doctor.routes.js";
|
||||
import careerRoutes from "./routes/career.routes.js";
|
||||
import candidateRoutes from "./routes/candidate.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();
|
||||
|
||||
@@ -43,6 +45,8 @@ app.use("/api/doctors", doctorRoutes);
|
||||
app.use("/api/careers", careerRoutes);
|
||||
app.use("/api/candidates", candidateRoutes);
|
||||
app.use("/api/appointments", appointmentRoutes);
|
||||
app.use("/api/inquiry", inquiryRoutes);
|
||||
app.use("/api/academics", academicsResearchRoutes);
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
app.listen(PORT, () => {
|
||||
|
||||
117
backend/src/controllers/academicsResearch.controller.js
Normal file
117
backend/src/controllers/academicsResearch.controller.js
Normal 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",
|
||||
});
|
||||
}
|
||||
};
|
||||
108
backend/src/controllers/inquiry.controller.js
Normal file
108
backend/src/controllers/inquiry.controller.js
Normal 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",
|
||||
});
|
||||
}
|
||||
};
|
||||
18
backend/src/routes/academicsResearch.routes.js
Normal file
18
backend/src/routes/academicsResearch.routes.js
Normal 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;
|
||||
19
backend/src/routes/inquiry.routes.js
Normal file
19
backend/src/routes/inquiry.routes.js
Normal 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;
|
||||
Reference in New Issue
Block a user