using System.Net.Http.Json; using Tasks.Module.Models; namespace Tasks.Module.Services; public interface IViewService { Task> GetAllViewsAsync(); Task GetViewByIdAsync(string id); Task CreateViewAsync(CreateTaskViewDto createDto); Task UpdateViewAsync(UpdateTaskViewDto updateDto); Task DeleteViewAsync(string id); Task> GetTasksByViewAsync(string viewId); Task CreateTodoWithViewCriteriaAsync(string viewId, CreateTodoItemDto createDto); } public class ViewService : IViewService { private readonly HttpClient _httpClient; public ViewService(HttpClient httpClient) { _httpClient = httpClient; } public async Task> GetAllViewsAsync() { var response = await _httpClient.GetFromJsonAsync>("/api/v1/views"); return response ?? new List(); } public async Task GetViewByIdAsync(string id) { return await _httpClient.GetFromJsonAsync($"/api/v1/views/{id}"); } public async Task CreateViewAsync(CreateTaskViewDto createDto) { var response = await _httpClient.PostAsJsonAsync("/api/v1/views", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create view"); } public async Task UpdateViewAsync(UpdateTaskViewDto updateDto) { var response = await _httpClient.PutAsJsonAsync("/api/v1/views", updateDto); if (!response.IsSuccessStatusCode) return null; return await response.Content.ReadFromJsonAsync(); } public async Task DeleteViewAsync(string id) { var response = await _httpClient.DeleteAsync($"/api/v1/views/{id}"); return response.IsSuccessStatusCode; } public async Task> GetTasksByViewAsync(string viewId) { var response = await _httpClient.GetFromJsonAsync>($"/api/v1/views/{viewId}/tasks"); return response ?? new List(); } public async Task CreateTodoWithViewCriteriaAsync(string viewId, CreateTodoItemDto createDto) { var response = await _httpClient.PostAsJsonAsync($"/api/v1/views/{viewId}/tasks", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create task"); } }