"""Скрипт для генерации тестовых данных.""" import argparse import asyncio import json import random from datetime import date, timedelta from uuid import uuid4 from models.schedule import Schedule, Task def generate_tasks(count: int = 5) -> list[Task]: """Генерировать тестовые задания.""" task_templates = [ {"title": "Утренняя зарядка", "category": "утренняя_рутина", "duration": 15}, {"title": "Чистка зубов", "category": "утренняя_рутина", "duration": 5}, {"title": "Завтрак", "category": "утренняя_рутина", "duration": 20}, {"title": "Рисование", "category": "обучение", "duration": 30}, {"title": "Чтение книги", "category": "обучение", "duration": 20}, {"title": "Игра с конструктором", "category": "игра", "duration": 45}, {"title": "Прогулка", "category": "игра", "duration": 60}, {"title": "Обед", "category": "отдых", "duration": 30}, {"title": "Тихий час", "category": "отдых", "duration": 60}, {"title": "Ужин", "category": "вечерняя_рутина", "duration": 30}, {"title": "Подготовка ко сну", "category": "вечерняя_рутина", "duration": 20}, ] selected = random.sample(task_templates, min(count, len(task_templates))) tasks = [] for i, template in enumerate(selected): tasks.append( Task( id=uuid4(), title=template["title"], description=f"Описание для {template['title']}", duration_minutes=template["duration"], category=template["category"], completed=random.choice([True, False]), order=i, ) ) return tasks def generate_schedules(user_id: str, count: int, start_date: date = None) -> list[Schedule]: """Генерировать тестовые расписания.""" if start_date is None: start_date = date.today() schedules = [] for i in range(count): schedule_date = start_date + timedelta(days=i) tasks = generate_tasks(random.randint(4, 8)) schedules.append( Schedule( id=uuid4(), title=f"Расписание на {schedule_date.strftime('%d.%m.%Y')}", date=schedule_date, tasks=tasks, user_id=user_id, created_at=schedule_date.isoformat(), ) ) return schedules async def main(): """Главная функция.""" parser = argparse.ArgumentParser(description="Генерация тестовых данных") parser.add_argument("--users", type=int, default=10, help="Количество пользователей") parser.add_argument("--schedules", type=int, default=50, help="Количество расписаний") parser.add_argument("--output", type=str, default="test_data.json", help="Файл для сохранения") args = parser.parse_args() print(f"Генерация тестовых данных:") print(f" Пользователей: {args.users}") print(f" Расписаний: {args.schedules}") data = { "users": [], "schedules": [], } # Генерируем пользователей for _ in range(args.users): user_id = str(uuid4()) data["users"].append( { "id": user_id, "email": f"user_{random.randint(1000, 9999)}@example.com", } ) # Генерируем расписания для пользователя schedules_per_user = args.schedules // args.users user_schedules = generate_schedules(user_id, schedules_per_user) data["schedules"].extend([s.model_dump() for s in user_schedules]) # Сохраняем в файл with open(args.output, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2, default=str) print(f"\nДанные сохранены в {args.output}") print(f" Пользователей: {len(data['users'])}") print(f" Расписаний: {len(data['schedules'])}") if __name__ == "__main__": asyncio.run(main())