chore: file formatting
This commit is contained in:
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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' });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user