/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab3/Client/Examples/Program.cs
220 строк
10 KB
ivanstrike
Lab3
13 дек 2025, 11:15
13 дек 2025, 11:15
15c0fa5
Код
Авторство
О чём код?
using TaskApiClient; using TaskApiClient.Models; using TaskStatus = TaskApiClient.Models.TaskStatus; namespace TaskApiClient.Examples; /// <summary> /// Примеры использования Task API Client /// </summary> public class Program { public static async Task Main(string[] args) { // Инициализация клиента using var client = new TaskApiClient("http://localhost:8000"); Console.WriteLine("=== Task API Client - Примеры использования ===\n"); try { // 1. Регистрация пользователя Console.WriteLine("1. Регистрация пользователя..."); var email = $"test_{Guid.NewGuid():N}@example.com"; var password = "secure_password123"; var registerResponse = await client.RegisterAsync( new UserCreate(email, password) ); if (registerResponse.IsSuccess) { Console.WriteLine($"✓ Пользователь зарегистрирован: {registerResponse.Data!.Email}"); Console.WriteLine($" ID: {registerResponse.Data.Id}, Создан: {registerResponse.Data.CreatedAt}"); } else { Console.WriteLine($"✗ Ошибка регистрации: {registerResponse.ErrorMessage}"); } // 2. Вход в систему Console.WriteLine("\n2. Вход в систему..."); var loginResponse = await client.LoginAsync(email, password); if (loginResponse.IsSuccess) { Console.WriteLine($"✓ Успешный вход!"); Console.WriteLine($" Token: {loginResponse.Data!.AccessToken[..20]}..."); Console.WriteLine($" Type: {loginResponse.Data.TokenType}"); } else { Console.WriteLine($"✗ Ошибка входа: {loginResponse.ErrorMessage}"); return; } // 3. Создание проекта с идемпотентностью Console.WriteLine("\n3. Создание проекта с идемпотентностью..."); var idempotencyKey = Guid.NewGuid().ToString(); var projectCreate = new ProjectCreate( "Мой тестовый проект", "Описание проекта для тестирования API" ); var projectResponse = await client.CreateProjectAsync(projectCreate, idempotencyKey); if (projectResponse.IsSuccess && projectResponse.Data != null) { Console.WriteLine($"✓ Проект создан: {projectResponse.Data.Name}"); Console.WriteLine($" ID: {projectResponse.Data.Id}"); Console.WriteLine($" Rate Limit: {client.RateLimit.Remaining} запросов осталось"); } else { Console.WriteLine($"✗ Ошибка создания проекта: {projectResponse.ErrorMessage}"); return; } // Повторный запрос с тем же ключом - должен вернуть тот же проект Console.WriteLine("\n4. Проверка идемпотентности (повторный запрос)..."); var projectResponse2 = await client.CreateProjectAsync(projectCreate, idempotencyKey); if (projectResponse2.IsSuccess) { Console.WriteLine($"✓ Получен тот же проект (идемпотентность работает)"); Console.WriteLine($" ID: {projectResponse2.Data!.Id} (должен совпадать с предыдущим)"); } var projectId = projectResponse.Data.Id; // 5. Получение списка проектов Console.WriteLine("\n5. Получение списка проектов..."); var projectsResponse = await client.GetProjectsAsync(); if (projectsResponse.IsSuccess) { Console.WriteLine($"✓ Найдено проектов: {projectsResponse.Data!.Count}"); foreach (var project in projectsResponse.Data) { Console.WriteLine($" - [{project.Id}] {project.Name}"); } } // 6. Создание задачи (V1) Console.WriteLine("\n6. Создание задачи (API V1)..."); var taskV1 = new TaskCreateV1( "Первая задача", projectId, Description: "Описание первой задачи", Status: TaskStatus.Todo, DueDate: DateTime.UtcNow.AddDays(7) ); var taskV1Response = await client.CreateTaskV1Async( taskV1, Guid.NewGuid().ToString() ); if (taskV1Response.IsSuccess) { Console.WriteLine($"✓ Задача V1 создана: {taskV1Response.Data!.Title}"); Console.WriteLine($" ID: {taskV1Response.Data.Id}, Статус: {taskV1Response.Data.Status}"); } // 7. Создание задачи с приоритетом (V2) Console.WriteLine("\n7. Создание задачи с приоритетом (API V2)..."); var taskV2 = new TaskCreateV2( "Важная задача", projectId, Description: "Срочная задача с высоким приоритетом", Status: TaskStatus.InProgress, Priority: TaskPriority.High, DueDate: DateTime.UtcNow.AddDays(3) ); var taskV2Response = await client.CreateTaskV2Async( taskV2, Guid.NewGuid().ToString() ); if (taskV2Response.IsSuccess) { Console.WriteLine($"✓ Задача V2 создана: {taskV2Response.Data!.Title}"); Console.WriteLine($" ID: {taskV2Response.Data.Id}"); Console.WriteLine($" Приоритет: {taskV2Response.Data.Priority}"); Console.WriteLine($" Статус: {taskV2Response.Data.Status}"); } // 8. Получение задач с фильтром по приоритету (V2) Console.WriteLine("\n8. Получение задач с высоким приоритетом (V2)..."); var tasksV2Response = await client.GetTasksV2Async( projectId: projectId, priority: TaskPriority.High ); if (tasksV2Response.IsSuccess) { Console.WriteLine($"✓ Найдено задач с высоким приоритетом: {tasksV2Response.Data!.Count}"); foreach (var task in tasksV2Response.Data) { Console.WriteLine($" - [{task.Id}] {task.Title} (Priority: {task.Priority})"); } } // 9. Обновление проекта Console.WriteLine("\n9. Обновление проекта..."); var projectUpdate = new ProjectUpdate( Name: "Обновленное название проекта", Description: "Обновленное описание" ); var updateResponse = await client.UpdateProjectAsync(projectId, projectUpdate); if (updateResponse.IsSuccess) { Console.WriteLine($"✓ Проект обновлен: {updateResponse.Data!.Name}"); } // 10. Получение всех задач проекта (V1) Console.WriteLine("\n10. Получение всех задач проекта..."); var allTasksResponse = await client.GetTasksV1Async(projectId); if (allTasksResponse.IsSuccess) { Console.WriteLine($"✓ Всего задач в проекте: {allTasksResponse.Data!.Count}"); } // 11. Демонстрация обработки ошибок Console.WriteLine("\n11. Демонстрация обработки ошибок..."); var errorResponse = await client.GetProjectAsync(99999); if (!errorResponse.IsSuccess) { Console.WriteLine($"✓ Ошибка корректно обработана:"); Console.WriteLine($" Код: {errorResponse.StatusCode}"); Console.WriteLine($" Сообщение: {errorResponse.ErrorMessage}"); } // 12. Информация о rate limiting Console.WriteLine("\n12. Информация о Rate Limiting:"); Console.WriteLine($" Осталось запросов: {client.RateLimit.Remaining}"); Console.WriteLine($" Retry-After: {client.RateLimit.RetryAfter} сек"); // 13. Удаление проекта Console.WriteLine("\n13. Удаление проекта..."); var deleteResponse = await client.DeleteProjectAsync(projectId); if (deleteResponse.IsSuccess) { Console.WriteLine($"✓ Проект успешно удален (Status: {deleteResponse.StatusCode})"); } Console.WriteLine("\n=== Все примеры успешно выполнены! ==="); } catch (Exception ex) { Console.WriteLine($"\n✗ Произошла ошибка: {ex.Message}"); Console.WriteLine(ex.StackTrace); } } }