2024-12-26 14:42:24 +02:00

43 lines
1.2 KiB
Python

from datetime import datetime
from typing import Literal
from tortoise import fields
from tortoise.models import Model
from tortoise.validators import MinLengthValidator
from service.core.security import get_password_hash
from service.database.validators import EmailValidator
__all__ = [
"User",
"AnonymousUser",
]
class TimestampMixin(Model):
id: int = fields.BigIntField(pk=True)
created_at: datetime = fields.DatetimeField(null=True, auto_now_add=True)
modified_at: datetime = fields.DatetimeField(null=True, auto_now=True)
class Meta:
abstract = True
class User(TimestampMixin, Model):
email = fields.CharField(max_length=255, validators=[MinLengthValidator(5), EmailValidator(False)], unique=True)
username = fields.CharField(max_length=32, unique=True)
password = fields.CharField(max_length=256)
is_superuser = fields.BooleanField(default=False, description="Is user a SuperUser?")
# Helper for auto-complete and typing
# model_set: fields.ReverseRelation["DatabaseModel"]
def set_password(self, new_password: str) -> None:
self.password = get_password_hash(new_password)
class AnonymousUser:
id: Literal[0] = 0
email: Literal[""] = ""
username: Literal[""] = ""