feat(blog): implement domain-specific blog fetching and canonical URL handling

This commit is contained in:
hamed
2026-07-24 10:01:35 +03:30
parent f46ba03422
commit 9053681375
4 changed files with 123 additions and 11 deletions
+26
View File
@@ -27,6 +27,32 @@ export function findCityById(cityId) {
return city && !isRootCity(city) ? city : null;
}
/**
* شناسهٔ شهری که باید به‌عنوان scope دامنه به API فرستاده شود.
* دامنهٔ ریشه (nobat724) و دامنهٔ ناشناخته scope ندارند → همهٔ محتوا را می‌بینند؛
* دامنهٔ شهری فقط پست‌های خودش + سراسری‌ها را (فیلتر سمت بک‌اند).
* @returns {number|null}
*/
export function domainScopeCityId({ matchedCity, isRoot } = {}) {
if (isRoot) return null;
const id = Number(matchedCity?.id);
return Number.isFinite(id) ? id : null;
}
/**
* آیا این پست روی این دامنه وجود دارد؟ آینهٔ فیلتر بک‌اند
* (`b.city = :cityId OR b.city IS NULL`) برای استفاده در تست و رندر سمت کلاینت.
* پست بدون شهر سراسری است و همه‌جا دیده می‌شود؛ پست شهریافته (از جمله پستِ رکورد
* ریشهٔ nobat724) فقط روی دامنهٔ خودش.
*/
export function isBlogVisibleOnDomain(blog, scope = {}) {
const scopeCityId = domainScopeCityId(scope);
if (scopeCityId === null) return true; // دامنهٔ ریشه/ناشناخته: بدون محدودیت
const ownerId = blog?.city?.id ?? blog?.city_id ?? null;
if (ownerId == null) return true; // سراسری
return Number(ownerId) === scopeCityId;
}
/**
* نام قابل‌نمایش شهر برای H1/Title.
* روی دامنهٔ ریشه نام رکورد («نوبت 724») یک برند است نه شهر — به‌جای آن «ایران».