56 lines
2.6 KiB
Python
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}'
|
|
))
|