Files
2026-08-07 02:17:32 +03:00

153 lines
6.1 KiB
C#

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