From 59e68f47bd2c8dffd93d02a79dfc81dccec46d26 Mon Sep 17 00:00:00 2001 From: bronsen Date: Tue, 9 Dec 2025 00:53:17 +0100 Subject: [PATCH] [models] extract common fields into mixin --- src/teilchensammler_cli/models.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/teilchensammler_cli/models.py b/src/teilchensammler_cli/models.py index 19839da..61e7a54 100644 --- a/src/teilchensammler_cli/models.py +++ b/src/teilchensammler_cli/models.py @@ -1,18 +1,19 @@ -from typing import final +from datetime import datetime from tortoise import Model, fields -@final -class Teilchen(Model): - name = fields.TextField() - description = fields.TextField() - number = fields.IntField() # validate values >= 0 +class TimestampMixin: + created_at: fields.Field[datetime] = fields.DatetimeField(auto_now_add=True) + modified_at: fields.Field[datetime] = fields.DatetimeField(auto_now=True) - created_at = fields.DatetimeField(auto_now_add=True) - modified_at = fields.DatetimeField(auto_now=True) - tags = fields.ManyToManyField( +class Teilchen(TimestampMixin, Model): + name: fields.Field[str] = fields.TextField() + description: fields.Field[str] = fields.TextField() + number: fields.Field[int] = fields.IntField() # TODO: validate values >= 0 + + tags: fields.ManyToManyRelation["Tag"] = fields.ManyToManyField( "models.Tag", through="models.TeilchenTag", related_name="teilchen", @@ -21,18 +22,13 @@ class Teilchen(Model): ) -@final -class Tag(Model): - name = fields.CharField(max_length=20) - - created_at = fields.DatetimeField(auto_now_add=True) - modified_at = fields.DatetimeField(auto_now=True) +class Tag(TimestampMixin, Model): + name: fields.Field[str] = fields.CharField(max_length=20) -@final class TeilchenTag(Model): teilchen: fields.ForeignKeyRelation[Teilchen] = fields.ForeignKeyField( "models.Teilchen" ) tag: fields.ForeignKeyRelation[Tag] = fields.ForeignKeyField("models.Tag") - weight = fields.IntField() + weight: fields.Field[int] = fields.IntField() # range? percentage?