1
0
forked from erp-dev/erp

feat: shipment change && version modelize

This commit is contained in:
2026-07-09 23:03:22 +08:00
parent 36e4bb6de6
commit 48e4782e1e
23 changed files with 947 additions and 36 deletions

View File

@@ -1,10 +1,11 @@
from django.conf import settings
from django.core.cache import cache
from django.utils import timezone
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
from api_v1.models import AppVersion
APP_VERSION_CACHE_KEY = "app_version:latest"
@@ -25,6 +26,7 @@ def build_app_version_payload(
download_url: str,
force=False,
publish_date=None,
message: str = "",
) -> dict:
return {
"latest_version": {
@@ -35,24 +37,25 @@ def build_app_version_payload(
"download_url": str(download_url or "").strip(),
"force": bool(force),
"publish_date": _coerce_publish_date(publish_date),
"message": str(message or ""),
}
def get_app_version_payload() -> dict:
cached_payload = cache.get(APP_VERSION_CACHE_KEY)
if isinstance(cached_payload, dict):
try:
version = cached_payload["latest_version"]
return build_app_version_payload(
major=version["major"],
minor=version["minor"],
build=version["build"],
download_url=cached_payload.get("download_url", ""),
force=cached_payload["force"],
publish_date=cached_payload["publish_date"],
)
except (KeyError, TypeError, ValueError):
pass
app_version = (
AppVersion.objects.filter(is_current=True).order_by('-created_at').first()
or AppVersion.objects.order_by('-created_at').first()
)
if app_version:
return build_app_version_payload(
major=app_version.major,
minor=app_version.minor,
build=app_version.build,
download_url=app_version.download_url,
force=app_version.force,
publish_date=app_version.publish_date,
message=app_version.message,
)
return build_app_version_payload(
major=getattr(settings, "APP_LATEST_VERSION_MAJOR", 0),
@@ -61,6 +64,7 @@ def get_app_version_payload() -> dict:
download_url=getattr(settings, "APP_DOWNLOAD_URL", ""),
force=getattr(settings, "APP_FORCE_UPDATE", False),
publish_date=getattr(settings, "APP_PUBLISH_DATE", None),
message=getattr(settings, "APP_VERSION_MESSAGE", ""),
)
@@ -72,17 +76,27 @@ def set_cached_app_version_payload(
download_url: str,
force=False,
publish_date=None,
message: str = "",
) -> dict:
payload = build_app_version_payload(
app_version = AppVersion.objects.create(
major=major,
minor=minor,
build=build,
download_url=download_url,
force=force,
publish_date=publish_date,
publish_date=publish_date or timezone.localdate(),
message=message,
is_current=True,
)
return build_app_version_payload(
major=app_version.major,
minor=app_version.minor,
build=app_version.build,
download_url=app_version.download_url,
force=app_version.force,
publish_date=app_version.publish_date,
message=app_version.message,
)
cache.set(APP_VERSION_CACHE_KEY, payload, timeout=None)
return payload
class AppVersionView(APIView):