Add Schema.org JSON-LD, SEO meta overrides, and resilient bulk SMS.
Expose Organization/LocalBusiness and Product/BlogPosting jsonLd, optional seoMeta fields on content/categories, and continue mass SMS after per-recipient failures. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
db305c58a4
commit
aaf7a83742
@@ -14,6 +14,11 @@ import {
|
||||
import { AuthUser } from '../auth/auth.types';
|
||||
import { PermissionsService } from '../auth/permissions.service';
|
||||
import { CategoryTechnicalFormService } from '../categories/category-technical-form.service';
|
||||
import {
|
||||
applySeoMetaToMetadata,
|
||||
normalizeSeoMetaInput,
|
||||
readSeoMetaFromMetadata,
|
||||
} from '../common/seo-meta.util';
|
||||
import { MediaService } from '../media/media.service';
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import {
|
||||
@@ -337,9 +342,12 @@ export class UserProductsService {
|
||||
const content: Prisma.InputJsonValue = {
|
||||
...(dto.titleEn?.trim() ? { titleEn: dto.titleEn.trim() } : {}),
|
||||
};
|
||||
const metadata: Prisma.InputJsonValue = {
|
||||
priceByExpert: dto.priceByExpert === true,
|
||||
};
|
||||
const metadata = applySeoMetaToMetadata(
|
||||
{
|
||||
priceByExpert: dto.priceByExpert === true,
|
||||
},
|
||||
normalizeSeoMetaInput(dto.seoMetaTitle, dto.seoMetaDescription),
|
||||
) as Prisma.InputJsonValue;
|
||||
|
||||
const created = await this.prisma.$transaction(async (tx) => {
|
||||
const product = await tx.userProduct.create({
|
||||
@@ -522,10 +530,13 @@ export class UserProductsService {
|
||||
const content: Prisma.InputJsonValue = {
|
||||
...(dto.titleEn?.trim() ? { titleEn: dto.titleEn.trim() } : {}),
|
||||
};
|
||||
const metadata: Prisma.InputJsonValue = {
|
||||
...existingMetadata,
|
||||
priceByExpert: dto.priceByExpert === true,
|
||||
};
|
||||
const metadata = applySeoMetaToMetadata(
|
||||
{
|
||||
...existingMetadata,
|
||||
priceByExpert: dto.priceByExpert === true,
|
||||
},
|
||||
normalizeSeoMetaInput(dto.seoMetaTitle, dto.seoMetaDescription),
|
||||
) as Prisma.InputJsonValue;
|
||||
|
||||
let slug = existing.slug;
|
||||
if (titleFa !== existing.title) {
|
||||
@@ -1269,6 +1280,7 @@ export class UserProductsService {
|
||||
priceCurrency: product.priceCurrency,
|
||||
priceByExpert,
|
||||
promoted,
|
||||
...readSeoMetaFromMetadata(metadata),
|
||||
status: product.status,
|
||||
condition: product.condition,
|
||||
deliveryNote: product.deliveryNote,
|
||||
|
||||
Reference in New Issue
Block a user