Tabele per urzadzenie (migracja 0037): clip_seen (wykluczenie, wiersz przy
podaniu klipu), clip_feed_events (append-only: impression z dwell, skip,
complete, like, unlike, not_interested, autoswipe), clip_affinity (wagi
tag/nisza/tworca w JSONB), clip_favorites, clip_blacklist. GIN na clips.niches.
GET /clips/feed: kursor base64 {seed, pk, page} zamiast offsetu; 80% z puli
afinicznosci (skany po tagu/niszy/tworcy od losowego uuid, punktacja
sum wag + 0,3 ln(1+lajki) + swiezosc, max 2 klipy tworcy na strone) + 20%
explore (okno 2000 id po PK, losowanie wazone lajkami, zawijanie na koncu).
Bez wag 100% explore. POST /clips/events: zapis, podniesienie outcome,
ulubione, delty wag (like +5, complete +3, dwell>=10 s +1, skip<2 s -1,
not_interested -4 i -8 na wskazany cel). Onboarding 3 tapow, opcje,
blacklista tag/nisza/tworca, reset feedu, ulubione. Import miedzy
urzadzeniami kopiuje clip_seen, clip_favorites i clip_blacklist.
Job clips-maintenance co 24 h: decay wag x0,97, retencja zdarzen 90 dni,
reaper (HEAD na 2000 najdawniej sprawdzanych). Logika bez bazy w
app/clips_feed.py z testami (kursor, delty, cap/decay, punktacja, sklad).
|
||
|---|---|---|
| .. | ||
| 20260502_0001_initial.py | ||
| 20260502_0002_playback_sources.py | ||
| 20260503_0003_playback_dead.py | ||
| 20260504_0004_animated_thumbnail.py | ||
| 20260504_0005_favorite_performers.py | ||
| 20260504_0006_blacklists.py | ||
| 20260504_0007_play_progress.py | ||
| 20260506_0008_performer_search_meta.py | ||
| 20260506_0009_movies.py | ||
| 20260506_0010_favorite_scenes.py | ||
| 20260507_0011_origin_pornapp_to_tube.py | ||
| 20260508_0012_favorite_studios.py | ||
| 20260509_0013_bug_reports.py | ||
| 20260509_0014_favorite_movies.py | ||
| 20260510_0015_bug_reports_movie_id.py | ||
| 20260512_0016_realdebrid_cache.py | ||
| 20260512_0017_drop_realdebrid_cache.py | ||
| 20260528_0018_movie_play_progress.py | ||
| 20260531_0019_taxonomy_scene_counts.py | ||
| 20260602_0020_scene_tags_tag_id_index.py | ||
| 20260607_0021_scene_tags_tag_id_stats.py | ||
| 20260608_0022_device_scoped_user_state.py | ||
| 20260612_0023_bug_report_replies.py | ||
| 20260616_0024_saved_searches.py | ||
| 20260622_0025_source_ranking.py | ||
| 20260702_0026_scene_backfill_flag.py | ||
| 20260705_0027_playback_event_error_detail.py | ||
| 20260721_0028_tags_name_altkey_index.py | ||
| 20260727_0025_phash_blacklist.py | ||
| 20260727_0026_scene_performer_source.py | ||
| 20260727_0027_scenes_title_trgm.py | ||
| 20260813_0028_phash_backfill_queue.py | ||
| 20260818_0029_scenes_max_quality.py | ||
| 20260818_0030_scenes_quality_threshold_idx.py | ||
| 20260820_0031_duration_backfill_queue.py | ||
| 20260820_0032_origin_release_sort_idx.py | ||
| 20260820_0033_effective_date_idx.py | ||
| 20260902_0034_favorite_sites.py | ||
| 20260914_0035_scenes_duration_idx.py | ||
| 20260914_0036_clips.py | ||
| 20260914_0037_clip_feed.py | ||