feat: health check seo

This commit is contained in:
Kailasdevdas
2026-05-26 11:56:22 +05:30
parent 31c0e50177
commit 4d73da5ddd
9 changed files with 886 additions and 325 deletions
@@ -0,0 +1,14 @@
/*
Warnings:
- A unique constraint covering the columns `[seoId]` on the table `HealthPackage` will be added. If there are existing duplicate values, this will fail.
*/
-- AlterTable
ALTER TABLE "HealthPackage" ADD COLUMN "seoId" INTEGER;
-- CreateIndex
CREATE UNIQUE INDEX "HealthPackage_seoId_key" ON "HealthPackage"("seoId");
-- AddForeignKey
ALTER TABLE "HealthPackage" ADD CONSTRAINT "HealthPackage_seoId_fkey" FOREIGN KEY ("seoId") REFERENCES "Seo"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+6 -1
View File
@@ -259,6 +259,9 @@ model HealthPackage {
inquiries HealthPackageInquiry[]
seoId Int? @unique
seo Seo? @relation(fields: [seoId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
@@ -294,7 +297,9 @@ model DoctorSpecialization {
model Seo {
id Int @id @default(autoincrement())
doctor Doctor?
doctor Doctor?
healthPackage HealthPackage?
seoTitle String?
metaDescription String? @db.Text
@@ -121,7 +121,10 @@ export const getAllPackages = async (req, res) => {
categorySlug ? { category: { slug: categorySlug } } : {},
],
},
include: { category: true },
include: {
category: true,
seo: true,
},
orderBy: [{ sortOrder: "asc" }, { createdAt: "desc" }],
});
@@ -148,6 +151,7 @@ export const createPackage = async (req, res) => {
isActive,
isFeatured,
sortOrder,
seo,
} = req.body;
const healthPackage = await prisma.healthPackage.create({
@@ -163,6 +167,25 @@ export const createPackage = async (req, res) => {
isActive: isActive ?? true,
isFeatured: isFeatured ?? false,
sortOrder: sortOrder ? Number(sortOrder) : 1000,
...(seo && {
seo: {
create: {
seoTitle: seo.seoTitle,
metaDescription: seo.metaDescription,
focusKeyphrase: seo.focusKeyphrase,
slug: slug,
tags: seo.tags || [],
ogTitle: seo.ogTitle,
ogDescription: seo.ogDescription,
ogImage: seo.ogImage,
},
},
}),
},
include: {
category: true,
seo: true,
},
});
@@ -183,13 +206,58 @@ export const updatePackage = async (req, res) => {
const data = { ...req.body };
delete data.id;
delete data.category;
delete data.createdAt;
delete data.updatedAt;
delete data.seoId;
if (data.categoryId) data.categoryId = Number(data.categoryId);
if (data.sortOrder) data.sortOrder = Number(data.sortOrder);
const existingPackage = await prisma.healthPackage.findUnique({
where: { id: Number(id) },
select: { slug: true },
});
const seoSlug = data.slug || existingPackage.slug;
const updated = await prisma.healthPackage.update({
where: { id: Number(id) },
data,
data: {
...data,
seo: data.seo
? {
upsert: {
create: {
seoTitle: data.seo.seoTitle,
metaDescription: data.seo.metaDescription,
focusKeyphrase: data.seo.focusKeyphrase,
slug: seoSlug,
tags: data.seo.tags || [],
ogTitle: data.seo.ogTitle,
ogDescription: data.seo.ogDescription,
ogImage: data.seo.ogImage,
},
update: {
seoTitle: data.seo.seoTitle,
metaDescription: data.seo.metaDescription,
focusKeyphrase: data.seo.focusKeyphrase,
slug: seoSlug,
tags: data.seo.tags || [],
ogTitle: data.seo.ogTitle,
ogDescription: data.seo.ogDescription,
ogImage: data.seo.ogImage,
},
},
}
: undefined,
},
include: {
category: true,
seo: true,
},
});
return res
@@ -204,11 +272,21 @@ export const updatePackage = async (req, res) => {
export const deletePackage = async (req, res) => {
try {
const { id } = req.params;
await prisma.healthPackage.delete({ where: { id: Number(id) } });
return res.status(200).json({ success: true, message: "Package deleted" });
await prisma.healthPackage.delete({
where: { id: Number(id) },
});
return res.status(200).json({
success: true,
message: "Package deleted",
});
} catch (error) {
console.error(error);
return res.status(500).json({ success: false, message: "Delete failed" });
return res.status(500).json({
success: false,
message: "Delete failed",
});
}
};
@@ -363,7 +441,11 @@ export const getPackageBySlug = async (req, res) => {
const { slug } = req.params;
const healthPackage = await prisma.healthPackage.findFirst({
where: { slug, isActive: true },
include: { category: true },
include: {
category: true,
seo: true,
},
});
if (!healthPackage) {
@@ -372,7 +454,10 @@ export const getPackageBySlug = async (req, res) => {
.json({ success: false, message: "Package not found" });
}
return res.status(200).json({ success: true, data: healthPackage });
return res.status(200).json({
success: true,
data: healthPackage,
});
} catch (error) {
console.error(error);
return res
@@ -414,7 +499,9 @@ export const getAllInquiries = async (req, res) => {
take: queryLimit,
include: {
healthPackage: {
include: { category: true },
include: {
category: true,
},
},
},
orderBy: { createdAt: "desc" },