"""방문자 집계 — 페이지 접속 기록(일별 순수 방문자).""" from __future__ import annotations from fastapi import APIRouter, Depends from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import AsyncSession from ..database import get_db from ..domain import KST, now_utc from ..models import PageVisit from ..schemas import VisitIn, VisitOut router = APIRouter(prefix="/api/visit", tags=["visits"]) @router.post("", response_model=VisitOut) async def record_visit(body: VisitIn, db: AsyncSession = Depends(get_db)) -> VisitOut: """페이지 접속 기록. 같은 기기가 같은 날(KST) 재접속하면 집계하지 않는다.""" today = now_utc().astimezone(KST).date() db.add(PageVisit(visit_date=today, device_id=body.deviceId)) try: await db.commit() return VisitOut(ok=True, counted=True) # 오늘 첫 방문 → 집계 except IntegrityError: await db.rollback() return VisitOut(ok=True, counted=False) # 재방문 → 무시