using System.Net.Http.Json; using Microsoft.Extensions.Configuration; using Tasks.Module.Models; namespace Tasks.Module.Services; public interface IFolderService { Task> GetAllRootFoldersAsync(); Task GetFolderByIdAsync(string id); Task CreateFolderAsync(CreateFolderDto createDto); Task UpdateFolderAsync(UpdateFolderDto updateDto); Task DeleteFolderAsync(string id); Task MoveFolderAsync(string id, string? parentId); Task> GetFilesInFolderAsync(string folderId); Task CreateFileReferenceAsync(CreateFileReferenceDto createDto); Task DeleteFileReferenceAsync(string id); Task> GetTasksSheetsInFolderAsync(string folderId); Task> GetRootTasksSheetsAsync(); Task GetTasksSheetByIdAsync(string id); Task CreateTasksSheetAsync(CreateTasksSheetDto createDto); Task MoveTasksSheetAsync(string id, string? parentFolderId); Task AddTaskToTasksSheetAsync(string tasksSheetId, CreateTodoItemDto createDto); Task ToggleTaskInTasksSheetAsync(string taskId); Task DeleteTaskInTasksSheetAsync(string taskId); } public class FolderService : IFolderService { private readonly HttpClient _httpClient; public FolderService(HttpClient httpClient, IConfiguration configuration) { _httpClient = httpClient; } public async Task> GetAllRootFoldersAsync() { try { var response = await _httpClient.GetFromJsonAsync>("/api/v1/folders"); return response ?? new List(); } catch (Exception ex) { Console.WriteLine($"[FolderService] Error getting folders: {ex.Message}"); throw; } } public async Task GetFolderByIdAsync(string id) { return await _httpClient.GetFromJsonAsync($"/api/v1/folders/{id}"); } public async Task CreateFolderAsync(CreateFolderDto createDto) { var response = await _httpClient.PostAsJsonAsync("/api/v1/folders", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create folder"); } public async Task UpdateFolderAsync(UpdateFolderDto updateDto) { var response = await _httpClient.PutAsJsonAsync("/api/v1/folders", updateDto); if (!response.IsSuccessStatusCode) return null; return await response.Content.ReadFromJsonAsync(); } public async Task DeleteFolderAsync(string id) { var response = await _httpClient.DeleteAsync($"/api/v1/folders/{id}"); return response.IsSuccessStatusCode; } public async Task MoveFolderAsync(string id, string? parentId) { var response = await _httpClient.PatchAsJsonAsync($"/api/v1/folders/{id}/parent", new { ParentId = parentId }); return response.IsSuccessStatusCode; } public async Task> GetFilesInFolderAsync(string folderId) { var response = await _httpClient.GetFromJsonAsync>($"/api/v1/files?folderId={folderId}"); return response ?? new List(); } public async Task CreateFileReferenceAsync(CreateFileReferenceDto createDto) { var response = await _httpClient.PostAsJsonAsync("/api/v1/files", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create file"); } public async Task DeleteFileReferenceAsync(string id) { var response = await _httpClient.DeleteAsync($"/api/v1/files/{id}"); return response.IsSuccessStatusCode; } public async Task> GetTasksSheetsInFolderAsync(string folderId) { var response = await _httpClient.GetFromJsonAsync>($"/api/v1/taskssheets?folderId={folderId}"); return response ?? new List(); } public async Task> GetRootTasksSheetsAsync() { var response = await _httpClient.GetFromJsonAsync>("/api/v1/taskssheets/root"); return response ?? new List(); } public async Task GetTasksSheetByIdAsync(string id) { return await _httpClient.GetFromJsonAsync($"/api/v1/taskssheets/{id}"); } public async Task CreateTasksSheetAsync(CreateTasksSheetDto createDto) { var response = await _httpClient.PostAsJsonAsync("/api/v1/taskssheets", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create tasks sheet"); } public async Task MoveTasksSheetAsync(string id, string? parentFolderId) { var response = await _httpClient.PatchAsJsonAsync($"/api/v1/taskssheets/{id}/parent", new { ParentFolderId = parentFolderId }); return response.IsSuccessStatusCode; } public async Task AddTaskToTasksSheetAsync(string tasksSheetId, CreateTodoItemDto createDto) { var response = await _httpClient.PostAsJsonAsync($"/api/v1/taskssheets/{tasksSheetId}/tasks", createDto); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync() ?? throw new Exception("Failed to create task"); } public async Task ToggleTaskInTasksSheetAsync(string taskId) { var response = await _httpClient.PatchAsync($"/api/v1/taskssheets/tasks/{taskId}/toggle", null); return response.IsSuccessStatusCode; } public async Task DeleteTaskInTasksSheetAsync(string taskId) { var response = await _httpClient.DeleteAsync($"/api/v1/taskssheets/tasks/{taskId}"); return response.IsSuccessStatusCode; } }