- rebrand from 습관 트래커 to 해빗랩 across templates, manifest, service worker - add HTTPS redirect middleware for reverse-proxied deployments - add public landing page (/) and privacy policy page with real data handling disclosures - add in-app account deletion (Apple review requirement) - add Android TWA Digital Asset Links support (/.well-known/assetlinks.json) - add SFTP deployment script for the Synology-hosted server Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends, Request
|
|
from pydantic import BaseModel
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.config import settings
|
|
from app.database import get_db
|
|
from app.models.user import User
|
|
from app.schemas.push import PushSubscribeRequest
|
|
from app.security import require_login
|
|
from app.services import push_service
|
|
|
|
router = APIRouter(prefix="/api/push", tags=["push"], dependencies=[Depends(require_login)])
|
|
|
|
|
|
class UnsubscribeRequest(BaseModel):
|
|
endpoint: str
|
|
|
|
|
|
@router.get("/vapid-public-key")
|
|
def get_vapid_public_key():
|
|
return {"publicKey": settings.vapid_public_key}
|
|
|
|
|
|
@router.post("/subscribe")
|
|
def subscribe(
|
|
data: PushSubscribeRequest,
|
|
request: Request,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(require_login),
|
|
):
|
|
push_service.save_subscription(db, current_user.id, data, user_agent=request.headers.get("user-agent"))
|
|
return {"ok": True}
|
|
|
|
|
|
@router.post("/unsubscribe")
|
|
def unsubscribe(
|
|
data: UnsubscribeRequest, db: Session = Depends(get_db), current_user: User = Depends(require_login)
|
|
):
|
|
push_service.delete_subscription(db, data.endpoint)
|
|
return {"ok": True}
|
|
|
|
|
|
@router.post("/test")
|
|
def send_test(db: Session = Depends(get_db), current_user: User = Depends(require_login)):
|
|
sent = push_service.send_to_user(db, current_user.id, title="해빗랩", body="테스트 알림입니다.")
|
|
return {"sent": sent}
|