Add video optimization and following-first feed

هذا الالتزام موجود في:
2026-05-17 18:37:42 +03:00
الأصل 045c74014c
التزام 4912a99b8d
9 ملفات معدلة مع 416 إضافات و20 حذوفات

عرض الملف

@@ -69,6 +69,7 @@ export class FeedService {
) {}
async getMyFeed(currentUserId: string, query: FeedQueryDto) {
const followingOnly = query.followingOnly ?? true;
const cacheEnabled =
this.configService.get<boolean>('feedCache.enabled', { infer: true }) ?? true;
const globalVersion = cacheEnabled ? await this.feedVersionService.getGlobalVersion() : 0;
@@ -79,7 +80,7 @@ export class FeedService {
page: query.page ?? 1,
limit: query.limit ?? 20,
cursor: query.cursor ?? '',
followingOnly: query.followingOnly ?? false,
followingOnly,
radiusKm: query.radiusKm ?? 30,
preferredPostType: query.preferredPostType ?? '',
includeSuggestions,
@@ -100,14 +101,23 @@ export class FeedService {
const limit = query.limit ?? 20;
const cursorOffset = decodeOffsetCursor(query.cursor);
const page = query.page ?? 1;
const followingOnly = query.followingOnly ?? false;
const radiusKm = query.radiusKm ?? 30;
const skip = cursorOffset ?? (page - 1) * limit;
const followingIds = await this.feedRepository.findFollowingIds(currentUserId);
const filter = this.buildVisiblePostsFilter(currentUserId, followingIds, followingOnly);
let filter = this.buildVisiblePostsFilter(currentUserId, followingIds, followingOnly);
let candidates = await this.feedRepository.findCandidatePosts(filter, Math.max(limit * 12, 300));
const candidates = await this.feedRepository.findCandidatePosts(filter, Math.max(limit * 12, 300));
// Keep the default home feed focused on followed accounts, but avoid an empty screen
// for new users or when followed accounts have not posted yet.
if (
candidates.length === 0 &&
typeof query.followingOnly === 'undefined' &&
followingOnly
) {
filter = this.buildVisiblePostsFilter(currentUserId, followingIds, false);
candidates = await this.feedRepository.findCandidatePosts(filter, Math.max(limit * 12, 300));
}
const scored = candidates
.filter((post) => {