27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
"""방문자 집계 — 페이지 접속 기록(일별 순수 방문자)."""
|
|
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) # 재방문 → 무시
|