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"