-
Notifications
You must be signed in to change notification settings - Fork 6
/
Controllers.MainU.pas
117 lines (98 loc) · 2.68 KB
/
Controllers.MainU.pas
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
110
111
112
113
114
115
116
117
unit Controllers.MainU;
interface
uses
MVCFramework, MVCFramework.Serializer.Commons, System.Generics.Collections,
Entities.TodoU, MVCFramework.HTMX, MVCFramework.Commons;
type
[MVCPath]
TMyController = class(TMVCController)
protected
procedure OnBeforeAction(AContext: TWebContext; const AActionName: string; var AHandled: Boolean); override;
public
[MVCPath]
[MVCHTTPMethod([httpGET])]
function GetAll: String;
[MVCPath('/add')]
[MVCHTTPMethod([httpPOST])]
function CreateTodo(const [MVCFromBody] ToDo: TTodo): String;
[MVCPath('/delete/($id)')]
[MVCHTTPMethod([httpDELETE])]
function DeleteTodo(const id: Integer): String;
[MVCPath('/edit/($id)')]
[MVCHTTPMethod([httpGET])]
function EditTodo(const id: Integer): String;
[MVCPath('/edit/($id)')]
[MVCHTTPMethod([httpPUT])]
function UpdateTodo(const id: Integer; const [MVCFromBody] ToDo: TTodo): String;
[MVCPath('/todos/($id)')]
[MVCHTTPMethod([httpGET])]
function GetTodo(const id: Integer): String;
end;
implementation
uses
System.SysUtils, MVCFramework.Logger, FireDAC.Comp.Client,
System.StrUtils, MVCFramework.ActiveRecord,
FDConnectionConfigU, JsonDataObjects;
function TMyController.CreateTodo(const ToDo: TTodo): String;
begin
ToDo.Insert;
ViewData['todo'] := Todo;
Result := Page(['todo/_item']);
end;
function TMyController.DeleteTodo(const id: Integer): String;
begin
var lTodo := TMVCActiveRecord.GetByPK<TTodo>(id, False);
try
if Assigned(lTodo) then
begin
lTodo.Delete(False);
end;
finally
lTodo.Free;
end;
end;
function TMyController.EditTodo(const id: Integer): String;
begin
var lTodo := TMVCActiveRecord.GetByPK<TTodo>(id);
try
ViewData['todo'] := lTodo;
Result := PageFragment(['todo/_form']);
finally
lTodo.Free;
end;
end;
function TMyController.GetAll: String;
begin
var lTodos := TMVCActiveRecord.All<TTodo>;
try
ViewData['todos'] := lTodos;
ViewData['version'] := 'DMVCFramework ' + DMVCFRAMEWORK_VERSION;
Result := Page(['home']);
finally
lTodos.Free;
end;
end;
function TMyController.GetTodo(const id: Integer): String;
begin
var lTodo := TMVCActiveRecord.GetByPK<TTodo>(id);
try
ViewData['todo'] := lToDo;
Result := Page(['todo/_item']);
finally
lTodo.Free;
end;
end;
procedure TMyController.OnBeforeAction(AContext: TWebContext;
const AActionName: string; var AHandled: Boolean);
begin
inherited;
ViewData['ispage'] := not Context.Request.IsHTMX;
end;
function TMyController.UpdateTodo(const id: Integer; const ToDo: TTodo): String;
begin
ToDo.ID := id;
ToDo.Update;
ViewData['todo'] := ToDo;
Result := Page(['todo/_item']);
end;
end.