Add basic todo behavior
This commit is contained in:
15
src/backend/server/Todo/Todo.Api/Hubs/Models/TodoResponse.cs
Normal file
15
src/backend/server/Todo/Todo.Api/Hubs/Models/TodoResponse.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Todo.Api.Hubs.Models;
|
||||
|
||||
public record TodoResponse
|
||||
{
|
||||
[JsonPropertyName("id")]
|
||||
public string Id { get; init; }
|
||||
|
||||
[JsonPropertyName("title")]
|
||||
public string Title { get; init; }
|
||||
|
||||
[JsonPropertyName("status")]
|
||||
public bool Status { get; init; }
|
||||
}
|
@@ -1,5 +1,6 @@
|
||||
using System.Text.Json;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Todo.Api.Hubs.Models;
|
||||
using Todo.Core.Interfaces.Persistence;
|
||||
|
||||
namespace Todo.Api.Hubs
|
||||
@@ -13,18 +14,40 @@ namespace Todo.Api.Hubs
|
||||
_todoRepository = todoRepository;
|
||||
}
|
||||
|
||||
public async Task GetInboxTodos()
|
||||
public async Task CreateTodo(string todoTitle)
|
||||
{
|
||||
await Clients.Caller.SendAsync("InboxTodos", "some data");
|
||||
var _ = await _todoRepository.CreateTodoAsync(todoTitle);
|
||||
|
||||
var todos = await _todoRepository.GetTodosAsync();
|
||||
var serializedTodos =
|
||||
JsonSerializer.Serialize(todos
|
||||
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title })
|
||||
.ToList());
|
||||
|
||||
await Clients.Caller.SendAsync("todos", serializedTodos);
|
||||
}
|
||||
|
||||
public async Task UpdateTodo(string todoId, bool todoStatus)
|
||||
{
|
||||
await _todoRepository.UpdateTodoStatus(todoId, todoStatus);
|
||||
|
||||
var todos = await _todoRepository.GetTodosAsync();
|
||||
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);
|
||||
}
|
||||
|
||||
public async Task CreateTodo(string createTodoRequest)
|
||||
public async Task GetTodos()
|
||||
{
|
||||
var todo = JsonSerializer.Deserialize<Core.Entities.Todo>(createTodoRequest);
|
||||
if (todo is null)
|
||||
throw new InvalidOperationException("Failed to create todo because of invalid request");
|
||||
var todos = await _todoRepository.GetTodosAsync();
|
||||
var serializedTodos = JsonSerializer.Serialize(todos
|
||||
.Select(t => new TodoResponse { Id = t.Id, Title = t.Title, Status = t.Status})
|
||||
.ToList());
|
||||
|
||||
await _todoRepository.CreateTodoAsync(todo.Title);
|
||||
await Clients.Caller.SendAsync("todos", serializedTodos);
|
||||
}
|
||||
}
|
||||
}
|
@@ -14,7 +14,7 @@
|
||||
"dotnetRunMessages": "true",
|
||||
"launchBrowser": false,
|
||||
"launchUrl": "swagger",
|
||||
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
||||
"applicationUrl": "http://localhost:5000",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
|
@@ -53,8 +53,6 @@ namespace Todo.Api
|
||||
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Todo.Api v1"));
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseRouting();
|
||||
app.UseCors();
|
||||
|
||||
|
@@ -4,4 +4,5 @@ public record Todo
|
||||
{
|
||||
public string Id { get; init; }
|
||||
public string Title { get; init; }
|
||||
public bool Status { get; init; }
|
||||
}
|
@@ -4,4 +4,5 @@ public interface ITodoRepository
|
||||
{
|
||||
Task<Entities.Todo> CreateTodoAsync(string title);
|
||||
Task<IEnumerable<Entities.Todo>> GetTodosAsync();
|
||||
Task UpdateTodoStatus(string todoId, bool todoStatus);
|
||||
}
|
@@ -10,4 +10,5 @@ public record MongoTodo
|
||||
public string Id { get; init; }
|
||||
|
||||
[BsonRequired] public string Title { get; init; }
|
||||
[BsonRequired] public bool Status { get; set; }
|
||||
}
|
@@ -29,6 +29,13 @@ public class TodoRepository : ITodoRepository
|
||||
return todos
|
||||
.ToEnumerable()
|
||||
.Select(t =>
|
||||
new Core.Entities.Todo() { Id = t.Id, Title = t.Title });
|
||||
new Core.Entities.Todo() { Id = t.Id, Title = t.Title, Status = t.Status});
|
||||
}
|
||||
|
||||
public async Task UpdateTodoStatus(string todoId, bool todoStatus)
|
||||
{
|
||||
await _todosCollection
|
||||
.UpdateOneAsync(t => t.Id == todoId,
|
||||
Builders<MongoTodo>.Update.Set(t => t.Status, todoStatus));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user