-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
Copy pathTodoController.cs
109 lines (87 loc) · 2.8 KB
/
TodoController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using Microsoft.AspNetCore.Mvc;
using OrchardCore.Demo.Models;
using OrchardCore.Demo.ViewModels;
using YesSql;
namespace OrchardCore.Demo.Controllers;
public sealed class TodoController : Controller
{
private readonly ISession _session;
private readonly Entities.IIdGenerator _idGenerator;
public TodoController(ISession session, Entities.IIdGenerator idGenerator)
{
_session = session;
_idGenerator = idGenerator;
}
public async Task<IActionResult> Index()
{
var list = (await _session.Query<TodoModel>().ListAsync())
.Select(m => new TodoViewModel()
{
TodoId = m.TodoId,
Text = m.Text,
DueDate = m.DueDate,
IsCompleted = m.IsCompleted,
})
.ToList();
return View(list);
}
public IActionResult Create()
{
var viewModel = new TodoViewModel
{
TodoId = _idGenerator.GenerateUniqueId(),
DisplayMode = "Edit",
};
return View(nameof(Edit), viewModel);
}
public async Task<IActionResult> Edit(string todoId)
{
var model = (await _session.Query<TodoModel>().ListAsync())
.FirstOrDefault(m => m.TodoId == todoId);
if (model == null)
{
return NotFound();
}
var viewModel = new TodoViewModel()
{
TodoId = model.TodoId,
Text = model.Text,
DueDate = model.DueDate,
IsCompleted = model.IsCompleted,
DisplayMode = "Edit",
};
return View(viewModel);
}
[HttpPost]
public async Task<IActionResult> Update(TodoViewModel viewModel, string returnUrl = "")
{
if (ModelState.IsValid)
{
var model = (await _session.Query<TodoModel>().ListAsync())
.FirstOrDefault(m => m.TodoId == viewModel.TodoId);
model ??= new TodoModel() { TodoId = viewModel.TodoId };
model.Text = viewModel.Text;
model.DueDate = viewModel.DueDate;
model.IsCompleted = viewModel.IsCompleted;
await _session.SaveAsync(model);
if (Url.IsLocalUrl(returnUrl))
{
return this.Redirect(returnUrl, true);
}
return RedirectToAction(nameof(Index), "Todo");
}
viewModel.DisplayMode = "Edit";
return View(nameof(Edit), viewModel);
}
public async Task<IActionResult> Delete(string todoId)
{
var model = (await _session.Query<TodoModel>().ListAsync())
.FirstOrDefault(m => m.TodoId == todoId);
if (model == null)
{
return NotFound();
}
_session.Delete(model);
return RedirectToAction(nameof(Index), "Todo");
}
}