94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
|
|
from fastapi import APIRouter, Depends, HTTPException
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
from typing import Dict
|
||
|
|
|
||
|
|
from app.core.database import get_db
|
||
|
|
from app.services.message_service import MessageService
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/messages", tags=["messages"])
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/daily", response_model=Dict)
|
||
|
|
async def get_daily_message(
|
||
|
|
user_id: str, # TODO: Pegar do JWT token quando implementar autenticação
|
||
|
|
db: Session = Depends(get_db)
|
||
|
|
):
|
||
|
|
"""
|
||
|
|
Retorna a mensagem motivacional do dia para o usuário.
|
||
|
|
A mensagem é contextual baseada em:
|
||
|
|
- Streaks e conquistas
|
||
|
|
- Inatividade
|
||
|
|
- Lembretes
|
||
|
|
- Progresso
|
||
|
|
- Hora do dia
|
||
|
|
"""
|
||
|
|
try:
|
||
|
|
message_service = MessageService(db)
|
||
|
|
message = message_service.get_message_of_the_day(user_id)
|
||
|
|
|
||
|
|
return {
|
||
|
|
"success": True,
|
||
|
|
"message": message
|
||
|
|
}
|
||
|
|
except Exception as e:
|
||
|
|
raise HTTPException(status_code=500, detail=str(e))
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/click/{message_id}")
|
||
|
|
async def mark_message_clicked(
|
||
|
|
message_id: str,
|
||
|
|
user_id: str,
|
||
|
|
db: Session = Depends(get_db)
|
||
|
|
):
|
||
|
|
"""Marca mensagem como clicada pelo usuário"""
|
||
|
|
from app.models.message import UserMessageLog
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
try:
|
||
|
|
log = db.query(UserMessageLog).filter(
|
||
|
|
UserMessageLog.id == message_id,
|
||
|
|
UserMessageLog.user_id == user_id
|
||
|
|
).first()
|
||
|
|
|
||
|
|
if log:
|
||
|
|
log.was_clicked = True
|
||
|
|
log.clicked_at = datetime.now()
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
return {"success": True, "message": "Click registrado"}
|
||
|
|
else:
|
||
|
|
raise HTTPException(status_code=404, detail="Mensagem não encontrada")
|
||
|
|
except Exception as e:
|
||
|
|
raise HTTPException(status_code=500, detail=str(e))
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/history")
|
||
|
|
async def get_message_history(
|
||
|
|
user_id: str,
|
||
|
|
limit: int = 10,
|
||
|
|
db: Session = Depends(get_db)
|
||
|
|
):
|
||
|
|
"""Retorna histórico de mensagens do usuário"""
|
||
|
|
from app.models.message import UserMessageLog
|
||
|
|
|
||
|
|
try:
|
||
|
|
logs = db.query(UserMessageLog).filter(
|
||
|
|
UserMessageLog.user_id == user_id
|
||
|
|
).order_by(UserMessageLog.shown_at.desc()).limit(limit).all()
|
||
|
|
|
||
|
|
return {
|
||
|
|
"success": True,
|
||
|
|
"messages": [
|
||
|
|
{
|
||
|
|
"id": str(log.id),
|
||
|
|
"message_text": log.message_text,
|
||
|
|
"message_type": log.message_type,
|
||
|
|
"shown_at": log.shown_at.isoformat(),
|
||
|
|
"was_clicked": log.was_clicked
|
||
|
|
}
|
||
|
|
for log in logs
|
||
|
|
]
|
||
|
|
}
|
||
|
|
except Exception as e:
|
||
|
|
raise HTTPException(status_code=500, detail=str(e))
|