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