L1L2 gen1Gen2 kialakítása
This commit is contained in:
180
tests/active/seed_commission_test_data.py
Normal file
180
tests/active/seed_commission_test_data.py
Normal file
@@ -0,0 +1,180 @@
|
||||
"""
|
||||
Seed test data for Commission Distribution verification.
|
||||
|
||||
Creates:
|
||||
1. Three users with a referral chain: UserC (buyer) -> UserB (Gen1) -> UserA (Gen2)
|
||||
2. An active L2_COMMISSION rule with commission_percent and upline_commission_percent
|
||||
|
||||
Usage:
|
||||
docker compose exec sf_api python /app/backend/tests/active/seed_commission_test_data.py
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/app/backend")
|
||||
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
||||
from sqlalchemy import text
|
||||
from datetime import date
|
||||
|
||||
|
||||
async def seed():
|
||||
database_url = os.getenv(
|
||||
"DATABASE_URL",
|
||||
"postgresql+asyncpg://service_finder:service_finder@postgres:5432/service_finder",
|
||||
)
|
||||
engine = create_async_engine(database_url, echo=False)
|
||||
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
async with async_session() as db:
|
||||
# Check if test users already exist
|
||||
existing = await db.execute(
|
||||
text("SELECT id, email FROM identity.users WHERE email LIKE 'commission_test_%' ORDER BY id")
|
||||
)
|
||||
existing_users = existing.fetchall()
|
||||
if existing_users:
|
||||
print(f"⚠️ Test users already exist: {[u.email for u in existing_users]}")
|
||||
print(" Skipping user creation.")
|
||||
|
||||
# Find the chain
|
||||
result = await db.execute(
|
||||
text("""
|
||||
SELECT u1.id AS buyer_id, u1.email AS buyer_email,
|
||||
u2.id AS gen1_id, u2.email AS gen1_email,
|
||||
u3.id AS gen2_id, u3.email AS gen2_email
|
||||
FROM identity.users u1
|
||||
JOIN identity.users u2 ON u1.referred_by_id = u2.id
|
||||
JOIN identity.users u3 ON u2.referred_by_id = u3.id
|
||||
WHERE u1.email = 'commission_test_buyer@test.com'
|
||||
""")
|
||||
)
|
||||
row = result.fetchone()
|
||||
if row:
|
||||
print(f"\n✅ Referral chain intact:")
|
||||
print(f" Buyer(Gen0): ID={row.buyer_id} < {row.buyer_email}")
|
||||
print(f" Gen1: ID={row.gen1_id} < {row.gen1_email}")
|
||||
print(f" Gen2: ID={row.gen2_id} < {row.gen2_email}")
|
||||
else:
|
||||
print("Creating test users with referral chain...")
|
||||
|
||||
# Create Gen2 (top-level referrer) - UserA
|
||||
result = await db.execute(
|
||||
text("""
|
||||
INSERT INTO identity.users
|
||||
(email, hashed_password, role, commission_tier, is_active, ui_mode,
|
||||
subscription_plan, is_vip, is_deleted, preferred_language,
|
||||
region_code, preferred_currency, scope_level,
|
||||
custom_permissions, alternative_emails, email_history,
|
||||
visual_settings, created_at)
|
||||
VALUES
|
||||
('commission_test_gen2@test.com', 'abc123', 'USER', 'STANDARD', TRUE, 'personal',
|
||||
'free', FALSE, FALSE, 'hu',
|
||||
'HU', 'HUF', 'user',
|
||||
'{}'::json, '[]'::json, '[]'::json,
|
||||
'{}'::jsonb, NOW())
|
||||
RETURNING id
|
||||
""")
|
||||
)
|
||||
gen2_id = result.scalar()
|
||||
print(f" Created Gen2 (Upline): ID={gen2_id}")
|
||||
|
||||
# Create Gen1 (referrer) - UserB, referred by Gen2
|
||||
result = await db.execute(
|
||||
text("""
|
||||
INSERT INTO identity.users
|
||||
(email, hashed_password, role, commission_tier, is_active, ui_mode,
|
||||
referred_by_id,
|
||||
subscription_plan, is_vip, is_deleted, preferred_language,
|
||||
region_code, preferred_currency, scope_level,
|
||||
custom_permissions, alternative_emails, email_history,
|
||||
visual_settings, created_at)
|
||||
VALUES
|
||||
('commission_test_gen1@test.com', 'abc123', 'USER', 'STANDARD', TRUE, 'personal',
|
||||
:gen2_id,
|
||||
'free', FALSE, FALSE, 'hu',
|
||||
'HU', 'HUF', 'user',
|
||||
'{}'::json, '[]'::json, '[]'::json,
|
||||
'{}'::jsonb, NOW())
|
||||
RETURNING id
|
||||
""").bindparams(gen2_id=gen2_id)
|
||||
)
|
||||
gen1_id = result.scalar()
|
||||
print(f" Created Gen1 (Referrer): ID={gen1_id}")
|
||||
|
||||
# Create Buyer (Gen0) - UserC, referred by Gen1
|
||||
result = await db.execute(
|
||||
text("""
|
||||
INSERT INTO identity.users
|
||||
(email, hashed_password, role, commission_tier, is_active, ui_mode,
|
||||
referred_by_id,
|
||||
subscription_plan, is_vip, is_deleted, preferred_language,
|
||||
region_code, preferred_currency, scope_level,
|
||||
custom_permissions, alternative_emails, email_history,
|
||||
visual_settings, created_at)
|
||||
VALUES
|
||||
('commission_test_buyer@test.com', 'abc123', 'USER', 'STANDARD', TRUE, 'personal',
|
||||
:gen1_id,
|
||||
'free', FALSE, FALSE, 'hu',
|
||||
'HU', 'HUF', 'user',
|
||||
'{}'::json, '[]'::json, '[]'::json,
|
||||
'{}'::jsonb, NOW())
|
||||
RETURNING id
|
||||
""").bindparams(gen1_id=gen1_id)
|
||||
)
|
||||
buyer_id = result.scalar()
|
||||
print(f" Created Buyer (Gen0): ID={buyer_id}")
|
||||
|
||||
print(f"\n✅ Referral chain created:")
|
||||
print(f" Buyer(Gen0): ID={buyer_id} -> referred_by={gen1_id}")
|
||||
print(f" Gen1: ID={gen1_id} -> referred_by={gen2_id}")
|
||||
print(f" Gen2: ID={gen2_id}")
|
||||
|
||||
# Check for existing L2_COMMISSION rules
|
||||
rule_result = await db.execute(
|
||||
text("""
|
||||
SELECT id, name, commission_percent, upline_commission_percent,
|
||||
commission_max_amount, is_active
|
||||
FROM marketplace.commission_rules
|
||||
WHERE rule_type = 'L2_COMMISSION'
|
||||
ORDER BY id
|
||||
""")
|
||||
)
|
||||
existing_rules = rule_result.fetchall()
|
||||
if existing_rules:
|
||||
print(f"\n⚠️ L2_COMMISSION rules already exist:")
|
||||
for r in existing_rules:
|
||||
print(f" ID={r.id}, Name={r.name}, Active={r.is_active}, "
|
||||
f"commission={r.commission_percent}%, upline={r.upline_commission_percent}%, "
|
||||
f"max={r.commission_max_amount}")
|
||||
else:
|
||||
print("\nCreating L2_COMMISSION rule...")
|
||||
result = await db.execute(
|
||||
text("""
|
||||
INSERT INTO marketplace.commission_rules
|
||||
(rule_type, name, description, tier, region_code,
|
||||
commission_percent, upline_commission_percent,
|
||||
commission_max_amount, is_campaign, is_active,
|
||||
start_date, end_date, created_by)
|
||||
VALUES
|
||||
('L2_COMMISSION', 'Standard 2-Level Commission', 'Default 2-level MLM commission rule',
|
||||
'STANDARD', 'HU',
|
||||
5.00, 2.00,
|
||||
50000.00, FALSE, TRUE,
|
||||
:start_date, NULL, 1)
|
||||
RETURNING id
|
||||
""").bindparams(start_date=date(2026, 1, 1))
|
||||
)
|
||||
rule_id = result.scalar()
|
||||
print(f" Created L2_COMMISSION rule: ID={rule_id}")
|
||||
print(f" commission_percent=5.00%, upline_commission_percent=2.00%, max=50000.00")
|
||||
|
||||
await db.commit()
|
||||
print("\n✅ Seed data created successfully!")
|
||||
|
||||
await engine.dispose()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(seed())
|
||||
Reference in New Issue
Block a user