feat(blog): implement domain-specific blog fetching and canonical URL handling
This commit is contained in:
@@ -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») یک برند است نه شهر — بهجای آن «ایران».
|
||||
|
||||
Reference in New Issue
Block a user