Files
chat/tests/simplified_calendar_service_improved.py
Andrew K. Choi 64171196b6
All checks were successful
continuous-integration/drone/push Build is passing
calendar features
2025-09-26 14:45:00 +09:00

157 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import logging
from typing import Dict, List, Optional
from fastapi import FastAPI, Depends, HTTPException, Body, Path
from fastapi.middleware.cors import CORSMiddleware
# Настраиваем логирование
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# Имитируем эндпоинты календарного сервиса для тестирования
app = FastAPI(title="Simplified Calendar Service")
# Включаем CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Упрощенная модель данных
from enum import Enum
from datetime import date, datetime
from typing import List, Optional
from pydantic import BaseModel, Field
# Модели для календарных записей
class EntryType(str, Enum):
PERIOD = "period"
OVULATION = "ovulation"
SYMPTOMS = "symptoms"
MOOD = "mood"
OTHER = "other"
class FlowIntensity(str, Enum):
LIGHT = "light"
MEDIUM = "medium"
HEAVY = "heavy"
class CalendarEntry(BaseModel):
id: int
user_id: int = 1
entry_date: date
entry_type: str
flow_intensity: Optional[str] = None
period_symptoms: Optional[str] = None
mood: Optional[str] = None
energy_level: Optional[int] = None
sleep_hours: Optional[float] = None
symptoms: Optional[str] = None
medications: Optional[str] = None
notes: Optional[str] = None
created_at: datetime = datetime.now()
updated_at: Optional[datetime] = None
# Хранилище данных в памяти
calendar_entries = []
# Вспомогательная функция для добавления тестовых данных
def add_test_entries():
if not calendar_entries:
for i in range(1, 5):
calendar_entries.append(
CalendarEntry(
id=i,
entry_date=date(2025, 9, 30),
entry_type="period",
flow_intensity="medium",
notes=f"Test entry {i}",
)
)
# Добавляем тестовые данные
add_test_entries()
@app.get("/")
def read_root():
return {"message": "Simplified Calendar Service API"}
@app.get("/health")
def health():
return {"status": "ok"}
# API для работы с календарем
@app.get("/api/v1/calendar/entries")
def get_calendar_entries():
"""Get all calendar entries"""
return calendar_entries
@app.post("/api/v1/calendar/entries", status_code=201)
def create_calendar_entry(entry: dict):
"""Create a new calendar entry"""
logger.debug(f"Received entry data: {entry}")
# Преобразуем строку даты в объект date
entry_date_str = entry.get("entry_date")
if entry_date_str and isinstance(entry_date_str, str):
try:
entry_date = date.fromisoformat(entry_date_str)
except ValueError:
entry_date = date.today()
else:
entry_date = date.today()
new_entry = CalendarEntry(
id=len(calendar_entries) + 1,
entry_date=entry_date,
entry_type=entry.get("entry_type", "other"),
flow_intensity=entry.get("flow_intensity"),
period_symptoms=entry.get("period_symptoms"),
mood=entry.get("mood"),
energy_level=entry.get("energy_level"),
sleep_hours=entry.get("sleep_hours"),
symptoms=entry.get("symptoms"),
medications=entry.get("medications"),
notes=entry.get("notes"),
)
calendar_entries.append(new_entry)
return new_entry
# Добавляем поддержку для /api/v1/entry
@app.post("/api/v1/entry", status_code=201)
def create_entry_without_calendar_prefix(entry: dict):
"""Create a new calendar entry via alternate endpoint (without /calendar/ prefix)"""
logger.debug(f"Received entry data via /api/v1/entry: {entry}")
return create_calendar_entry(entry)
# Добавляем поддержку для /api/v1/entries (legacy)
@app.post("/api/v1/entries", status_code=201)
def create_entry_legacy(entry: dict):
"""Create a new calendar entry via legacy endpoint"""
logger.debug(f"Received entry data via legacy endpoint: {entry}")
return create_calendar_entry(entry)
# Добавляем поддержку для мобильного формата
@app.post("/api/v1/calendar/entry", status_code=201)
def create_mobile_calendar_entry(mobile_entry: dict):
"""Create a new calendar entry from mobile app format"""
logger.debug(f"Received mobile entry data: {mobile_entry}")
# Преобразуем мобильный формат в стандартный
entry = {
"entry_date": mobile_entry.get("date", date.today().isoformat()),
"entry_type": mobile_entry.get("type", "OTHER").lower(),
"flow_intensity": "medium" if mobile_entry.get("flow_intensity") in [3, 4] else "light",
"notes": mobile_entry.get("notes"),
"symptoms": ", ".join(mobile_entry.get("symptoms", [])) if isinstance(mobile_entry.get("symptoms"), list) else ""
}
return create_calendar_entry(entry)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8888)