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}' ))