Refined the design a bit

This commit is contained in:
2021-11-14 01:50:18 +01:00
parent 62630d63f2
commit ce3d351769
18 changed files with 315 additions and 97 deletions

View File

@@ -16,20 +16,16 @@ public class TodosController : ControllerBase
}
[HttpPost]
public async Task<ActionResult<Core.Entities.Todo>> CreateTodo([FromBody] CreateTodoRequest request)
{
var todo = await _todoRepository.CreateTodoAsync(request.Title);
return Ok(todo);
}
public async Task<ActionResult<Core.Entities.Todo>> CreateTodo([FromBody] CreateTodoRequest request) =>
Ok(await _todoRepository.CreateTodoAsync(request.Title));
[HttpGet]
public async Task<ActionResult<IEnumerable<Core.Entities.Todo>>> GetTodos()
{
var todos = await _todoRepository.GetTodosAsync();
public async Task<ActionResult<IEnumerable<Core.Entities.Todo>>> GetTodos() =>
Ok(await _todoRepository.GetTodosAsync());
return Ok(todos);
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Core.Entities.Todo>>> GetNotDoneTodos() =>
Ok(await _todoRepository.GetNotDoneTodos());
public record CreateTodoRequest
{

View File

@@ -18,36 +18,47 @@ namespace Todo.Api.Hubs
{
var _ = await _todoRepository.CreateTodoAsync(todoTitle);
var todos = await _todoRepository.GetTodosAsync();
var todos = await _todoRepository.GetNotDoneTodos();
var serializedTodos =
JsonSerializer.Serialize(todos
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title })
.ToList());
await Clients.Caller.SendAsync("todos", serializedTodos);
await Clients.Caller.SendAsync("getInboxTodos", serializedTodos);
}
public async Task UpdateTodo(string todoId, bool todoStatus)
{
await _todoRepository.UpdateTodoStatus(todoId, todoStatus);
var todos = await _todoRepository.GetTodosAsync();
var todos = await _todoRepository.GetNotDoneTodos();
var serializedTodos =
JsonSerializer.Serialize(todos
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title, Status = t.Status })
.ToList());
await Clients.Caller.SendAsync("todos", serializedTodos);
await Clients.Caller.SendAsync("getInboxTodos", serializedTodos);
}
public async Task GetTodos()
{
var todos = await _todoRepository.GetTodosAsync();
var serializedTodos = JsonSerializer.Serialize(todos
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title, Status = t.Status})
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title, Status = t.Status })
.ToList());
await Clients.Caller.SendAsync("todos", serializedTodos);
}
public async Task GetInboxTodos()
{
var todos = await _todoRepository.GetNotDoneTodos();
var serializedTodos = JsonSerializer.Serialize(todos
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title, Status = t.Status })
.ToList());
await Clients.Caller.SendAsync("getInboxTodos", serializedTodos);
}
}
}

View File

@@ -5,4 +5,5 @@ public interface ITodoRepository
Task<Entities.Todo> CreateTodoAsync(string title);
Task<IEnumerable<Entities.Todo>> GetTodosAsync();
Task UpdateTodoStatus(string todoId, bool todoStatus);
Task<IEnumerable<Entities.Todo>> GetNotDoneTodos();
}

View File

@@ -20,7 +20,7 @@ public class TodoRepository : ITodoRepository
{
var todo = new MongoTodo() { Title = title };
await _todosCollection.InsertOneAsync(todo);
return new Core.Entities.Todo() { Id = todo.Id, Title = todo.Title };
return new Core.Entities.Todo() { Id = todo.Id, Title = todo.Title, Status = false};
}
public async Task<IEnumerable<Core.Entities.Todo>> GetTodosAsync()
@@ -38,4 +38,10 @@ public class TodoRepository : ITodoRepository
.UpdateOneAsync(t => t.Id == todoId,
Builders<MongoTodo>.Update.Set(t => t.Status, todoStatus));
}
public async Task<IEnumerable<Core.Entities.Todo>> GetNotDoneTodos()
{
var todos = await GetTodosAsync();
return todos.Where(t => t.Status == false);
}
}