153 lines
6.1 KiB
C#
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;
|
|
}
|
|
}
|