#!/usr/bin/env python """ Скрипт для демонстрации преобразования данных мобильного формата в формат сервера. Показывает, как преобразовывать данные и какие поля ожидает сервер. """ import json import requests from datetime import date, datetime # Пример данных из мобильного приложения MOBILE_DATA_EXAMPLES = [ { "date": "2025-09-26", "type": "MENSTRUATION", "flow_intensity": 3, "symptoms": ["CRAMPS", "HEADACHE"], "mood": "NORMAL", "notes": "Пример записи о менструации" }, { "date": "2025-09-30", "type": "OVULATION", "symptoms": ["BREAST_TENDERNESS"], "mood": "HAPPY", "notes": "Пример записи об овуляции" }, { "date": "2025-10-05", "type": "SPOTTING", "flow_intensity": 1, "symptoms": ["BLOATING"], "mood": "STRESSED", "notes": "Пример записи о выделениях" } ] def test_format_conversion(mobile_data): """Тестирование преобразования формата данных""" url = "http://localhost:8004/debug/mobile-entry" headers = { "Content-Type": "application/json" } print(f"\nТестирование преобразования данных: {json.dumps(mobile_data, ensure_ascii=False)}") try: response = requests.post(url, json=mobile_data, headers=headers) if response.status_code == 200: result = response.json() print("✅ Успешное преобразование данных") print("\nОригинальные данные (мобильный формат):") print(json.dumps(result["original_data"], ensure_ascii=False, indent=2)) print("\nПреобразованные данные (формат сервера):") print(json.dumps(result["transformed_data"], ensure_ascii=False, indent=2)) print("\nАнализ преобразования:") print(f"- Дата: {mobile_data['date']} -> {result['transformed_data']['entry_date']}") print(f"- Тип: {mobile_data['type']} -> {result['transformed_data']['entry_type']}") if mobile_data.get('flow_intensity'): print(f"- Интенсивность: {mobile_data['flow_intensity']} -> {result['transformed_data']['flow_intensity']}") if mobile_data.get('symptoms'): print(f"- Симптомы: {', '.join(mobile_data['symptoms'])} -> {result['transformed_data']['symptoms']}") if mobile_data.get('mood'): print(f"- Настроение: {mobile_data['mood']} -> {result['transformed_data']['mood'] or 'Не задано'}") return result else: print(f"❌ Ошибка: {response.status_code}") print(response.text) return None except Exception as e: print(f"❌ Исключение: {str(e)}") return None def generate_documentation(): """Генерация документации по формату данных""" print("\n=== ДОКУМЕНТАЦИЯ ПО ФОРМАТУ ДАННЫХ ===\n") print("Мобильный формат данных должен соответствовать следующей схеме:") schema = { "date": "string (формат YYYY-MM-DD, например '2025-09-26')", "type": "string (один из: MENSTRUATION, OVULATION, SPOTTING, DISCHARGE, PAIN, MOOD)", "flow_intensity": "integer (опционально, значения от 1 до 5)", "symptoms": "массив строк (опционально, например ['CRAMPS', 'HEADACHE'])", "mood": "string (опционально, одно из: HAPPY, SAD, NORMAL, STRESSED, ANXIOUS, IRRITATED)", "notes": "string (опционально, текстовые заметки)" } print(json.dumps(schema, ensure_ascii=False, indent=2)) print("\nМаппинг между форматами:") mapping = { "Типы записей": { "MENSTRUATION": "period", "OVULATION": "ovulation", "SPOTTING": "symptoms", "DISCHARGE": "symptoms", "PAIN": "symptoms", "MOOD": "mood" }, "Интенсивность выделений": { "1": "light", "2": "light", "3": "medium", "4-5": "heavy" }, "Настроение": { "HAPPY": "happy", "SAD": "sad", "NORMAL": "happy", # Маппится на happy "STRESSED": "anxious", "ANXIOUS": "anxious", "IRRITATED": "irritated" }, "Симптомы": "Преобразуются из массива строк в строку с разделителями-запятыми" } print(json.dumps(mapping, ensure_ascii=False, indent=2)) if __name__ == "__main__": print("=== ТЕСТИРОВАНИЕ ПРЕОБРАЗОВАНИЯ ДАННЫХ МОБИЛЬНОГО ФОРМАТА ===\n") for i, example in enumerate(MOBILE_DATA_EXAMPLES): print(f"\n--- Пример #{i+1} ---") test_format_conversion(example) generate_documentation() print("\n=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===")