P0: Subscription Stacking & Ad Engine - Implementation Complete #271

Closed
opened 2026-06-18 22:00:21 +02:00 by kincses · 2 comments
Owner

Mérföldkő: P0 - Subscription Stacking & Ad Engine
Cél: Subscription időhalmozás (stacking) implementálása duration_days segítségével, valamint a Native Ad Engine adatbázis séma (marketing schema) létrehozása.

🔗 Függőségek (Dependencies)

  • Bemenet: system.subscription_tiers (JSONB rules), finance.org_subscriptions, finance.user_subscriptions
  • Kimenet: marketing schema (7 tábla), seed_packages.py frissítés

📝 Implementáció

1. Pydantic Schema Bővítés (backend/app/schemas/subscription.py)

  • DurationModel: days, allow_stacking mezők
  • AdPolicyModel: show_ads, ad_free_grace_days, max_daily_impressions mezők
  • SubscriptionRulesModel: duration + ad_policy opcionális mezők

2. Stacking Logika (backend/app/services/billing_engine.py)

  • upgrade_org_subscription(): duration_days kiolvasása tier.rules-ból, valid_until számítás stackinggel
  • upgrade_subscription(): UserSubscription kezelés stacking logikával
  • Képlet: IF existing.valid_until > NOW → stacked = existing + duration_days ELSE fresh = NOW + duration_days

3. Ad Engine Modellek (backend/app/models/marketing.py)

  • 7 tábla a marketing sémában: campaigns, creatives, placements, campaign_creatives, campaign_placements, ad_impressions, ad_clicks
  • String-based enumok CheckConstraint-tel a sync_engine kompatibilitásért
  • Priority + weighted random selection logika

4. Seed Adatok (backend/app/scripts/seed_packages.py)

  • Mind a 6 csomag frissítve duration (30 nap, allow_stacking=true) és ad_policy mezőkkel
  • Free: show_ads=true, max_daily_impressions=50
  • Pro: show_ads=true, grace_days=3, max_impressions=100
  • VIP/Corporate: show_ads=false
  • UPSERT használata DELETE helyett FK referenciák megőrzéséért

5. Verifikáció

  • sync_engine: 1152 elem szinkronban, 7 marketing tábla létrehozva
  • seed_packages: 6 csomag sikeresen frissítve
  • Pydantic validáció: DurationModel, AdPolicyModel, SubscriptionRulesModel hibátlan
**Mérföldkő:** P0 - Subscription Stacking & Ad Engine **Cél:** Subscription időhalmozás (stacking) implementálása duration_days segítségével, valamint a Native Ad Engine adatbázis séma (marketing schema) létrehozása. ### 🔗 Függőségek (Dependencies) - **Bemenet:** system.subscription_tiers (JSONB rules), finance.org_subscriptions, finance.user_subscriptions - **Kimenet:** marketing schema (7 tábla), seed_packages.py frissítés ### 📝 Implementáció **1. Pydantic Schema Bővítés** (backend/app/schemas/subscription.py) - DurationModel: days, allow_stacking mezők - AdPolicyModel: show_ads, ad_free_grace_days, max_daily_impressions mezők - SubscriptionRulesModel: duration + ad_policy opcionális mezők **2. Stacking Logika** (backend/app/services/billing_engine.py) - upgrade_org_subscription(): duration_days kiolvasása tier.rules-ból, valid_until számítás stackinggel - upgrade_subscription(): UserSubscription kezelés stacking logikával - Képlet: IF existing.valid_until > NOW → stacked = existing + duration_days ELSE fresh = NOW + duration_days **3. Ad Engine Modellek** (backend/app/models/marketing.py) - 7 tábla a marketing sémában: campaigns, creatives, placements, campaign_creatives, campaign_placements, ad_impressions, ad_clicks - String-based enumok CheckConstraint-tel a sync_engine kompatibilitásért - Priority + weighted random selection logika **4. Seed Adatok** (backend/app/scripts/seed_packages.py) - Mind a 6 csomag frissítve duration (30 nap, allow_stacking=true) és ad_policy mezőkkel - Free: show_ads=true, max_daily_impressions=50 - Pro: show_ads=true, grace_days=3, max_impressions=100 - VIP/Corporate: show_ads=false - UPSERT használata DELETE helyett FK referenciák megőrzéséért **5. Verifikáció** - sync_engine: 1152 elem szinkronban, 7 marketing tábla létrehozva - seed_packages: 6 csomag sikeresen frissítve - Pydantic validáció: DurationModel, AdPolicyModel, SubscriptionRulesModel hibátlan
kincses added the Type: FeatureStatus: In Progress labels 2026-06-18 22:00:31 +02:00
kincses started working 2026-06-18 22:00:31 +02:00
Author
Owner

▶️ Munka megkezdve: 2026-06-18 22:00:31

▶️ **Munka megkezdve:** 2026-06-18 22:00:31
kincses added Status: Done and removed Status: In Progress labels 2026-06-18 22:01:08 +02:00
kincses worked for 37 seconds 2026-06-18 22:01:08 +02:00
Author
Owner

Munka befejezve: 2026-06-18 22:01:08

Technikai Összefoglaló:
P0 implementáció kész. 1) Pydantic schema bővítés DurationModel/AdPolicyModel. 2) Stacking logika upgrade_org_subscription() és upgrade_subscription() függvényekben. 3) marketing schema: 7 új tábla (campaigns, creatives, placements, campaign_creatives, campaign_placements, ad_impressions, ad_clicks). 4) Seed adatok frissítve UPSERT-tel. sync_engine: 1152 elem szinkronban. Verifikáció: Pydantic validáció, stacking szimuláció, adatbázis lekérdezés mind OK.

⏱️ Az idő rögzítve.

✅ **Munka befejezve:** 2026-06-18 22:01:08 **Technikai Összefoglaló:** P0 implementáció kész. 1) Pydantic schema bővítés DurationModel/AdPolicyModel. 2) Stacking logika upgrade_org_subscription() és upgrade_subscription() függvényekben. 3) marketing schema: 7 új tábla (campaigns, creatives, placements, campaign_creatives, campaign_placements, ad_impressions, ad_clicks). 4) Seed adatok frissítve UPSERT-tel. sync_engine: 1152 elem szinkronban. Verifikáció: Pydantic validáció, stacking szimuláció, adatbázis lekérdezés mind OK. ⏱️ *Az idő rögzítve.*
Sign in to join this conversation.