Files
clovening/splitchat/core/management/commands/create_demo.py
MonkeyStrongTogether 87ec426fed Inital commit
2026-05-22 17:48:03 +02:00

56 lines
2.6 KiB
Python

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from core.models import ChatRoom, Membership, Event, Expense, ExpenseSplit, UserProfile
from decimal import Decimal
class Command(BaseCommand):
help = 'Create demo data for testing'
def handle(self, *args, **kwargs):
# Users
alice, _ = User.objects.get_or_create(username='alice', defaults={'email': 'alice@example.com', 'first_name': 'Alice'})
alice.set_password('demo1234')
alice.save()
UserProfile.objects.update_or_create(user=alice, defaults={'avatar_color': '#6366f1'})
bob, _ = User.objects.get_or_create(username='bob', defaults={'email': 'bob@example.com', 'first_name': 'Bob'})
bob.set_password('demo1234')
bob.save()
UserProfile.objects.update_or_create(user=bob, defaults={'avatar_color': '#ec4899'})
carol, _ = User.objects.get_or_create(username='carol', defaults={'email': 'carol@example.com', 'first_name': 'Carol'})
carol.set_password('demo1234')
carol.save()
UserProfile.objects.update_or_create(user=carol, defaults={'avatar_color': '#22c55e'})
# Room
room, _ = ChatRoom.objects.get_or_create(name='Weekend Trip 🏕️', defaults={
'description': 'Planning our camping trip!',
'created_by': alice,
})
for user, admin in [(alice, True), (bob, False), (carol, False)]:
Membership.objects.get_or_create(user=user, room=room, defaults={'is_admin': admin})
# Event
event, _ = Event.objects.get_or_create(title='Camping Supplies Run', defaults={
'room': room, 'created_by': alice,
'description': 'Buying supplies for the trip',
'location': 'REI Downtown',
})
if not event.expenses.exists():
e1 = Expense.objects.create(event=event, description='Tent & Sleeping bags',
amount=Decimal('120.00'), paid_by=alice, split_type='equal')
for u in [alice, bob, carol]:
ExpenseSplit.objects.create(expense=e1, user=u, amount=Decimal('40.00'))
e2 = Expense.objects.create(event=event, description='Food & Snacks',
amount=Decimal('75.00'), paid_by=bob, split_type='equal')
for u in [alice, bob, carol]:
ExpenseSplit.objects.create(expense=e2, user=u, amount=Decimal('25.00'))
self.stdout.write(self.style.SUCCESS(
f'Demo created! Login: alice/demo1234, bob/demo1234, carol/demo1234\n'
f'Room invite code: {room.invite_code}'
))