-
Notifications
You must be signed in to change notification settings - Fork 5
/
MiniREST.Controller.Base.pas
139 lines (115 loc) · 3.79 KB
/
MiniREST.Controller.Base.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
unit MiniREST.Controller.Base;
interface
uses SysUtils, MiniREST.Intf, MiniREST.Common, MiniREST.Controller.Intf;
type
TMiniRESTControllerBase = class(TInterfacedObject, IMiniRESTController)
protected
FActionContext : IMiniRESTActionContext;
FLogger : IMiniRESTLogger;
procedure InitController; virtual;
public
function GetActionContext: IMiniRESTActionContext;
procedure SetActionContext(AContext: IMiniRESTActionContext);
procedure Response(AContent : string; AContentType : TMiniRESTResponseType = rtTextHtml; AStatusCode : Integer = 200);
procedure ResponseJson(AJson: string; AStatusCode : Integer = 200);
procedure ResponseErro(AMsgErro: string; AStatusCode : Integer = 500);
function PathVariableAsInteger(AVariable : string) : Integer;
function PathVariable(AVariable : string) : string;
function QueryParam(AQueryParam : string) : string;
function QueryParams : TArray<IMiniRESTQueryParam>;
function GetLogger : IMiniRESTLogger;
procedure SetLogger(ALogger: IMiniRESTLogger);
end;
TMiniRESTControllerFactoryBase = class(TInterfacedObject, IMiniRESTControllerFactory)
private
FClass : TClass;
FFactory: TFunc<IMiniRESTController>;
FIntf : IInterface;
public
constructor Create(AClass: TClass; AFactory : TFunc<IMiniRESTController>);
function GetClass: TClass;
function GetController: TObject;
procedure ClearFactory;
end;
implementation
{ TMiniRESTControllerBase }
function TMiniRESTControllerBase.GetActionContext: IMiniRESTActionContext;
begin
Result := FActionContext;
end;
function TMiniRESTControllerBase.GetLogger: IMiniRESTLogger;
begin
Result := FLogger;
end;
procedure TMiniRESTControllerBase.InitController;
begin
Exit;
end;
function TMiniRESTControllerBase.PathVariable(AVariable: string): string;
begin
Result := GetActionContext.GetPathVariable(AVariable);
end;
function TMiniRESTControllerBase.PathVariableAsInteger(
AVariable: string): Integer;
begin
Result := StrToInt(PathVariable(AVariable));
end;
function TMiniRESTControllerBase.QueryParam(AQueryParam: string): string;
var LQueryParam : IMiniRESTQueryParam;
begin
LQueryParam := FActionContext.GetQueryParam(AQueryParam);
if LQueryParam <> nil then
Result := LQueryParam.GetValue
else
Result := '';
end;
function TMiniRESTControllerBase.QueryParams: TArray<IMiniRESTQueryParam>;
begin
Result := FActionContext.GetQueryParams;
end;
procedure TMiniRESTControllerBase.Response(AContent: string;
AContentType: TMiniRESTResponseType; AStatusCode : Integer);
begin
//GetActionContext.SetResponseContent(AContent, AContentType);
GetActionContext.SetResponseContent(AContent);
GetActionContext.SetResponseContentType(AContentType);
GetActionContext.SetResponseStatusCode(AStatusCode);
end;
procedure TMiniRESTControllerBase.ResponseErro(AMsgErro: string; AStatusCode : Integer);
begin
Response('{"erro":"' + AMsgErro + '"}', rtApplicationJson, AStatusCode);
end;
procedure TMiniRESTControllerBase.ResponseJson(AJson: string; AStatusCode : Integer);
begin
Response(AJson, rtApplicationJson, AStatusCode);
end;
procedure TMiniRESTControllerBase.SetActionContext(
AContext: IMiniRESTActionContext);
begin
FActionContext := AContext;
end;
procedure TMiniRESTControllerBase.SetLogger(ALogger: IMiniRESTLogger);
begin
FLogger := ALogger;
end;
{ TMiniRESTControllerFactoryBase }
procedure TMiniRESTControllerFactoryBase.ClearFactory;
begin
FIntf := nil;
end;
constructor TMiniRESTControllerFactoryBase.Create(AClass: TClass;
AFactory: TFunc<IMiniRESTController>);
begin
FClass := AClass;
FFactory := AFactory;
end;
function TMiniRESTControllerFactoryBase.GetClass: TClass;
begin
Result := FClass;
end;
function TMiniRESTControllerFactoryBase.GetController: TObject;
begin
FIntf := FFactory();
Result := TObject(FIntf);
end;
end.