feat: server-side pagination, search, and date filter for appointments
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
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";
|
||||
|
||||
export const createAppointment = async (req, res) => {
|
||||
try {
|
||||
const {name, mobileNumber, email, message, date, doctorId, departmentId} =
|
||||
const { name, mobileNumber, email, message, date, doctorId, departmentId } =
|
||||
req.body;
|
||||
|
||||
if (!name || !mobileNumber || !doctorId || !departmentId || !date) {
|
||||
@@ -71,26 +71,49 @@ export const createAppointment = async (req, res) => {
|
||||
|
||||
export const getAppointments = async (req, res) => {
|
||||
try {
|
||||
const appointments = await prisma.appointment.findMany({
|
||||
include: {
|
||||
doctor: true,
|
||||
department: true,
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: "desc",
|
||||
},
|
||||
});
|
||||
const page = parseInt(req.query.page) || 1;
|
||||
const limit = parseInt(req.query.limit) || 10;
|
||||
const skip = (page - 1) * limit;
|
||||
const { date, search } = req.query;
|
||||
|
||||
const where = {};
|
||||
|
||||
if (date) {
|
||||
const start = new Date(date);
|
||||
const end = new Date(date);
|
||||
end.setDate(end.getDate() + 1);
|
||||
where.date = { gte: start, lt: end };
|
||||
}
|
||||
|
||||
if (search) {
|
||||
where.OR = [
|
||||
{ name: { contains: search, mode: "insensitive" } },
|
||||
{ mobileNumber: { contains: search } },
|
||||
{ email: { contains: search, mode: "insensitive" } },
|
||||
];
|
||||
}
|
||||
|
||||
const [appointments, total] = await Promise.all([
|
||||
prisma.appointment.findMany({
|
||||
where,
|
||||
include: { doctor: true, department: true },
|
||||
orderBy: { createdAt: "desc" },
|
||||
skip,
|
||||
take: limit,
|
||||
}),
|
||||
prisma.appointment.count({ where }),
|
||||
]);
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
data: appointments,
|
||||
pagination: { total, page, limit, totalPages: Math.ceil(total / limit) },
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: "Failed to fetch appointments",
|
||||
});
|
||||
res
|
||||
.status(500)
|
||||
.json({ success: false, message: "Failed to fetch appointments" });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -98,7 +121,7 @@ export const getAppointments = async (req, res) => {
|
||||
|
||||
export const getAppointment = async (req, res) => {
|
||||
try {
|
||||
const {id} = req.params;
|
||||
const { id } = req.params;
|
||||
|
||||
const appointment = await prisma.appointment.findUnique({
|
||||
where: {
|
||||
@@ -134,7 +157,7 @@ export const getAppointment = async (req, res) => {
|
||||
|
||||
export const getAppointmentsByDoctor = async (req, res) => {
|
||||
try {
|
||||
const {doctorId} = req.params;
|
||||
const { doctorId } = req.params;
|
||||
|
||||
const appointments = await prisma.appointment.findMany({
|
||||
where: {
|
||||
@@ -166,7 +189,7 @@ export const getAppointmentsByDoctor = async (req, res) => {
|
||||
|
||||
export const getAppointmentsByDepartment = async (req, res) => {
|
||||
try {
|
||||
const {departmentId} = req.params;
|
||||
const { departmentId } = req.params;
|
||||
|
||||
const appointments = await prisma.appointment.findMany({
|
||||
where: {
|
||||
@@ -195,7 +218,7 @@ export const getAppointmentsByDepartment = async (req, res) => {
|
||||
|
||||
export const updateAppointment = async (req, res) => {
|
||||
try {
|
||||
const {id} = req.params;
|
||||
const { id } = req.params;
|
||||
|
||||
const appointment = await prisma.appointment.update({
|
||||
where: {
|
||||
@@ -226,7 +249,7 @@ export const updateAppointment = async (req, res) => {
|
||||
|
||||
export const deleteAppointment = async (req, res) => {
|
||||
try {
|
||||
const {id} = req.params;
|
||||
const { id } = req.params;
|
||||
|
||||
await prisma.appointment.delete({
|
||||
where: {
|
||||
|
||||
Reference in New Issue
Block a user