Feature: Partner-Codes + Gründer-Lizenz-System für Influencer-Kooperationen
- partner_codes Tabelle: Code, Label, max_uses, grants_founder, uses-Counter
- users: is_founder + is_partner Flags (DB-Migration + auth.py SELECT)
- Registrierung: Partner-Code löst Gründer-Lizenz aus (vor User-Referral geprüft)
- API: GET/POST/DELETE /api/admin/partner/codes, POST /api/admin/partner/users/{id}/grant
- API: GET /api/partner/codes/{code}/info (öffentlich, für Registrierungsvalidierung)
- API: GET /api/admin/users/search (Name-Suche für Admin-UI)
- Admin-Tab "Partner & Codes": Code anlegen, Stats, User-Status vergeben
- Registrierungsformular: Einladungscode-Feld mit Live-Validierung
- Settings: Gründer (lila) + Partner (blau) Badge neben Kostenlos/Plus
- SW by-v515, APP_VER 492
This commit is contained in:
parent
810c1a79dc
commit
e57c6db013
9 changed files with 469 additions and 20 deletions
|
|
@ -78,13 +78,36 @@ async def register(data: RegisterRequest, response: Response, request: Request):
|
|||
new_user_id = user["id"]
|
||||
|
||||
if data.ref_code:
|
||||
referrer = conn.execute(
|
||||
"SELECT id FROM users WHERE referral_code=? AND id != ?",
|
||||
(data.ref_code.strip().upper(), new_user_id)
|
||||
code_upper = data.ref_code.strip().upper()
|
||||
# Zuerst prüfen ob es ein Partner-Code ist
|
||||
partner = conn.execute(
|
||||
"SELECT id, grants_founder, max_uses, uses FROM partner_codes WHERE code=?",
|
||||
(code_upper,)
|
||||
).fetchone()
|
||||
if referrer:
|
||||
conn.execute("UPDATE users SET referred_by=? WHERE id=?",
|
||||
(referrer['id'], new_user_id))
|
||||
if partner:
|
||||
# Nur einlösen wenn max_uses nicht erreicht
|
||||
if partner["max_uses"] is None or partner["uses"] < partner["max_uses"]:
|
||||
conn.execute(
|
||||
"UPDATE partner_codes SET uses=uses+1 WHERE id=?",
|
||||
(partner["id"],)
|
||||
)
|
||||
updates = {"referred_by": -partner["id"]}
|
||||
if partner["grants_founder"]:
|
||||
updates["is_founder"] = 1
|
||||
set_clause = ", ".join(f"{k}=?" for k in updates)
|
||||
conn.execute(
|
||||
f"UPDATE users SET {set_clause} WHERE id=?",
|
||||
(*updates.values(), new_user_id)
|
||||
)
|
||||
else:
|
||||
# Fallback: Referral-Code eines anderen Users
|
||||
referrer = conn.execute(
|
||||
"SELECT id FROM users WHERE referral_code=? AND id != ?",
|
||||
(code_upper, new_user_id)
|
||||
).fetchone()
|
||||
if referrer:
|
||||
conn.execute("UPDATE users SET referred_by=? WHERE id=?",
|
||||
(referrer['id'], new_user_id))
|
||||
|
||||
token = create_token(user["id"], user["rolle"])
|
||||
_set_cookie(response, token)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue