chore: file formatting
This commit is contained in:
@@ -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
@@ -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',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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 });
|
||||
|
||||
@@ -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,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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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' });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 '';
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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,4 +1,4 @@
|
||||
import bcrypt from "bcryptjs";
|
||||
import bcrypt from 'bcryptjs';
|
||||
|
||||
export async function hashPassword(password) {
|
||||
return bcrypt.hash(password, 10);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user