From cb0a73891c9f227a96ad83126df85a4c97a3f5ab Mon Sep 17 00:00:00 2001 From: ITQ Date: Sun, 16 Feb 2025 12:40:58 +0300 Subject: [PATCH] feat: added core app --- .../services/backend/apps/core/__init__.py | 0 solution/services/backend/apps/core/apps.py | 13 +++++ solution/services/backend/apps/core/models.py | 48 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 solution/services/backend/apps/core/__init__.py create mode 100644 solution/services/backend/apps/core/apps.py create mode 100644 solution/services/backend/apps/core/models.py diff --git a/solution/services/backend/apps/core/__init__.py b/solution/services/backend/apps/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solution/services/backend/apps/core/apps.py b/solution/services/backend/apps/core/apps.py new file mode 100644 index 0000000..3f33d30 --- /dev/null +++ b/solution/services/backend/apps/core/apps.py @@ -0,0 +1,13 @@ +import contextlib + +from django.apps import AppConfig +from django.core.cache import cache + + +class CoreConfig(AppConfig): + name = "apps.core" + label = "core" + + def ready(self) -> None: + with contextlib.suppress(Exception): + cache.add("current_date", 0, timeout=None) diff --git a/solution/services/backend/apps/core/models.py b/solution/services/backend/apps/core/models.py new file mode 100644 index 0000000..27daed8 --- /dev/null +++ b/solution/services/backend/apps/core/models.py @@ -0,0 +1,48 @@ +import uuid +from typing import Any + +from django.core.exceptions import ValidationError +from django.db import models + +from config.errors import ConflictError + + +class BaseModel(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + + class Meta: + abstract = True + + def save(self, *args: Any, **kwargs: Any) -> None: + self.validate() + + super().save(*args, **kwargs) + + def validate( + self, + validate_unique: bool = True, + validate_constraints: bool = True, + include: list[models.Field] | None = None, + ) -> None: + self.full_clean( + validate_unique=False, + validate_constraints=False, + exclude=( + field.name + for field in set(self._meta.get_fields()) - set(include) + ) + if include + else None, + ) + + if validate_unique: + try: + self.validate_unique() + except ValidationError as e: + raise ConflictError(e) from None + + if validate_constraints: + try: + self.validate_constraints() + except ValidationError as e: + raise ConflictError(e) from None