Feature: 100 Gründer-Challenge — Leaderboard, Ranking, founder_number

- users.founder_number: sequentielle Nummer #1-#100 (bei Registrierung mit Code oder Admin-Grant)
- Globaler Cap: max. 100 Gründer über alle Partner-Codes zusammen
- GET /api/partner/founders/stats: öffentlich — Slots, Partner-Ranking nach uses, Gründer-Galerie
- Öffentliche Seite /gruender: Fortschrittsbalken, Partner-Challenge-Leaderboard (🥇🥈🥉), Gründer-Grid
- Forum: "Gründer #42"-Badge (lila) neben Autorenname bei Threads + Antworten
- Settings: Badge zeigt "Gründer #N" statt nur "Gründer", klickbar zur /gruender-Seite
- Sidebar: "🏆 100 Gründer"-Link im Footer
- Admin-Grant: Vergabe von founder_number beim manuellen is_founder=1-Setzen
- SW by-v516, APP_VER 493
This commit is contained in:
rene 2026-04-29 21:30:52 +02:00
parent e57c6db013
commit ab41af470d
10 changed files with 243 additions and 18 deletions

View file

@ -93,7 +93,13 @@ async def register(data: RegisterRequest, response: Response, request: Request):
)
updates = {"referred_by": -partner["id"]}
if partner["grants_founder"]:
updates["is_founder"] = 1
total_founders = conn.execute(
"SELECT COUNT(*) FROM users WHERE is_founder=1"
).fetchone()[0]
if total_founders < 100:
founder_num = total_founders + 1
updates["is_founder"] = 1
updates["founder_number"] = founder_num
set_clause = ", ".join(f"{k}=?" for k in updates)
conn.execute(
f"UPDATE users SET {set_clause} WHERE id=?",