68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
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"
|