diff --git a/devplacepy/push.py b/devplacepy/push.py index bd8b841..7cba340 100644 --- a/devplacepy/push.py +++ b/devplacepy/push.py @@ -250,7 +250,7 @@ async def notify_user(user_uid: str, payload: dict[str, Any]) -> None: async def register( user_uid: str, endpoint: str, key_auth: str, key_p256dh: str -) -> dict[str, Any]: +) -> tuple[dict[str, Any], bool]: table = get_table("push_registration") existing = table.find_one( user_uid=user_uid, @@ -261,7 +261,7 @@ async def register( ) if existing: logger.debug("Push subscription already registered for user %s", user_uid) - return existing + return existing, False record = { "uid": generate_uid(), @@ -274,4 +274,4 @@ async def register( } table.insert(record) logger.info("Registered push subscription for user %s", user_uid) - return record + return record, True diff --git a/devplacepy/routers/push.py b/devplacepy/routers/push.py index ca646e0..84f2a0e 100644 --- a/devplacepy/routers/push.py +++ b/devplacepy/routers/push.py @@ -35,17 +35,18 @@ async def push_register(request: Request) -> JSONResponse: if not (isinstance(keys, dict) and body.get("endpoint") and keys.get("p256dh") and keys.get("auth")): return JSONResponse({"error": "Invalid request"}, status_code=400) - await push.register( + _, created = await push.register( user_uid=user["uid"], endpoint=body["endpoint"], key_auth=keys["auth"], key_p256dh=keys["p256dh"], ) - try: - await push.notify_user(user["uid"], WELCOME_PAYLOAD) - except Exception as exc: - logger.warning("Welcome push failed for %s: %s", user["uid"], exc) + if created: + try: + await push.notify_user(user["uid"], WELCOME_PAYLOAD) + except Exception as exc: + logger.warning("Welcome push failed for %s: %s", user["uid"], exc) return JSONResponse({"registered": True})