Add Splitwise clone backend
This commit is contained in:
67
app/models.py
Normal file
67
app/models.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from tortoise import Model, fields
|
||||
|
||||
|
||||
class User(Model):
|
||||
id = fields.UUIDField(pk=True)
|
||||
sub = fields.CharField(max_length=255, unique=True)
|
||||
email = fields.CharField(max_length=255, null=True)
|
||||
name = fields.CharField(max_length=255, null=True)
|
||||
created_at = fields.DatetimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
table = "users"
|
||||
|
||||
|
||||
class ExpenseReport(Model):
|
||||
id = fields.UUIDField(pk=True)
|
||||
title = fields.CharField(max_length=512)
|
||||
creator: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
|
||||
"models.User", related_name="created_reports"
|
||||
)
|
||||
participants: fields.ReverseRelation["ExpenseParticipant"]
|
||||
items: fields.ReverseRelation["ExpenseItem"]
|
||||
created_at = fields.DatetimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
table = "expense_reports"
|
||||
|
||||
|
||||
class ExpenseParticipant(Model):
|
||||
id = fields.UUIDField(pk=True)
|
||||
report: fields.ForeignKeyRelation["ExpenseReport"] = fields.ForeignKeyField(
|
||||
"models.ExpenseReport", related_name="participants"
|
||||
)
|
||||
user: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
|
||||
"models.User", related_name="report_participations"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
table = "expense_participants"
|
||||
unique_together = (("report", "user"),)
|
||||
|
||||
|
||||
class ExpenseItem(Model):
|
||||
id = fields.UUIDField(pk=True)
|
||||
report: fields.ForeignKeyRelation["ExpenseReport"] = fields.ForeignKeyField(
|
||||
"models.ExpenseReport", related_name="items"
|
||||
)
|
||||
description = fields.CharField(max_length=1024)
|
||||
amount = fields.DecimalField(max_digits=12, decimal_places=2)
|
||||
shares: fields.ReverseRelation["ExpenseShare"]
|
||||
|
||||
class Meta:
|
||||
table = "expense_items"
|
||||
|
||||
|
||||
class ExpenseShare(Model):
|
||||
id = fields.UUIDField(pk=True)
|
||||
item: fields.ForeignKeyRelation["ExpenseItem"] = fields.ForeignKeyField(
|
||||
"models.ExpenseItem", related_name="shares"
|
||||
)
|
||||
user: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
|
||||
"models.User", related_name="expense_shares"
|
||||
)
|
||||
percentage = fields.FloatField()
|
||||
|
||||
class Meta:
|
||||
table = "expense_shares"
|
||||
Reference in New Issue
Block a user