list_patchnotes to fix encoding error
This commit is contained in:
parent
5ec51451ee
commit
b58b56249a
|
|
@ -120,67 +120,61 @@ def get_patchnote(patch_id): # noqa: E501
|
|||
)
|
||||
|
||||
|
||||
from datetime import datetime, date
|
||||
from flask import Response
|
||||
from bson import json_util
|
||||
|
||||
def list_patchnotes(since: str | None = None):
|
||||
"""GET /patchnotes – liefert neue Patchnotes und setzt last_login."""
|
||||
|
||||
user_id = current_user_id()
|
||||
|
||||
# Last login aus DB holen
|
||||
last_login_doc = last_login_collection.find_one({"user_id": user_id})
|
||||
last_login = last_login_doc.get("last_login") if last_login_doc else None
|
||||
|
||||
# Abfrage definieren (default: alles holen)
|
||||
user_id = current_user_id() # 1) aktueller Benutzer
|
||||
last_login = last_login_collection.find_one({"user_id": user_id}, {"last_login"})
|
||||
query = {}
|
||||
|
||||
if since:
|
||||
# since validieren
|
||||
query = {
|
||||
"patch_date": {
|
||||
"$gte": last_login,
|
||||
"$lte": since
|
||||
}
|
||||
}
|
||||
try:
|
||||
since_date = datetime.strptime(since, "%Y-%m-%d").date()
|
||||
datetime.strptime(since, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
raise ProblemException(
|
||||
title="Bad Request",
|
||||
detail="since must be in format YYYY-MM-DD",
|
||||
detail="since must be YYYY-MM-DD",
|
||||
status=400,
|
||||
)
|
||||
|
||||
# last_login ebenfalls in date konvertieren, wenn vorhanden
|
||||
if last_login:
|
||||
if isinstance(last_login, str):
|
||||
last_login = datetime.strptime(last_login, "%Y-%m-%d").date()
|
||||
elif isinstance(last_login, datetime):
|
||||
last_login = last_login.date()
|
||||
|
||||
# Datumsbereichs-Query
|
||||
query = {
|
||||
"patch_date": {
|
||||
"$gte": last_login if last_login else date.min,
|
||||
"$lte": since_date
|
||||
}
|
||||
}
|
||||
# 3) Datum validieren (nur wenn vorhanden)
|
||||
elif since is None:
|
||||
try:
|
||||
docs = collection.find({})
|
||||
for d in docs:
|
||||
d.pop("_id", None)
|
||||
if isinstance(d["patch_date"], (datetime, date)):
|
||||
d["patch_date"] = d["patch_date"].isoformat()
|
||||
except ValueError as e:
|
||||
raise ProblemException(
|
||||
title="Internal Server Error",
|
||||
detail=str(e),
|
||||
status=500,
|
||||
)
|
||||
# 4) Patchnotes abholen
|
||||
|
||||
# Patchnotes holen
|
||||
docs = list(collection.find(query).sort("patch_date", 1))
|
||||
for d in docs:
|
||||
d.pop("_id", None)
|
||||
if isinstance(d.get("patch_date"), (datetime, date)):
|
||||
if isinstance(d["patch_date"], (datetime, date)):
|
||||
d["patch_date"] = d["patch_date"].isoformat()
|
||||
|
||||
# Heutiges Datum als neuen last_login speichern
|
||||
# 5) Heutiges Datum als neuen last_login speichern
|
||||
today = date.today().isoformat()
|
||||
last_login_collection.update_one(
|
||||
{"user_id": user_id},
|
||||
{"$set": {"last_login": today}},
|
||||
upsert=True,
|
||||
)
|
||||
|
||||
return Response(json_util.dumps(docs), mimetype="application/json", status=200)
|
||||
|
||||
|
||||
|
||||
def update_patchnote(patch_id, body): # noqa: E501
|
||||
"""Updates one patch note (full replace)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue