chore: file formatting

This commit is contained in:
Kailasdevdas
2026-05-26 15:48:01 +05:30
parent 8a21e0bf38
commit 78e2618a29
117 changed files with 12775 additions and 14638 deletions
+5 -5
View File
@@ -1,14 +1,14 @@
// This file was generated by Prisma, and assumes you have installed the following:
// npm install --save-dev prisma dotenv
import "dotenv/config";
import {defineConfig} from "prisma/config";
import 'dotenv/config';
import { defineConfig } from 'prisma/config';
export default defineConfig({
schema: "prisma/schema.prisma",
schema: 'prisma/schema.prisma',
migrations: {
path: "prisma/migrations",
path: 'prisma/migrations',
},
datasource: {
url: process.env["DATABASE_URL"],
url: process.env['DATABASE_URL'],
},
});
+39 -39
View File
@@ -1,62 +1,62 @@
import express from "express";
import dotenv from "dotenv";
import cors from "cors";
import express from 'express';
import dotenv from 'dotenv';
import cors from 'cors';
import departmentRoutes from "./routes/department.routes.js";
import authRoutes from "./routes/auth.routes.js";
import blogRoutes from "./routes/blog.routes.js";
import uploadRoutes from "./routes/upload.routes.js";
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";
import emailConfigRoutes from "./routes/emailConfig.routes.js";
import newsMediaRoutes from "./routes/newsMedia.routes.js";
import importRoutes from "./routes/importRoutes.js";
import healthCheckRoutes from "./routes/healthCheck.route.js";
import departmentRoutes from './routes/department.routes.js';
import authRoutes from './routes/auth.routes.js';
import blogRoutes from './routes/blog.routes.js';
import uploadRoutes from './routes/upload.routes.js';
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';
import emailConfigRoutes from './routes/emailConfig.routes.js';
import newsMediaRoutes from './routes/newsMedia.routes.js';
import importRoutes from './routes/importRoutes.js';
import healthCheckRoutes from './routes/healthCheck.route.js';
dotenv.config();
const app = express();
app.use(express.json({ limit: "50mb" }));
app.use(express.urlencoded({ limit: "50mb", extended: true }));
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));
const allowedOrigins = process.env.CORS_ALLOWED_ORIGINS
? process.env.CORS_ALLOWED_ORIGINS.split(" ")
: ["http://localhost:3001"];
? process.env.CORS_ALLOWED_ORIGINS.split(' ')
: ['http://localhost:3001'];
const corsOptions = {
origin: function (origin, callback) {
if (!origin || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
callback(new Error('Not allowed by CORS'));
}
},
methods: ["GET", "POST", "PUT", "DELETE", "PATCH"],
allowedHeaders: "*",
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
allowedHeaders: '*',
};
app.use(cors(corsOptions));
app.use("/api/departments", departmentRoutes);
app.use("/api/auth", authRoutes);
app.use("/api/blogs", blogRoutes);
app.use("/uploads", express.static("uploads"));
app.use("/api/upload", uploadRoutes);
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);
app.use("/api/email", emailConfigRoutes);
app.use("/api/newsMedia", newsMediaRoutes);
app.use("/api/import", importRoutes);
app.use("/api/health-check", healthCheckRoutes);
app.use('/api/departments', departmentRoutes);
app.use('/api/auth', authRoutes);
app.use('/api/blogs', blogRoutes);
app.use('/uploads', express.static('uploads'));
app.use('/api/upload', uploadRoutes);
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);
app.use('/api/email', emailConfigRoutes);
app.use('/api/newsMedia', newsMediaRoutes);
app.use('/api/import', importRoutes);
app.use('/api/health-check', healthCheckRoutes);
const PORT = process.env.PORT || 5008;
app.listen(PORT, () => {
@@ -1,18 +1,17 @@
import prisma from "../prisma/client.js";
import { sendEmail } from "../utils/sendEmail.js";
import { getEmailsByType } from "../utils/getEmailByTypes.js";
import prisma from '../prisma/client.js';
import { sendEmail } from '../utils/sendEmail.js';
import { getEmailsByType } from '../utils/getEmailByTypes.js';
// CREATE ACADEMICS & RESEARCH
export const createAcademicsResearch = async (req, res) => {
try {
const { fullName, number, emailId, subject, courseName, message } =
req.body;
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",
message: 'Full name and number are required',
});
}
@@ -28,12 +27,12 @@ export const createAcademicsResearch = async (req, res) => {
});
try {
const emailList = await getEmailsByType("ACADEMICS");
const emailList = await getEmailsByType('ACADEMICS');
if (emailList && emailList.length > 0) {
await sendEmail({
to: emailList,
subject: "New Academics & Research Inquiry",
subject: 'New Academics & Research Inquiry',
html: `
<div style="font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px;">
@@ -63,15 +62,15 @@ export const createAcademicsResearch = async (req, res) => {
</tr>
<tr>
<td style="padding: 8px 0;"><b>Email:</b></td>
<td style="padding: 8px 0;">${emailId || "-"}</td>
<td style="padding: 8px 0;">${emailId || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Course:</b></td>
<td style="padding: 8px 0;">${courseName || "-"}</td>
<td style="padding: 8px 0;">${courseName || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Subject:</b></td>
<td style="padding: 8px 0;">${subject || "-"}</td>
<td style="padding: 8px 0;">${subject || '-'}</td>
</tr>
</table>
@@ -87,7 +86,7 @@ export const createAcademicsResearch = async (req, res) => {
word-break: break-word;
overflow-wrap: anywhere;
">
${message ? message.replace(/\n/g, "<br/>") : "-"}
${message ? message.replace(/\n/g, '<br/>') : '-'}
</div>
</div>
@@ -105,20 +104,20 @@ export const createAcademicsResearch = async (req, res) => {
});
}
} catch (err) {
console.error("Academics email failed:", err);
console.error('Academics email failed:', err);
}
res.status(200).json({
success: true,
status: 200,
data,
message: "Academics & Research added successfully",
message: 'Academics & Research added successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to add Academics & Research inquiry",
message: 'Failed to add Academics & Research inquiry',
});
}
};
@@ -129,7 +128,7 @@ export const getAcademicsResearch = async (req, res) => {
try {
const data = await prisma.academicsResearch.findMany({
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
});
@@ -140,7 +139,7 @@ export const getAcademicsResearch = async (req, res) => {
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch records",
message: 'Failed to fetch records',
});
}
};
@@ -160,7 +159,7 @@ export const getSingleAcademicsResearch = async (req, res) => {
if (!data) {
return res.status(404).json({
success: false,
message: "Record not found",
message: 'Record not found',
});
}
@@ -171,7 +170,7 @@ export const getSingleAcademicsResearch = async (req, res) => {
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch record",
message: 'Failed to fetch record',
});
}
};
@@ -190,12 +189,12 @@ export const deleteAcademicsResearch = async (req, res) => {
res.json({
success: true,
message: "Record deleted successfully",
message: 'Record deleted successfully',
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to delete record",
message: 'Failed to delete record',
});
}
};
@@ -1,16 +1,15 @@
import prisma from "../prisma/client.js";
import { sendEmail } from "../utils/sendEmail.js";
import { getEmailsByType } from "../utils/getEmailByTypes.js";
import prisma from '../prisma/client.js';
import { sendEmail } from '../utils/sendEmail.js';
import { getEmailsByType } from '../utils/getEmailByTypes.js';
export const createAppointment = async (req, res) => {
try {
const { name, mobileNumber, email, message, date, doctorId, departmentId } =
req.body;
const { name, mobileNumber, email, message, date, doctorId, departmentId } = req.body;
if (!name || !mobileNumber || !doctorId || !departmentId || !date) {
return res.status(400).json({
success: false,
message: "Required fields missing",
message: 'Required fields missing',
});
}
@@ -31,12 +30,12 @@ export const createAppointment = async (req, res) => {
});
try {
const emailList = await getEmailsByType("APPOINTMENT");
const emailList = await getEmailsByType('APPOINTMENT');
if (emailList) {
await sendEmail({
to: emailList,
subject: "New Appointment Booked",
subject: 'New Appointment Booked',
html: `
<div style="font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px;">
@@ -66,7 +65,7 @@ export const createAppointment = async (req, res) => {
</tr>
<tr>
<td style="padding: 8px 0;"><b>Email:</b></td>
<td style="padding: 8px 0;">${email || "-"}</td>
<td style="padding: 8px 0;">${email || '-'}</td>
</tr>
</table>
@@ -75,19 +74,19 @@ export const createAppointment = async (req, res) => {
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 8px 0;"><b>Doctor:</b></td>
<td style="padding: 8px 0;">${appointment.doctor?.name || "-"}</td>
<td style="padding: 8px 0;">${appointment.doctor?.name || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Department:</b></td>
<td style="padding: 8px 0;">${appointment.department?.name || "-"}</td>
<td style="padding: 8px 0;">${appointment.department?.name || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Date:</b></td>
<td style="padding: 8px 0;">
${new Date(date).toLocaleDateString("en-GB", {
day: "2-digit",
month: "long",
year: "numeric",
${new Date(date).toLocaleDateString('en-GB', {
day: '2-digit',
month: 'long',
year: 'numeric',
})}
</td>
</tr>
@@ -105,7 +104,7 @@ export const createAppointment = async (req, res) => {
word-break: break-word;
overflow-wrap: anywhere;
">
${message ? message.replace(/\n/g, "<br/>") : "-"}
${message ? message.replace(/\n/g, '<br/>') : '-'}
</div>
</div>
@@ -123,19 +122,19 @@ export const createAppointment = async (req, res) => {
});
}
} catch (err) {
console.error("Email failed:", err);
console.error('Email failed:', err);
}
res.status(201).json({
success: true,
message: "Appointment booked successfully",
message: 'Appointment booked successfully',
data: appointment,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to create appointment",
message: 'Failed to create appointment',
});
}
};
@@ -152,11 +151,9 @@ export const getAppointments = async (req, res) => {
const where = {};
const hasSingleDate = date && date.trim() !== "";
const hasSingleDate = date && date.trim() !== '';
const hasRange =
(startDate && startDate.trim() !== "") ||
(endDate && endDate.trim() !== "");
const hasRange = (startDate && startDate.trim() !== '') || (endDate && endDate.trim() !== '');
if (hasSingleDate) {
const start = new Date(date);
@@ -174,14 +171,14 @@ export const getAppointments = async (req, res) => {
if (!hasSingleDate && hasRange) {
const dateFilter = {};
if (startDate && startDate.trim() !== "") {
if (startDate && startDate.trim() !== '') {
const start = new Date(startDate);
start.setHours(0, 0, 0, 0);
dateFilter.gte = start;
}
if (endDate && endDate.trim() !== "") {
if (endDate && endDate.trim() !== '') {
const end = new Date(endDate);
end.setHours(23, 59, 59, 999);
@@ -191,11 +188,11 @@ export const getAppointments = async (req, res) => {
where.date = dateFilter;
}
if (search && search.trim() !== "") {
if (search && search.trim() !== '') {
where.OR = [
{ name: { contains: search, mode: "insensitive" } },
{ name: { contains: search, mode: 'insensitive' } },
{ mobileNumber: { contains: search } },
{ email: { contains: search, mode: "insensitive" } },
{ email: { contains: search, mode: 'insensitive' } },
];
}
@@ -207,7 +204,7 @@ export const getAppointments = async (req, res) => {
department: true,
},
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
skip,
take: limit,
@@ -233,7 +230,7 @@ export const getAppointments = async (req, res) => {
res.status(500).json({
success: false,
message: "Failed to fetch appointments",
message: 'Failed to fetch appointments',
});
}
};
@@ -257,7 +254,7 @@ export const getAppointment = async (req, res) => {
if (!appointment) {
return res.status(404).json({
success: false,
message: "Appointment not found",
message: 'Appointment not found',
});
}
@@ -269,7 +266,7 @@ export const getAppointment = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch appointment",
message: 'Failed to fetch appointment',
});
}
};
@@ -289,7 +286,7 @@ export const getAppointmentsByDoctor = async (req, res) => {
department: true,
},
orderBy: {
date: "asc",
date: 'asc',
},
});
@@ -301,7 +298,7 @@ export const getAppointmentsByDoctor = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctor appointments",
message: 'Failed to fetch doctor appointments',
});
}
};
@@ -330,7 +327,7 @@ export const getAppointmentsByDepartment = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch department appointments",
message: 'Failed to fetch department appointments',
});
}
};
@@ -354,14 +351,14 @@ export const updateAppointment = async (req, res) => {
res.status(200).json({
success: true,
message: "Appointment updated successfully",
message: 'Appointment updated successfully',
data: appointment,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to update appointment",
message: 'Failed to update appointment',
});
}
};
@@ -380,13 +377,13 @@ export const deleteAppointment = async (req, res) => {
res.status(200).json({
success: true,
message: "Appointment deleted successfully",
message: 'Appointment deleted successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to delete appointment",
message: 'Failed to delete appointment',
});
}
};
+15 -15
View File
@@ -1,24 +1,24 @@
import prisma from "../prisma/client.js";
import {generateToken} from "../utils/jwt.js";
import {hashPassword, comparePassword} from "../utils/password.js";
import prisma from '../prisma/client.js';
import { generateToken } from '../utils/jwt.js';
import { hashPassword, comparePassword } from '../utils/password.js';
/**
* REGISTER
* POST /api/auth/register
*/
export async function register(req, res) {
const {username, password, role} = req.body;
const { username, password, role } = req.body;
if (!username || !password) {
return res.status(400).json({error: "Username and password required"});
return res.status(400).json({ error: 'Username and password required' });
}
const existingUser = await prisma.user.findUnique({
where: {username},
where: { username },
});
if (existingUser) {
return res.status(409).json({error: "Username already exists"});
return res.status(409).json({ error: 'Username already exists' });
}
const hashedPassword = await hashPassword(password);
@@ -27,12 +27,12 @@ export async function register(req, res) {
data: {
username,
password: hashedPassword,
role: role || "admin",
role: role || 'admin',
},
});
res.status(201).json({
message: "User registered successfully",
message: 'User registered successfully',
user: {
id: user.id,
username: user.username,
@@ -46,24 +46,24 @@ export async function register(req, res) {
* POST /api/auth/login
*/
export async function login(req, res) {
const {username, password} = req.body;
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({error: "Username and password required"});
return res.status(400).json({ error: 'Username and password required' });
}
const user = await prisma.user.findUnique({
where: {username},
where: { username },
});
if (!user) {
return res.status(401).json({error: "Invalid credentials"});
return res.status(401).json({ error: 'Invalid credentials' });
}
const isValid = await comparePassword(password, user.password);
if (!isValid) {
return res.status(401).json({error: "Invalid credentials"});
return res.status(401).json({ error: 'Invalid credentials' });
}
const token = generateToken({
@@ -72,5 +72,5 @@ export async function login(req, res) {
role: user.role,
});
res.json({token});
res.json({ token });
}
+21 -21
View File
@@ -1,10 +1,10 @@
import prisma from "../prisma/client.js";
import slugify from "slugify";
import prisma from '../prisma/client.js';
import slugify from 'slugify';
/* CREATE BLOG */
export async function createBlog(req, res) {
const {title, writer, image, content, isActive} = req.body;
const { title, writer, image, content, isActive } = req.body;
try {
const blog = await prisma.blog.create({
@@ -20,7 +20,7 @@ export async function createBlog(req, res) {
res.json(blog);
} catch (error) {
res.status(500).json({error: "Blog creation failed"});
res.status(500).json({ error: 'Blog creation failed' });
}
}
@@ -29,13 +29,13 @@ export async function createBlog(req, res) {
export async function getBlogs(req, res) {
try {
const blogs = await prisma.blog.findMany({
where: {isActive: true},
orderBy: {createdAt: "desc"},
where: { isActive: true },
orderBy: { createdAt: 'desc' },
});
res.json(blogs);
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
@@ -44,12 +44,12 @@ export async function getBlogs(req, res) {
export async function getAllBlogs(req, res) {
try {
const blogs = await prisma.blog.findMany({
orderBy: {createdAt: "desc"},
orderBy: { createdAt: 'desc' },
});
res.json(blogs);
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
@@ -60,16 +60,16 @@ export async function getBlog(req, res) {
const slug = req.params.slug;
const blog = await prisma.blog.findUnique({
where: {slug},
where: { slug },
});
if (!blog) {
return res.status(404).json({error: "Blog not found"});
return res.status(404).json({ error: 'Blog not found' });
}
res.json(blog);
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
@@ -80,16 +80,16 @@ export async function getBlogForAdmin(req, res) {
const id = Number(req.params.id);
const blog = await prisma.blog.findUnique({
where: {id},
where: { id },
});
if (!blog) {
return res.status(404).json({error: "Blog not found"});
return res.status(404).json({ error: 'Blog not found' });
}
res.json(blog);
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
@@ -97,10 +97,10 @@ export async function getBlogForAdmin(req, res) {
export async function updateBlog(req, res) {
try {
const {title, writer, image, content} = req.body;
const { title, writer, image, content } = req.body;
const blog = await prisma.blog.update({
where: {id: Number(req.params.id)},
where: { id: Number(req.params.id) },
data: {
title,
writer,
@@ -111,7 +111,7 @@ export async function updateBlog(req, res) {
res.json(blog);
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
@@ -122,11 +122,11 @@ export async function deleteBlog(req, res) {
const id = Number(req.params.id);
await prisma.blog.delete({
where: {id},
where: { id },
});
res.json({message: "Blog deleted successfully"});
res.json({ message: 'Blog deleted successfully' });
} catch (error) {
res.status(500).json({error: error.message});
res.status(500).json({ error: error.message });
}
}
+24 -25
View File
@@ -1,19 +1,18 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
import { sendEmail } from "../utils/sendEmail.js";
import { getEmailsByType } from "../utils/getEmailByTypes.js";
import { sendEmail } from '../utils/sendEmail.js';
import { getEmailsByType } from '../utils/getEmailByTypes.js';
// CREATE CANDIDATE
export const createCandidate = async (req, res) => {
try {
const { fullName, mobile, email, subject, coverLetter, careerId } =
req.body;
const { fullName, mobile, email, subject, coverLetter, careerId } = req.body;
if (!fullName || !mobile || !email || !careerId) {
return res.status(400).json({
success: false,
message: "Required fields missing",
message: 'Required fields missing',
});
}
@@ -32,12 +31,12 @@ export const createCandidate = async (req, res) => {
});
try {
const emailList = await getEmailsByType("CANDIDATE");
const emailList = await getEmailsByType('CANDIDATE');
if (emailList && emailList.length > 0) {
await sendEmail({
to: emailList,
subject: "New Job Application Received",
subject: 'New Job Application Received',
html: `
<div style="font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px;">
@@ -76,15 +75,15 @@ export const createCandidate = async (req, res) => {
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 8px 0;"><b>Applied For:</b></td>
<td style="padding: 8px 0;">${candidate.career?.post || "-"}</td>
<td style="padding: 8px 0;">${candidate.career?.post || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Designation:</b></td>
<td style="padding: 8px 0;">${candidate.career?.designation || "-"}</td>
<td style="padding: 8px 0;">${candidate.career?.designation || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Subject:</b></td>
<td style="padding: 8px 0;">${subject || "-"}</td>
<td style="padding: 8px 0;">${subject || '-'}</td>
</tr>
</table>
@@ -100,7 +99,7 @@ export const createCandidate = async (req, res) => {
word-break: break-word;
overflow-wrap: anywhere;
">
${coverLetter ? coverLetter.replace(/\n/g, "<br/>") : "-"}
${coverLetter ? coverLetter.replace(/\n/g, '<br/>') : '-'}
</div>
</div>
@@ -118,19 +117,19 @@ export const createCandidate = async (req, res) => {
});
}
} catch (err) {
console.error("Candidate email failed:", err);
console.error('Candidate email failed:', err);
}
res.status(201).json({
success: true,
message: "Application submitted successfully",
message: 'Application submitted successfully',
data: candidate,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to create candidate",
message: 'Failed to create candidate',
});
}
};
@@ -144,7 +143,7 @@ export const getCandidates = async (req, res) => {
career: true,
},
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
});
@@ -156,7 +155,7 @@ export const getCandidates = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch candidates",
message: 'Failed to fetch candidates',
});
}
};
@@ -179,7 +178,7 @@ export const getCandidate = async (req, res) => {
if (!candidate) {
return res.status(404).json({
success: false,
message: "Candidate not found",
message: 'Candidate not found',
});
}
@@ -191,7 +190,7 @@ export const getCandidate = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch candidate",
message: 'Failed to fetch candidate',
});
}
};
@@ -210,7 +209,7 @@ export const getCandidatesByCareer = async (req, res) => {
career: true,
},
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
});
@@ -222,7 +221,7 @@ export const getCandidatesByCareer = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch candidates",
message: 'Failed to fetch candidates',
});
}
};
@@ -242,14 +241,14 @@ export const updateCandidate = async (req, res) => {
res.status(200).json({
success: true,
message: "Candidate updated successfully",
message: 'Candidate updated successfully',
data: candidate,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to update candidate",
message: 'Failed to update candidate',
});
}
};
@@ -268,13 +267,13 @@ export const deleteCandidate = async (req, res) => {
res.status(200).json({
success: true,
message: "Candidate deleted successfully",
message: 'Candidate deleted successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to delete candidate",
message: 'Failed to delete candidate',
});
}
};
+12 -22
View File
@@ -1,4 +1,4 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
// GET ALL CAREERS
@@ -7,8 +7,8 @@ export const getAllCareers = async (req, res) => {
const { admin } = req.query;
const careers = await prisma.career.findMany({
where: admin === "true" ? {} : { isActive: true },
orderBy: [{ sortOrder: "asc" }, { createdAt: "desc" }],
where: admin === 'true' ? {} : { isActive: true },
orderBy: [{ sortOrder: 'asc' }, { createdAt: 'desc' }],
});
const response = careers.map((c) => ({
@@ -32,7 +32,7 @@ export const getAllCareers = async (req, res) => {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to fetch careers",
message: 'Failed to fetch careers',
});
}
};
@@ -41,22 +41,12 @@ export const getAllCareers = async (req, res) => {
export const createCareer = async (req, res) => {
try {
const {
post,
designation,
qualification,
experienceNeed,
email,
number,
status,
isActive,
sortOrder,
} = req.body;
const { post, designation, qualification, experienceNeed, email, number, status, isActive, sortOrder } = req.body;
if (!post || !designation) {
return res.status(400).json({
success: false,
message: "Post and designation are required",
message: 'Post and designation are required',
});
}
@@ -76,14 +66,14 @@ export const createCareer = async (req, res) => {
return res.status(201).json({
success: true,
message: "Career created successfully",
message: 'Career created successfully',
data: career,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to create career",
message: 'Failed to create career',
});
}
};
@@ -106,14 +96,14 @@ export const updateCareer = async (req, res) => {
return res.status(200).json({
success: true,
message: "Career updated successfully",
message: 'Career updated successfully',
data: career,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to update career",
message: 'Failed to update career',
});
}
};
@@ -130,13 +120,13 @@ export const deleteCareer = async (req, res) => {
return res.status(200).json({
success: true,
message: "Career deleted successfully",
message: 'Career deleted successfully',
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to delete career",
message: 'Failed to delete career',
});
}
};
@@ -1,23 +1,23 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
export const getAllDepartments = async (req, res) => {
try {
const {admin} = req.query;
const { admin } = req.query;
const departments = await prisma.department.findMany({
where: admin === "true" ? {} : {isActive: true},
orderBy: [{sortOrder: "asc"}, {name: "asc"}],
where: admin === 'true' ? {} : { isActive: true },
orderBy: [{ sortOrder: 'asc' }, { name: 'asc' }],
});
const response = departments.map((dep) => ({
departmentId: dep.departmentId,
name: dep.name,
image: dep.image ?? "",
para1: dep.para1 ?? "",
para2: dep.para2 ?? "",
para3: dep.para3 ?? "",
facilities: dep.facilities ?? "",
services: dep.services ?? "",
image: dep.image ?? '',
para1: dep.para1 ?? '',
para2: dep.para2 ?? '',
para3: dep.para3 ?? '',
facilities: dep.facilities ?? '',
services: dep.services ?? '',
isActive: dep.isActive,
sortOrder: dep.sortOrder,
}));
@@ -30,19 +30,19 @@ export const getAllDepartments = async (req, res) => {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to fetch departments",
message: 'Failed to fetch departments',
});
}
};
export const getDepartmentByName = async (req, res) => {
try {
const {name} = req.query;
const { name } = req.query;
if (!name) {
return res.status(400).json({
success: false,
message: "Department name is required",
message: 'Department name is required',
});
}
@@ -56,19 +56,19 @@ export const getDepartmentByName = async (req, res) => {
if (!department) {
return res.status(404).json({
success: false,
message: "Department not found or inactive",
message: 'Department not found or inactive',
});
}
const response = {
departmentId: department.departmentId,
name: department.name,
image: department.image ?? "",
para1: department.para1 ?? "",
para2: department.para2 ?? "",
para3: department.para3 ?? "",
facilities: department.facilities ?? "",
services: department.services ?? "",
image: department.image ?? '',
para1: department.para1 ?? '',
para2: department.para2 ?? '',
para3: department.para3 ?? '',
facilities: department.facilities ?? '',
services: department.services ?? '',
isActive: department.isActive,
sortOrder: department.sortOrder,
};
@@ -81,30 +81,17 @@ export const getDepartmentByName = async (req, res) => {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to fetch department",
message: 'Failed to fetch department',
});
}
};
export async function createDepartment(req, res) {
try {
const {
departmentId,
name,
image,
para1,
para2,
para3,
facilities,
services,
isActive,
sortOrder,
} = req.body;
const { departmentId, name, image, para1, para2, para3, facilities, services, isActive, sortOrder } = req.body;
if (!departmentId || !name) {
return res
.status(400)
.json({error: "departmentId and name are required"});
return res.status(400).json({ error: 'departmentId and name are required' });
}
const department = await prisma.department.create({
@@ -123,63 +110,63 @@ export async function createDepartment(req, res) {
});
res.status(201).json({
message: "Department created successfully",
message: 'Department created successfully',
data: department,
});
} catch (error) {
if (error.code === "P2002") {
return res.status(409).json({error: "Department already exists"});
if (error.code === 'P2002') {
return res.status(409).json({ error: 'Department already exists' });
}
console.error(error);
res.status(500).json({error: "Failed to create department"});
res.status(500).json({ error: 'Failed to create department' });
}
}
export const updateDepartment = async (req, res) => {
try {
const {departmentId} = req.params;
const updateData = {...req.body};
const { departmentId } = req.params;
const updateData = { ...req.body };
if (updateData.sortOrder !== undefined) {
updateData.sortOrder = Number(updateData.sortOrder);
}
const department = await prisma.department.update({
where: {departmentId},
where: { departmentId },
data: updateData,
});
return res.status(200).json({
success: true,
message: "Department updated successfully",
message: 'Department updated successfully',
data: department,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to update department",
message: 'Failed to update department',
});
}
};
export const deleteDepartment = async (req, res) => {
try {
const {departmentId} = req.params;
const { departmentId } = req.params;
await prisma.department.delete({
where: {departmentId},
where: { departmentId },
});
return res.status(200).json({
success: true,
message: "Department deleted successfully",
message: 'Department deleted successfully',
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to delete department",
message: 'Failed to delete department',
});
}
};
+87 -97
View File
@@ -1,13 +1,13 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
// get doctors
export const getAllDoctors = async (req, res) => {
try {
const {admin} = req.query;
const { admin } = req.query;
const doctors = await prisma.doctor.findMany({
where: admin === "true" ? {} : {isActive: true},
where: admin === 'true' ? {} : { isActive: true },
include: {
seo: true,
departments: {
@@ -18,18 +18,18 @@ export const getAllDoctors = async (req, res) => {
},
specializations: {
orderBy: {
createdAt: "asc",
createdAt: 'asc',
},
},
},
orderBy: [{globalSortOrder: "asc"}, {name: "asc"}],
orderBy: [{ globalSortOrder: 'asc' }, { name: 'asc' }],
});
const formatted = doctors.map((doc, index) => ({
SL_NO: String(index + 1),
doctorId: doc.doctorId,
name: doc.name,
image: doc.image ?? "",
image: doc.image ?? '',
designation: doc.designation,
workingStatus: doc.workingStatus,
qualification: doc.qualification,
@@ -43,15 +43,15 @@ export const getAllDoctors = async (req, res) => {
description: item.description,
})),
seo: {
seoTitle: doc.seo?.seoTitle ?? "",
metaDescription: doc.seo?.metaDescription ?? "",
focusKeyphrase: doc.seo?.focusKeyphrase ?? "",
slug: doc.seo?.slug ?? "",
seoTitle: doc.seo?.seoTitle ?? '',
metaDescription: doc.seo?.metaDescription ?? '',
focusKeyphrase: doc.seo?.focusKeyphrase ?? '',
slug: doc.seo?.slug ?? '',
tags: doc.seo?.tags ?? [],
ogTitle: doc.seo?.ogTitle ?? "",
ogDescription: doc.seo?.ogDescription ?? "",
ogImage: doc.seo?.ogImage ?? "",
ogTitle: doc.seo?.ogTitle ?? '',
ogDescription: doc.seo?.ogDescription ?? '',
ogImage: doc.seo?.ogImage ?? '',
},
departments: doc.departments.map((d) => {
const t = d.timing || {};
@@ -69,7 +69,7 @@ export const getAllDoctors = async (req, res) => {
return {
departmentId: d.department.departmentId,
departmentName: d.department.name,
timing: timingArray.join(" & "),
timing: timingArray.join(' & '),
deptSortOrder: d.sortOrder,
};
}),
@@ -83,7 +83,7 @@ export const getAllDoctors = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctors",
message: 'Failed to fetch doctors',
});
}
};
@@ -92,10 +92,10 @@ export const getAllDoctors = async (req, res) => {
export const getDoctorByDoctorId = async (req, res) => {
try {
const {doctorId} = req.params;
const { doctorId } = req.params;
const doctor = await prisma.doctor.findUnique({
where: {doctorId},
where: { doctorId },
include: {
seo: true,
specializations: true,
@@ -111,28 +111,28 @@ export const getDoctorByDoctorId = async (req, res) => {
if (!doctor) {
return res.status(404).json({
success: false,
message: "Doctor not found",
message: 'Doctor not found',
});
}
const response = {
doctorId: doctor.doctorId,
name: doctor.name,
image: doctor.image ?? "",
image: doctor.image ?? '',
designation: doctor.designation,
workingStatus: doctor.workingStatus,
qualification: doctor.qualification,
experience: doctor.experience,
professionalSummary: doctor.professionalSummary,
seo: {
seoTitle: doctor.seo?.seoTitle ?? "",
metaDescription: doctor.seo?.metaDescription ?? "",
focusKeyphrase: doctor.seo?.focusKeyphrase ?? "",
slug: doctor.seo?.slug ?? "",
seoTitle: doctor.seo?.seoTitle ?? '',
metaDescription: doctor.seo?.metaDescription ?? '',
focusKeyphrase: doctor.seo?.focusKeyphrase ?? '',
slug: doctor.seo?.slug ?? '',
tags: doctor.seo?.tags ?? [],
ogTitle: doctor.seo?.ogTitle ?? "",
ogDescription: doctor.seo?.ogDescription ?? "",
ogImage: doctor.seo?.ogImage ?? "",
ogTitle: doctor.seo?.ogTitle ?? '',
ogDescription: doctor.seo?.ogDescription ?? '',
ogImage: doctor.seo?.ogImage ?? '',
},
specializations:
doctor.specializations?.map((item) => ({
@@ -155,7 +155,7 @@ export const getDoctorByDoctorId = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctor",
message: 'Failed to fetch doctor',
});
}
};
@@ -163,30 +163,30 @@ export const getDoctorByDoctorId = async (req, res) => {
// get doctors by department
export const getDoctorsByDepartmentId = async (req, res) => {
try {
const {Department_ID} = req.query;
const { Department_ID } = req.query;
if (!Department_ID) {
return res.status(400).json({
success: false,
message: "Department_ID is required",
message: 'Department_ID is required',
});
}
const department = await prisma.department.findUnique({
where: {departmentId: Department_ID},
where: { departmentId: Department_ID },
});
if (!department) {
return res.status(404).json({
success: false,
message: "Department not found",
message: 'Department not found',
});
}
const doctorsInDept = await prisma.doctorDepartment.findMany({
where: {
departmentId: department.id,
doctor: {isActive: true},
doctor: { isActive: true },
},
include: {
doctor: {
@@ -199,16 +199,16 @@ export const getDoctorsByDepartmentId = async (req, res) => {
},
},
},
orderBy: {sortOrder: "asc"},
orderBy: { sortOrder: 'asc' },
});
const result = doctorsInDept.map((d) => ({
GG_ID: d.doctor.doctorId,
Name: d.doctor.name,
image: d.doctor.image ?? "",
image: d.doctor.image ?? '',
designation: d.doctor.designation,
hierarchyOrder: d.sortOrder,
slug: d.doctor.seo?.slug ?? "",
slug: d.doctor.seo?.slug ?? '',
}));
res.status(200).json({
@@ -219,7 +219,7 @@ export const getDoctorsByDepartmentId = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctors",
message: 'Failed to fetch doctors',
});
}
};
@@ -251,18 +251,18 @@ export const createDoctor = async (req, res) => {
} = req.body;
const messages = [];
if (!doctorId) messages.push("Doctor ID is required");
if (!name?.trim()) messages.push("Doctor name is required");
if (!designation?.trim()) messages.push("Designation is required");
if (!qualification?.trim()) messages.push("Qualification is required");
if (!doctorId) messages.push('Doctor ID is required');
if (!name?.trim()) messages.push('Doctor name is required');
if (!designation?.trim()) messages.push('Designation is required');
if (!qualification?.trim()) messages.push('Qualification is required');
if (!departments || departments.length === 0) {
messages.push("At least one department is required");
messages.push('At least one department is required');
}
if (messages.length > 0) {
return res.status(400).json({
success: false,
message: messages.join(", "),
message: messages.join(', '),
});
}
const seo = await prisma.seo.create({
@@ -292,14 +292,13 @@ export const createDoctor = async (req, res) => {
professionalSummary,
seoId: seo.id,
isActive: isActive !== undefined ? isActive : true,
globalSortOrder:
globalSortOrder !== undefined ? Number(globalSortOrder) : 0,
globalSortOrder: globalSortOrder !== undefined ? Number(globalSortOrder) : 0,
},
});
for (const dep of departments) {
const department = await prisma.department.findUnique({
where: {departmentId: dep.departmentId},
where: { departmentId: dep.departmentId },
});
if (!department) continue;
@@ -335,13 +334,13 @@ export const createDoctor = async (req, res) => {
res.status(201).json({
success: true,
message: "Doctor created successfully",
message: 'Doctor created successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to create doctor",
message: 'Failed to create doctor',
});
}
};
@@ -349,7 +348,7 @@ export const createDoctor = async (req, res) => {
//update doctors
export const updateDoctor = async (req, res) => {
try {
const {doctorId, action} = req.params;
const { doctorId, action } = req.params;
const {
name,
designation,
@@ -375,17 +374,14 @@ export const updateDoctor = async (req, res) => {
if (!doctorId) {
return res.status(400).json({
success: false,
message: "Doctor ID is required",
message: 'Doctor ID is required',
});
}
const doctor = await prisma.doctor.findUnique({where: {doctorId}});
if (!doctor)
return res
.status(404)
.json({success: false, message: "Doctor not found"});
if (action === "toggleStatus") {
const doctor = await prisma.doctor.findUnique({ where: { doctorId } });
if (!doctor) return res.status(404).json({ success: false, message: 'Doctor not found' });
if (action === 'toggleStatus') {
await prisma.doctor.update({
where: {id: doctor.id},
where: { id: doctor.id },
data: {
isActive: !doctor.isActive,
},
@@ -393,31 +389,29 @@ export const updateDoctor = async (req, res) => {
return res.status(200).json({
success: true,
message: `Doctor has been ${
doctor.isActive ? "deactivated" : "activated"
} successfully`,
message: `Doctor has been ${doctor.isActive ? 'deactivated' : 'activated'} successfully`,
});
}
const messages = [];
if (!doctorId) messages.push("Doctor ID is required");
if (!name?.trim()) messages.push("Doctor name is required");
if (!qualification?.trim()) messages.push("Qualification is required");
if (!designation?.trim()) messages.push("Designation is required");
if (!doctorId) messages.push('Doctor ID is required');
if (!name?.trim()) messages.push('Doctor name is required');
if (!qualification?.trim()) messages.push('Qualification is required');
if (!designation?.trim()) messages.push('Designation is required');
if (!departments || departments.length === 0) {
messages.push("At least one department is required");
messages.push('At least one department is required');
}
if (messages.length > 0) {
return res.status(400).json({
success: false,
message: messages.join(", "),
message: messages.join(', '),
});
}
await prisma.doctor.update({
where: {id: doctor.id},
where: { id: doctor.id },
data: {
name,
designation,
@@ -427,8 +421,7 @@ export const updateDoctor = async (req, res) => {
isActive,
experience: experience ? Number(experience) : null,
professionalSummary,
globalSortOrder:
globalSortOrder !== undefined ? Number(globalSortOrder) : undefined,
globalSortOrder: globalSortOrder !== undefined ? Number(globalSortOrder) : undefined,
},
});
@@ -520,8 +513,7 @@ export const updateDoctor = async (req, res) => {
});
if (dep.timing && Object.keys(dep.timing).length > 0) {
const {id, doctorDepartmentId, createdAt, updatedAt, ...cleanTiming} =
dep.timing;
const { id, doctorDepartmentId, createdAt, updatedAt, ...cleanTiming } = dep.timing;
await prisma.doctorTiming.create({
data: {
@@ -554,58 +546,56 @@ export const updateDoctor = async (req, res) => {
}
}
res
.status(200)
.json({success: true, message: "Doctor updated successfully"});
res.status(200).json({ success: true, message: 'Doctor updated successfully' });
} catch (error) {
console.error("Update Error:", error);
res.status(500).json({success: false, message: "Failed to update doctor"});
console.error('Update Error:', error);
res.status(500).json({ success: false, message: 'Failed to update doctor' });
}
};
//delete doctor
export const deleteDoctor = async (req, res) => {
try {
const {doctorId} = req.params;
const { doctorId } = req.params;
const doctor = await prisma.doctor.findUnique({
where: {doctorId},
where: { doctorId },
});
if (!doctor) {
return res.status(404).json({
success: false,
message: "Doctor not found",
message: 'Doctor not found',
});
}
const doctorDepartments = await prisma.doctorDepartment.findMany({
where: {doctorId: doctor.id},
where: { doctorId: doctor.id },
});
for (const dd of doctorDepartments) {
await prisma.doctorTiming.deleteMany({
where: {doctorDepartmentId: dd.id},
where: { doctorDepartmentId: dd.id },
});
}
await prisma.doctorDepartment.deleteMany({
where: {doctorId: doctor.id},
where: { doctorId: doctor.id },
});
await prisma.doctor.delete({
where: {id: doctor.id},
where: { id: doctor.id },
});
res.status(200).json({
success: true,
message: "Doctor deleted successfully",
message: 'Doctor deleted successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to delete doctor",
message: 'Failed to delete doctor',
});
}
};
@@ -630,14 +620,14 @@ export const getDoctorTimings = async (req, res) => {
return {
Doctor_ID: doc.doctorId,
Doctor: doc.name,
Monday: timing.monday || "",
Tuesday: timing.tuesday || "",
Wednesday: timing.wednesday || "",
Thursday: timing.thursday || "",
Friday: timing.friday || "",
Saturday: timing.saturday || "",
Sunday: timing.sunday || "",
Additional: timing.additional || "",
Monday: timing.monday || '',
Tuesday: timing.tuesday || '',
Wednesday: timing.wednesday || '',
Thursday: timing.thursday || '',
Friday: timing.friday || '',
Saturday: timing.saturday || '',
Sunday: timing.sunday || '',
Additional: timing.additional || '',
};
});
@@ -649,7 +639,7 @@ export const getDoctorTimings = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctor timings",
message: 'Failed to fetch doctor timings',
});
}
};
@@ -657,10 +647,10 @@ export const getDoctorTimings = async (req, res) => {
export const getDoctorTimingById = async (req, res) => {
try {
const {doctorId} = req.params;
const { doctorId } = req.params;
const doctor = await prisma.doctor.findUnique({
where: {doctorId},
where: { doctorId },
include: {
departments: {
include: {
@@ -674,7 +664,7 @@ export const getDoctorTimingById = async (req, res) => {
if (!doctor) {
return res.status(404).json({
success: false,
message: "Doctor not found",
message: 'Doctor not found',
});
}
@@ -697,7 +687,7 @@ export const getDoctorTimingById = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch doctor timing",
message: 'Failed to fetch doctor timing',
});
}
};
@@ -1,14 +1,14 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
// CREATE
export const createEmailConfig = async (req, res) => {
try {
const {name, email, type, isActive} = req.body;
const { name, email, type, isActive } = req.body;
if (!name || !email || !type) {
return res.status(400).json({
success: false,
message: "Name, Email and Type are required",
message: 'Name, Email and Type are required',
});
}
@@ -23,14 +23,14 @@ export const createEmailConfig = async (req, res) => {
res.status(201).json({
success: true,
message: "Email config created",
message: 'Email config created',
data: newEmail,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to create email config",
message: 'Failed to create email config',
});
}
};
@@ -40,7 +40,7 @@ export const getEmailConfigs = async (req, res) => {
try {
const emails = await prisma.emailConfig.findMany({
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
});
@@ -52,7 +52,7 @@ export const getEmailConfigs = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch email configs",
message: 'Failed to fetch email configs',
});
}
};
@@ -60,7 +60,7 @@ export const getEmailConfigs = async (req, res) => {
// GET SINGLE
export const getEmailConfig = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
const email = await prisma.emailConfig.findUnique({
where: {
@@ -71,7 +71,7 @@ export const getEmailConfig = async (req, res) => {
if (!email) {
return res.status(404).json({
success: false,
message: "Email config not found",
message: 'Email config not found',
});
}
@@ -83,7 +83,7 @@ export const getEmailConfig = async (req, res) => {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to fetch email config",
message: 'Failed to fetch email config',
});
}
};
@@ -91,7 +91,7 @@ export const getEmailConfig = async (req, res) => {
// UPDATE
export const updateEmailConfig = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
const updated = await prisma.emailConfig.update({
where: {
@@ -102,14 +102,14 @@ export const updateEmailConfig = async (req, res) => {
res.status(200).json({
success: true,
message: "Email config updated",
message: 'Email config updated',
data: updated,
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to update email config",
message: 'Failed to update email config',
});
}
};
@@ -117,7 +117,7 @@ export const updateEmailConfig = async (req, res) => {
// DELETE
export const deleteEmailConfig = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
await prisma.emailConfig.delete({
where: {
@@ -127,13 +127,13 @@ export const deleteEmailConfig = async (req, res) => {
res.status(200).json({
success: true,
message: "Email config deleted",
message: 'Email config deleted',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to delete email config",
message: 'Failed to delete email config',
});
}
};
@@ -1,23 +1,21 @@
import prisma from "../prisma/client.js";
import { sendEmail } from "../utils/sendEmail.js";
import { getEmailsByType } from "../utils/getEmailByTypes.js";
import prisma from '../prisma/client.js';
import { sendEmail } from '../utils/sendEmail.js';
import { getEmailsByType } from '../utils/getEmailByTypes.js';
export const getAllCategories = async (req, res) => {
try {
const { admin } = req.query;
const categories = await prisma.healthCheckCategory.findMany({
where: admin === "true" ? {} : { isActive: true },
orderBy: { sortOrder: "asc" },
where: admin === 'true' ? {} : { isActive: true },
orderBy: { sortOrder: 'asc' },
include: {
_count: { select: { packages: true } },
},
});
return res.status(200).json({ success: true, data: categories });
} catch (error) {
return res
.status(500)
.json({ success: false, message: "Failed to fetch categories" });
return res.status(500).json({ success: false, message: 'Failed to fetch categories' });
}
};
@@ -35,14 +33,10 @@ export const createCategory = async (req, res) => {
},
});
return res
.status(201)
.json({ success: true, message: "Category created", data: category });
return res.status(201).json({ success: true, message: 'Category created', data: category });
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to create category" });
return res.status(500).json({ success: false, message: 'Failed to create category' });
}
};
@@ -58,7 +52,7 @@ export const updateCategory = async (req, res) => {
if (data.sortOrder !== undefined) data.sortOrder = Number(data.sortOrder);
if (data.slug === "") data.slug = null;
if (data.slug === '') data.slug = null;
const updatedCategory = await prisma.$transaction(async (tx) => {
const category = await tx.healthCheckCategory.update({
@@ -78,14 +72,12 @@ export const updateCategory = async (req, res) => {
return res.status(200).json({
success: true,
message: "Category updated",
message: 'Category updated',
data: updatedCategory,
});
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to update category" });
return res.status(500).json({ success: false, message: 'Failed to update category' });
}
};
@@ -97,15 +89,12 @@ export const deleteCategory = async (req, res) => {
where: { id: Number(id) },
});
return res
.status(200)
.json({ success: true, message: "Category deleted successfully" });
return res.status(200).json({ success: true, message: 'Category deleted successfully' });
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message:
"Failed to delete category. Ensure no packages are linked to it.",
message: 'Failed to delete category. Ensure no packages are linked to it.',
});
}
};
@@ -116,24 +105,19 @@ export const getAllPackages = async (req, res) => {
const packages = await prisma.healthPackage.findMany({
where: {
AND: [
admin === "true" ? {} : { isActive: true },
categorySlug ? { category: { slug: categorySlug } } : {},
],
AND: [admin === 'true' ? {} : { isActive: true }, categorySlug ? { category: { slug: categorySlug } } : {}],
},
include: {
category: true,
seo: true,
},
orderBy: [{ sortOrder: "asc" }, { createdAt: "desc" }],
orderBy: [{ sortOrder: 'asc' }, { createdAt: 'desc' }],
});
return res.status(200).json({ success: true, data: packages });
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to fetch packages" });
return res.status(500).json({ success: false, message: 'Failed to fetch packages' });
}
};
@@ -189,14 +173,10 @@ export const createPackage = async (req, res) => {
},
});
return res
.status(201)
.json({ success: true, message: "Package created", data: healthPackage });
return res.status(201).json({ success: true, message: 'Package created', data: healthPackage });
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to create package" });
return res.status(500).json({ success: false, message: 'Failed to create package' });
}
};
@@ -260,12 +240,10 @@ export const updatePackage = async (req, res) => {
},
});
return res
.status(200)
.json({ success: true, message: "Package updated", data: updated });
return res.status(200).json({ success: true, message: 'Package updated', data: updated });
} catch (error) {
console.error(error);
return res.status(500).json({ success: false, message: "Update failed" });
return res.status(500).json({ success: false, message: 'Update failed' });
}
};
@@ -279,29 +257,20 @@ export const deletePackage = async (req, res) => {
return res.status(200).json({
success: true,
message: "Package deleted",
message: 'Package deleted',
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Delete failed",
message: 'Delete failed',
});
}
};
export const createPackageInquiry = async (req, res) => {
try {
const {
fullName,
mobileNumber,
email,
age,
gender,
preferredDate,
packageId,
message,
} = req.body;
const { fullName, mobileNumber, email, age, gender, preferredDate, packageId, message } = req.body;
const inquiry = await prisma.healthPackageInquiry.create({
data: {
@@ -320,12 +289,12 @@ export const createPackageInquiry = async (req, res) => {
});
try {
const emailList = await getEmailsByType("HCINQUIRY");
const emailList = await getEmailsByType('HCINQUIRY');
if (emailList) {
await sendEmail({
to: emailList,
subject: "New Health Checkup Package Inquiry",
subject: 'New Health Checkup Package Inquiry',
html: `
<div style="font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px;">
@@ -355,15 +324,15 @@ export const createPackageInquiry = async (req, res) => {
</tr>
<tr>
<td style="padding: 8px 0;"><b>Email:</b></td>
<td style="padding: 8px 0;">${email || "-"}</td>
<td style="padding: 8px 0;">${email || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Age:</b></td>
<td style="padding: 8px 0;">${age || "-"}</td>
<td style="padding: 8px 0;">${age || '-'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Gender:</b></td>
<td style="padding: 8px 0;">${gender || "-"}</td>
<td style="padding: 8px 0;">${gender || '-'}</td>
</tr>
</table>
@@ -372,19 +341,19 @@ export const createPackageInquiry = async (req, res) => {
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 8px 0; width: 35%;"><b>Package Name:</b></td>
<td style="padding: 8px 0;">${inquiry.healthPackage?.name || "Unknown Package"}</td>
<td style="padding: 8px 0;">${inquiry.healthPackage?.name || 'Unknown Package'}</td>
</tr>
<tr>
<td style="padding: 8px 0;"><b>Preferred Date:</b></td>
<td style="padding: 8px 0;">
${
preferredDate
? new Date(preferredDate).toLocaleDateString("en-GB", {
day: "2-digit",
month: "long",
year: "numeric",
? new Date(preferredDate).toLocaleDateString('en-GB', {
day: '2-digit',
month: 'long',
year: 'numeric',
})
: "Not specified"
: 'Not specified'
}
</td>
</tr>
@@ -402,7 +371,7 @@ export const createPackageInquiry = async (req, res) => {
word-break: break-word;
overflow-wrap: anywhere;
">
${message ? message.replace(/\n/g, "<br/>") : "-"}
${message ? message.replace(/\n/g, '<br/>') : '-'}
</div>
</div>
@@ -420,19 +389,17 @@ export const createPackageInquiry = async (req, res) => {
});
}
} catch (err) {
console.error("Email failed:", err);
console.error('Email failed:', err);
}
return res.status(201).json({
success: true,
message: "Booking inquiry sent successfully",
message: 'Booking inquiry sent successfully',
data: inquiry,
});
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to submit inquiry" });
return res.status(500).json({ success: false, message: 'Failed to submit inquiry' });
}
};
@@ -449,9 +416,7 @@ export const getPackageBySlug = async (req, res) => {
});
if (!healthPackage) {
return res
.status(404)
.json({ success: false, message: "Package not found" });
return res.status(404).json({ success: false, message: 'Package not found' });
}
return res.status(200).json({
@@ -460,9 +425,7 @@ export const getPackageBySlug = async (req, res) => {
});
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to fetch package" });
return res.status(500).json({ success: false, message: 'Failed to fetch package' });
}
};
@@ -504,7 +467,7 @@ export const getAllInquiries = async (req, res) => {
},
},
},
orderBy: { createdAt: "desc" },
orderBy: { createdAt: 'desc' },
}),
]);
@@ -520,8 +483,6 @@ export const getAllInquiries = async (req, res) => {
});
} catch (error) {
console.error(error);
return res
.status(500)
.json({ success: false, message: "Failed to fetch inquiries" });
return res.status(500).json({ success: false, message: 'Failed to fetch inquiries' });
}
};
+23 -35
View File
@@ -1,22 +1,12 @@
import { PrismaClient } from "@prisma/client";
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export const bulkImportExcelData = async (req, res) => {
try {
const {
departments,
doctors,
timings,
careers,
inquiries,
academics,
appointments,
candidates,
news,
} = req.body;
const { departments, doctors, timings, careers, inquiries, academics, appointments, candidates, news } = req.body;
console.log("🚀 Starting Robust Data Import...");
console.log('🚀 Starting Robust Data Import...');
// 1. DEPARTMENTS
if (departments) {
@@ -54,14 +44,14 @@ export const bulkImportExcelData = async (req, res) => {
update: {
name: row.Name?.toString(),
designation: row.Designation?.toString() || null,
workingStatus: row["Working Status"]?.toString() || null,
workingStatus: row['Working Status']?.toString() || null,
qualification: row.Qualification?.toString() || null,
},
create: {
doctorId: row.GG_ID.toString(),
name: row.Name?.toString(),
designation: row.Designation?.toString() || null,
workingStatus: row["Working Status"]?.toString() || null,
workingStatus: row['Working Status']?.toString() || null,
qualification: row.Qualification?.toString() || null,
},
});
@@ -100,8 +90,8 @@ export const bulkImportExcelData = async (req, res) => {
if (doctor && doctor.departments.length > 0) {
const doctorDeptId = doctor.departments[0].id;
const rawAdd = row.Additional?.toString() || "";
const rawMon = row.Monday?.toString() || "";
const rawAdd = row.Additional?.toString() || '';
const rawMon = row.Monday?.toString() || '';
const isAppt = (val) => /appointment|basis|on call/i.test(val);
let finalAdd = rawAdd;
@@ -147,7 +137,7 @@ export const bulkImportExcelData = async (req, res) => {
experienceNeed: row.ExperienceNeed?.toString() || null,
email: row.HiringEmail?.toString() || null,
number: row.Number?.toString() || null,
status: row.Status?.toString() || "new",
status: row.Status?.toString() || 'new',
};
if (cId) {
await prisma.career.upsert({
@@ -168,7 +158,7 @@ export const bulkImportExcelData = async (req, res) => {
await prisma.inquiry.create({
data: {
fullName: row.FullName.toString(),
number: row.Number?.toString() || "",
number: row.Number?.toString() || '',
emailId: row.EmailId?.toString() || null,
subject: row.Subject?.toString() || null,
message: row.Message?.toString() || null,
@@ -185,10 +175,10 @@ export const bulkImportExcelData = async (req, res) => {
await prisma.academicsResearch.create({
data: {
fullName: row.FullName.toString(),
number: row.Number?.toString() || "",
number: row.Number?.toString() || '',
emailId: row.EmailId?.toString() || null,
subject: row.Subject?.toString() || null, // Force String
courseName: row["Course Name"]?.toString() || null,
courseName: row['Course Name']?.toString() || null,
message: row.Message?.toString() || null,
createdAt: row.Date ? new Date(row.Date) : new Date(),
},
@@ -201,7 +191,7 @@ export const bulkImportExcelData = async (req, res) => {
for (const row of appointments) {
if (!row.FullName) continue;
const doctorName = row.Doctor?.toString();
const departmentName = row["Department Id"]?.toString();
const departmentName = row['Department Id']?.toString();
const doctor = await prisma.doctor.findFirst({
where: { name: doctorName },
@@ -214,11 +204,11 @@ export const bulkImportExcelData = async (req, res) => {
if (!value) return new Date();
// Excel numeric date
if (typeof value === "number") {
if (typeof value === 'number') {
return new Date((value - 25569) * 86400 * 1000);
}
if (typeof value === "string") {
if (typeof value === 'string') {
const v = value.trim();
// Handle DD/MM/YYYY
@@ -238,15 +228,15 @@ export const bulkImportExcelData = async (req, res) => {
}
}
console.warn("⚠️ Invalid date, using current date:", value);
console.warn('⚠️ Invalid date, using current date:', value);
return new Date();
};
if (doctor && department) {
await prisma.appointment.create({
data: {
name: row.FullName.toString(),
mobileNumber: row.Number?.toString() || "",
email: row["Email Id"]?.toString() || null,
mobileNumber: row.Number?.toString() || '',
email: row['Email Id']?.toString() || null,
message: row.Message?.toString() || null,
date: parseDate(row.Date),
doctorId: doctor.doctorId,
@@ -265,10 +255,10 @@ export const bulkImportExcelData = async (req, res) => {
.create({
data: {
fullName: row.FullName.toString(),
mobile: row.Number?.toString() || "",
email: row.EmailId?.toString() || "",
subject: row.Subject?.toString() || "",
coverLetter: row["Cover Letter"]?.toString() || "",
mobile: row.Number?.toString() || '',
email: row.EmailId?.toString() || '',
subject: row.Subject?.toString() || '',
coverLetter: row['Cover Letter']?.toString() || '',
careerId: parseInt(row.CareerId),
createdAt: row.Date ? new Date(row.Date) : new Date(),
},
@@ -294,11 +284,9 @@ export const bulkImportExcelData = async (req, res) => {
}
}
res
.status(200)
.json({ success: true, message: "✅ Import completed successfully!" });
res.status(200).json({ success: true, message: '✅ Import completed successfully!' });
} catch (error) {
console.error("❌ Bulk Import Error:", error);
console.error('❌ Bulk Import Error:', error);
res.status(500).json({ success: false, error: error.message });
}
};
+21 -21
View File
@@ -1,17 +1,17 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
import {sendEmail} from "../utils/sendEmail.js";
import {getEmailsByType} from "../utils/getEmailByTypes.js";
import { sendEmail } from '../utils/sendEmail.js';
import { getEmailsByType } from '../utils/getEmailByTypes.js';
/* CREATE INQUIRY */
export const createInquiry = async (req, res) => {
try {
const {fullName, number, emailId, subject, message} = req.body;
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",
message: 'Full name and number are required',
});
}
@@ -25,12 +25,12 @@ export const createInquiry = async (req, res) => {
},
});
try {
const emailList = await getEmailsByType("INQUIRY");
const emailList = await getEmailsByType('INQUIRY');
if (emailList && emailList.length > 0) {
await sendEmail({
to: emailList,
subject: "New Inquiry Received",
subject: 'New Inquiry Received',
html: `
<div style="font-family: Arial, sans-serif; background-color: #f4f6f8; padding: 20px;">
@@ -78,7 +78,7 @@ export const createInquiry = async (req, res) => {
word-break: break-word;
overflow-wrap: anywhere;
">
${message ? message.replace(/\n/g, "<br/>") : "-"}
${message ? message.replace(/\n/g, '<br/>') : '-'}
</div>
</div>
@@ -96,20 +96,20 @@ export const createInquiry = async (req, res) => {
});
}
} catch (err) {
console.error("Inquiry email failed:", err);
console.error('Inquiry email failed:', err);
}
res.status(200).json({
success: true,
status: 200,
data: inquiry,
message: "Inquiry added successfully",
message: 'Inquiry added successfully',
});
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: "Failed to add inquiry",
message: 'Failed to add inquiry',
});
}
};
@@ -119,7 +119,7 @@ export const getInquiries = async (req, res) => {
try {
const inquiries = await prisma.inquiry.findMany({
orderBy: {
createdAt: "desc",
createdAt: 'desc',
},
});
@@ -130,7 +130,7 @@ export const getInquiries = async (req, res) => {
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch inquiries",
message: 'Failed to fetch inquiries',
});
}
};
@@ -138,16 +138,16 @@ export const getInquiries = async (req, res) => {
/* GET SINGLE */
export const getInquiry = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
const inquiry = await prisma.inquiry.findUnique({
where: {id: Number(id)},
where: { id: Number(id) },
});
if (!inquiry) {
return res.status(404).json({
success: false,
message: "Inquiry not found",
message: 'Inquiry not found',
});
}
@@ -158,7 +158,7 @@ export const getInquiry = async (req, res) => {
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to fetch inquiry",
message: 'Failed to fetch inquiry',
});
}
};
@@ -166,20 +166,20 @@ export const getInquiry = async (req, res) => {
/* DELETE */
export const deleteInquiry = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
await prisma.inquiry.delete({
where: {id: Number(id)},
where: { id: Number(id) },
});
res.json({
success: true,
message: "Inquiry deleted successfully",
message: 'Inquiry deleted successfully',
});
} catch (error) {
res.status(500).json({
success: false,
message: "Failed to delete inquiry",
message: 'Failed to delete inquiry',
});
}
};
+15 -23
View File
@@ -1,4 +1,4 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
// GET ALL NEWS
@@ -6,7 +6,7 @@ export const getAllNews = async (req, res) => {
try {
const page = req.query.page ? parseInt(req.query.page) : null;
const limit = req.query.limit ? parseInt(req.query.limit) : null;
const search = req.query.search?.trim() || "";
const search = req.query.search?.trim() || '';
const includeImages = {
images: true,
@@ -16,7 +16,7 @@ export const getAllNews = async (req, res) => {
? {
headline: {
contains: search,
mode: "insensitive",
mode: 'insensitive',
},
}
: {};
@@ -32,7 +32,7 @@ export const getAllNews = async (req, res) => {
prisma.newsMedia.findMany({
where: whereCondition,
include: includeImages,
orderBy: { createdAt: "desc" },
orderBy: { createdAt: 'desc' },
skip,
take,
}),
@@ -69,7 +69,7 @@ export const getAllNews = async (req, res) => {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to fetch news",
message: 'Failed to fetch news',
});
}
};
@@ -87,7 +87,7 @@ export const getNewsById = async (req, res) => {
if (!n) {
return res.status(404).json({
success: false,
message: "News not found",
message: 'News not found',
});
}
@@ -113,7 +113,7 @@ export const getNewsById = async (req, res) => {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to fetch news",
message: 'Failed to fetch news',
});
}
};
@@ -122,20 +122,12 @@ export const getNewsById = async (req, res) => {
export const createNews = async (req, res) => {
try {
const {
headline,
content,
firstPara,
secondPara,
date,
author,
imageUrls,
} = req.body;
const { headline, content, firstPara, secondPara, date, author, imageUrls } = req.body;
if (!headline) {
return res.status(400).json({
success: false,
message: "Headline is required",
message: 'Headline is required',
});
}
@@ -158,14 +150,14 @@ export const createNews = async (req, res) => {
return res.status(201).json({
success: true,
message: "News created successfully",
message: 'News created successfully',
data: news,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to create news",
message: 'Failed to create news',
});
}
};
@@ -194,14 +186,14 @@ export const updateNews = async (req, res) => {
return res.status(200).json({
success: true,
message: "News updated successfully",
message: 'News updated successfully',
data: news,
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to update news",
message: 'Failed to update news',
});
}
};
@@ -218,13 +210,13 @@ export const deleteNews = async (req, res) => {
return res.status(200).json({
success: true,
message: "News deleted successfully",
message: 'News deleted successfully',
});
} catch (error) {
console.error(error);
return res.status(500).json({
success: false,
message: "Failed to delete news",
message: 'Failed to delete news',
});
}
};
+4 -4
View File
@@ -1,9 +1,9 @@
import multer from "multer";
import path from "path";
import multer from 'multer';
import path from 'path';
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "uploads/blog");
cb(null, 'uploads/blog');
},
filename: function (req, file, cb) {
@@ -12,4 +12,4 @@ const storage = multer.diskStorage({
},
});
export const upload = multer({storage});
export const upload = multer({ storage });
+5 -5
View File
@@ -1,19 +1,19 @@
import {verifyToken} from "../utils/jwt.js";
import { verifyToken } from '../utils/jwt.js';
export default function jwtAuthMiddleware(req, res, next) {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return res.status(401).json({error: "No token provided"});
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'No token provided' });
}
const token = authHeader.split(" ")[1];
const token = authHeader.split(' ')[1];
try {
const user = verifyToken(token);
req.user = user;
next();
} catch (err) {
return res.status(401).json({error: "Invalid or expired token"});
return res.status(401).json({ error: 'Invalid or expired token' });
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
import {PrismaClient} from "@prisma/client";
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
@@ -1,18 +1,18 @@
import express from "express";
import express from 'express';
import {
createAcademicsResearch,
getAcademicsResearch,
getSingleAcademicsResearch,
deleteAcademicsResearch,
} from "../controllers/academicsResearch.controller.js";
} from '../controllers/academicsResearch.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.post("/", createAcademicsResearch);
router.get("/getAll", jwtAuthMiddleware, getAcademicsResearch);
router.get("/:id", jwtAuthMiddleware, getSingleAcademicsResearch);
router.delete("/:id", jwtAuthMiddleware, deleteAcademicsResearch);
router.post('/', createAcademicsResearch);
router.get('/getAll', jwtAuthMiddleware, getAcademicsResearch);
router.get('/:id', jwtAuthMiddleware, getSingleAcademicsResearch);
router.delete('/:id', jwtAuthMiddleware, deleteAcademicsResearch);
export default router;
+8 -8
View File
@@ -1,23 +1,23 @@
import express from "express";
import express from 'express';
import {
createAppointment,
getAppointments,
getAppointment,
updateAppointment,
deleteAppointment,
} from "../controllers/appointment.controller.js";
} from '../controllers/appointment.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
/* PUBLIC */
router.get("/getall", jwtAuthMiddleware, getAppointments);
router.post("/", createAppointment);
router.get('/getall', jwtAuthMiddleware, getAppointments);
router.post('/', createAppointment);
router.get("/:id", jwtAuthMiddleware, getAppointment);
router.patch("/:id", jwtAuthMiddleware, updateAppointment);
router.delete("/:id", jwtAuthMiddleware, deleteAppointment);
router.get('/:id', jwtAuthMiddleware, getAppointment);
router.patch('/:id', jwtAuthMiddleware, updateAppointment);
router.delete('/:id', jwtAuthMiddleware, deleteAppointment);
export default router;
+3 -3
View File
@@ -1,8 +1,8 @@
import express from "express";
import { login } from "../controllers/auth.controller.js";
import express from 'express';
import { login } from '../controllers/auth.controller.js';
const router = express.Router();
router.post("/login", login);
router.post('/login', login);
export default router;
+10 -10
View File
@@ -1,4 +1,4 @@
import express from "express";
import express from 'express';
import {
createBlog,
getBlogs,
@@ -7,25 +7,25 @@ import {
deleteBlog,
getAllBlogs,
getBlogForAdmin,
} from "../controllers/blog.controller.js";
} from '../controllers/blog.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
/* PUBLIC */
router.get("/", getBlogs);
router.get("/:slug", getBlog);
router.get('/', getBlogs);
router.get('/:slug', getBlog);
// Protected
router.get("/admin/all", jwtAuthMiddleware, getAllBlogs);
router.get('/admin/all', jwtAuthMiddleware, getAllBlogs);
router.get("/admin/:id", jwtAuthMiddleware, getBlogForAdmin);
router.get('/admin/:id', jwtAuthMiddleware, getBlogForAdmin);
router.post("/", jwtAuthMiddleware, createBlog);
router.put("/:id", jwtAuthMiddleware, updateBlog);
router.delete("/:id", jwtAuthMiddleware, deleteBlog);
router.post('/', jwtAuthMiddleware, createBlog);
router.put('/:id', jwtAuthMiddleware, updateBlog);
router.delete('/:id', jwtAuthMiddleware, deleteBlog);
export default router;
+9 -9
View File
@@ -1,4 +1,4 @@
import express from "express";
import express from 'express';
import {
createCandidate,
getCandidates,
@@ -6,20 +6,20 @@ import {
getCandidatesByCareer,
updateCandidate,
deleteCandidate,
} from "../controllers/candidate.controller.js";
} from '../controllers/candidate.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
/* PUBLIC */
router.post("/", createCandidate);
router.post('/', createCandidate);
router.get("/getAll", jwtAuthMiddleware, getCandidates);
router.get("/:id", jwtAuthMiddleware, getCandidate);
router.get("/career/:careerId", jwtAuthMiddleware, getCandidatesByCareer);
router.get('/getAll', jwtAuthMiddleware, getCandidates);
router.get('/:id', jwtAuthMiddleware, getCandidate);
router.get('/career/:careerId', jwtAuthMiddleware, getCandidatesByCareer);
router.patch("/:id", jwtAuthMiddleware, updateCandidate);
router.delete("/:id", jwtAuthMiddleware, deleteCandidate);
router.patch('/:id', jwtAuthMiddleware, updateCandidate);
router.delete('/:id', jwtAuthMiddleware, deleteCandidate);
export default router;
+7 -12
View File
@@ -1,19 +1,14 @@
import express from "express";
import {
getAllCareers,
createCareer,
updateCareer,
deleteCareer,
} from "../controllers/career.controller.js";
import express from 'express';
import { getAllCareers, createCareer, updateCareer, deleteCareer } from '../controllers/career.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.get("/getAll", getAllCareers);
router.get('/getAll', getAllCareers);
router.post("/", jwtAuthMiddleware, createCareer);
router.patch("/:id", jwtAuthMiddleware, updateCareer);
router.delete("/:id", jwtAuthMiddleware, deleteCareer);
router.post('/', jwtAuthMiddleware, createCareer);
router.patch('/:id', jwtAuthMiddleware, updateCareer);
router.delete('/:id', jwtAuthMiddleware, deleteCareer);
export default router;
+8 -8
View File
@@ -1,22 +1,22 @@
import express from "express";
import express from 'express';
import {
getAllDepartments,
getDepartmentByName,
createDepartment,
updateDepartment,
deleteDepartment,
} from "../controllers/department.controller.js";
import jwtAuthMiddleware from "../middleware/auth.js";
} from '../controllers/department.controller.js';
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
// Public
router.get("/getAll", getAllDepartments);
router.get("/search", getDepartmentByName);
router.get('/getAll', getAllDepartments);
router.get('/search', getDepartmentByName);
// Protected
router.post("/", jwtAuthMiddleware, createDepartment);
router.put("/:departmentId", jwtAuthMiddleware, updateDepartment);
router.delete("/:departmentId", jwtAuthMiddleware, deleteDepartment);
router.post('/', jwtAuthMiddleware, createDepartment);
router.put('/:departmentId', jwtAuthMiddleware, updateDepartment);
router.delete('/:departmentId', jwtAuthMiddleware, deleteDepartment);
export default router;
+11 -11
View File
@@ -1,4 +1,4 @@
import express from "express";
import express from 'express';
import {
getAllDoctors,
createDoctor,
@@ -8,20 +8,20 @@ import {
getDoctorTimingById,
getDoctorByDoctorId,
getDoctorsByDepartmentId,
} from "../controllers/doctor.controller.js";
} from '../controllers/doctor.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.get("/getAll", getAllDoctors);
router.get("/search", getDoctorsByDepartmentId);
router.get("/getTimings", getDoctorTimings);
router.get("/getTimings/:doctorId", getDoctorTimingById);
router.get("/:doctorId", getDoctorByDoctorId);
router.get('/getAll', getAllDoctors);
router.get('/search', getDoctorsByDepartmentId);
router.get('/getTimings', getDoctorTimings);
router.get('/getTimings/:doctorId', getDoctorTimingById);
router.get('/:doctorId', getDoctorByDoctorId);
router.post("/", jwtAuthMiddleware, createDoctor);
router.patch("/:doctorId/:action", jwtAuthMiddleware, updateDoctor);
router.delete("/:doctorId", jwtAuthMiddleware, deleteDoctor);
router.post('/', jwtAuthMiddleware, createDoctor);
router.patch('/:doctorId/:action', jwtAuthMiddleware, updateDoctor);
router.delete('/:doctorId', jwtAuthMiddleware, deleteDoctor);
export default router;
+7 -7
View File
@@ -1,19 +1,19 @@
import express from "express";
import express from 'express';
import {
getEmailConfigs,
createEmailConfig,
updateEmailConfig,
deleteEmailConfig,
} from "../controllers/emailConfig.controller.js";
} from '../controllers/emailConfig.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.get("/getAll", getEmailConfigs);
router.get('/getAll', getEmailConfigs);
router.post("/", jwtAuthMiddleware, createEmailConfig);
router.patch("/:id", jwtAuthMiddleware, updateEmailConfig);
router.delete("/:id", jwtAuthMiddleware, deleteEmailConfig);
router.post('/', jwtAuthMiddleware, createEmailConfig);
router.patch('/:id', jwtAuthMiddleware, updateEmailConfig);
router.delete('/:id', jwtAuthMiddleware, deleteEmailConfig);
export default router;
+14 -14
View File
@@ -1,4 +1,4 @@
import express from "express";
import express from 'express';
import {
// Categories
getAllCategories,
@@ -16,24 +16,24 @@ import {
// Inquiries
createPackageInquiry,
getAllInquiries,
} from "../controllers/healthCheck.controller.js";
} from '../controllers/healthCheck.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.get("/packages", getAllPackages);
router.get("/packages/:slug", getPackageBySlug);
router.get("/categories", getAllCategories);
router.post("/inquiry", createPackageInquiry);
router.get('/packages', getAllPackages);
router.get('/packages/:slug', getPackageBySlug);
router.get('/categories', getAllCategories);
router.post('/inquiry', createPackageInquiry);
router.get("/inquiries", jwtAuthMiddleware, getAllInquiries);
router.post("/", jwtAuthMiddleware, createPackage);
router.patch("/:id", jwtAuthMiddleware, updatePackage);
router.delete("/:id", jwtAuthMiddleware, deletePackage);
router.get('/inquiries', jwtAuthMiddleware, getAllInquiries);
router.post('/', jwtAuthMiddleware, createPackage);
router.patch('/:id', jwtAuthMiddleware, updatePackage);
router.delete('/:id', jwtAuthMiddleware, deletePackage);
router.post("/categories", jwtAuthMiddleware, createCategory);
router.patch("/categories/:id", jwtAuthMiddleware, updateCategory);
router.delete("/categories/:id", jwtAuthMiddleware, deleteCategory);
router.post('/categories', jwtAuthMiddleware, createCategory);
router.patch('/categories/:id', jwtAuthMiddleware, updateCategory);
router.delete('/categories/:id', jwtAuthMiddleware, deleteCategory);
export default router;
+4 -4
View File
@@ -1,9 +1,9 @@
import express from "express";
import { bulkImportExcelData } from "../controllers/importController.js";
import jwtAuthMiddleware from "../middleware/auth.js";
import express from 'express';
import { bulkImportExcelData } from '../controllers/importController.js';
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.post("/bulk", jwtAuthMiddleware, bulkImportExcelData);
router.post('/bulk', jwtAuthMiddleware, bulkImportExcelData);
export default router;
+7 -12
View File
@@ -1,19 +1,14 @@
import express from "express";
import {
createInquiry,
getInquiries,
getInquiry,
deleteInquiry,
} from "../controllers/inquiry.controller.js";
import express from 'express';
import { createInquiry, getInquiries, getInquiry, deleteInquiry } from '../controllers/inquiry.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
router.post("/", createInquiry);
router.post('/', createInquiry);
router.get("/getAll", jwtAuthMiddleware, getInquiries);
router.get("/:id", jwtAuthMiddleware, getInquiry);
router.delete("/:id", jwtAuthMiddleware, deleteInquiry);
router.get('/getAll', jwtAuthMiddleware, getInquiries);
router.get('/:id', jwtAuthMiddleware, getInquiry);
router.delete('/:id', jwtAuthMiddleware, deleteInquiry);
export default router;
+8 -14
View File
@@ -1,23 +1,17 @@
import express from "express";
import {
createNews,
getAllNews,
getNewsById,
updateNews,
deleteNews,
} from "../controllers/newsMedia.controller.js";
import express from 'express';
import { createNews, getAllNews, getNewsById, updateNews, deleteNews } from '../controllers/newsMedia.controller.js';
import jwtAuthMiddleware from "../middleware/auth.js";
import jwtAuthMiddleware from '../middleware/auth.js';
const router = express.Router();
// PUBLIC ROUTES
router.get("/getAll", getAllNews);
router.get("/:id", getNewsById);
router.get('/getAll', getAllNews);
router.get('/:id', getNewsById);
// PROTECTED ROUTES
router.post("/", jwtAuthMiddleware, createNews);
router.patch("/:id", jwtAuthMiddleware, updateNews);
router.delete("/:id", jwtAuthMiddleware, deleteNews);
router.post('/', jwtAuthMiddleware, createNews);
router.patch('/:id', jwtAuthMiddleware, updateNews);
router.delete('/:id', jwtAuthMiddleware, deleteNews);
export default router;
+9 -9
View File
@@ -1,6 +1,6 @@
import express from "express";
import * as Bytescale from "@bytescale/sdk";
import multer from "multer";
import express from 'express';
import * as Bytescale from '@bytescale/sdk';
import multer from 'multer';
const router = express.Router();
@@ -9,26 +9,26 @@ const uploadManager = new Bytescale.UploadManager({
});
const storage = multer.memoryStorage();
const upload = multer({storage});
const upload = multer({ storage });
router.post("/", upload.single("file"), async (req, res) => {
router.post('/', upload.single('file'), async (req, res) => {
try {
const file = req.file;
const {folderPath} = req.body;
const { folderPath } = req.body;
const result = await uploadManager.upload({
data: file.buffer,
name: file.originalname,
mime: file.mimetype,
path: {
folderPath: folderPath || "/general",
folderPath: folderPath || '/general',
},
});
res.json({fileUrl: result.fileUrl});
res.json({ fileUrl: result.fileUrl });
} catch (error) {
console.error(error);
res.status(500).json({error: "Upload failed"});
res.status(500).json({ error: 'Upload failed' });
}
});
+6 -8
View File
@@ -1,14 +1,12 @@
import prisma from "../prisma/client.js";
import { hashPassword } from "./password.js";
import prisma from '../prisma/client.js';
import { hashPassword } from './password.js';
async function main() {
const username = process.argv[2];
const password = process.argv[3];
const role = process.argv[4] || "admin";
const role = process.argv[4] || 'admin';
if (!username || !password) {
console.log(
"Usage: node scripts/createUser.js <username> <password> [role]",
);
console.log('Usage: node scripts/createUser.js <username> <password> [role]');
process.exit(1);
}
@@ -17,7 +15,7 @@ async function main() {
});
if (existingUser) {
console.log("User already exists");
console.log('User already exists');
process.exit(1);
}
@@ -31,7 +29,7 @@ async function main() {
},
});
console.log("User created:", {
console.log('User created:', {
id: user.id,
username: user.username,
role: user.role,
+4 -4
View File
@@ -1,4 +1,4 @@
import prisma from "../prisma/client.js";
import prisma from '../prisma/client.js';
export const getEmailsByType = async (type) => {
try {
@@ -9,9 +9,9 @@ export const getEmailsByType = async (type) => {
},
});
return emails.map((e) => e.email).join(",");
return emails.map((e) => e.email).join(',');
} catch (error) {
console.error("Fetch email config error:", error);
return "";
console.error('Fetch email config error:', error);
return '';
}
};
+3 -3
View File
@@ -1,10 +1,10 @@
import jwt from "jsonwebtoken";
import "dotenv/config";
import jwt from 'jsonwebtoken';
import 'dotenv/config';
const SECRET = process.env.JWT_SECRET;
export function generateToken(payload) {
return jwt.sign(payload, SECRET, {expiresIn: "24h"});
return jwt.sign(payload, SECRET, { expiresIn: '24h' });
}
export function verifyToken(token) {
+1 -1
View File
@@ -1,4 +1,4 @@
import bcrypt from "bcryptjs";
import bcrypt from 'bcryptjs';
export async function hashPassword(password) {
return bcrypt.hash(password, 10);
+5 -5
View File
@@ -1,18 +1,18 @@
import postmark from "postmark";
import postmark from 'postmark';
const client = new postmark.ServerClient(process.env.POSTMARK_API_KEY);
export const sendEmail = async ({to, subject, html, text}) => {
export const sendEmail = async ({ to, subject, html, text }) => {
try {
await client.sendEmail({
From: process.env.EMAIL_FROM,
To: to,
Subject: subject,
HtmlBody: html,
TextBody: text || "",
MessageStream: "outbound",
TextBody: text || '',
MessageStream: 'outbound',
});
} catch (error) {
console.error("Email send error:", error);
console.error('Email send error:', error);
}
};