delphimvcframework/samples/winecellar/WineCellarAppControllerU.pas
daniele.teti 8fc2614a1d Now the JSONObjectToObject can deserialize the following tkClass:
- TStream
 - TObjectList<T> (only if the list itself is already created on the object)
 - TObject (only if the list itself is already created on the object)

MapperItemClassType has been aliased with MapperListOf to be more compliant to DORM and can be on the property itself or in the declaration of the type of the property (Check TEST TestComplexObjectToJSONObjectAndBack test)
2014-05-22 21:37:13 +00:00

128 lines
2.6 KiB
ObjectPascal

unit WineCellarAppControllerU;
interface
uses
MVCFramework,
MainDataModuleUnit;
type
[MVCPath('/')]
TWineCellarApp = class(TMVCController)
private
dm: TWineCellarDataModule;
protected
procedure OnBeforeAction(Context: TWebContext; const AActionNAme: string;
var Handled: Boolean);
override;
procedure OnAfterAction(Context: TWebContext;
const AActionNAme: string); override;
public
[MVCPath('/')]
[MVCHTTPMethod([httpGET])]
procedure Index(ctx: TWebContext);
[MVCPath('/wines')]
[MVCHTTPMethod([httpGET])]
procedure WinesList(ctx: TWebContext);
[MVCPath('/wines')]
[MVCHTTPMethod([httpPOST])]
procedure SaveWine(ctx: TWebContext);
[MVCPath('/wines/search/($value)')]
procedure FindWines(ctx: TWebContext);
[MVCPath('/wines/($id)')]
[MVCHTTPMethod([httpGET, httpDELETE])]
procedure WineById(ctx: TWebContext);
[MVCPath('/wines/($id)')]
[MVCHTTPMethod([httpPUT])]
procedure UpdateWineById(ctx: TWebContext);
end;
implementation
uses
System.SysUtils, WinesBO;
procedure TWineCellarApp.FindWines(ctx: TWebContext);
begin
Render(dm.FindWines(ctx.Request.Params['value']));
end;
procedure TWineCellarApp.Index(ctx: TWebContext);
begin
Redirect('/index.html');
end;
procedure TWineCellarApp.OnAfterAction(Context: TWebContext;
const AActionNAme: string);
begin
inherited;
dm.Free;
end;
procedure TWineCellarApp.OnBeforeAction(Context: TWebContext;
const AActionNAme: string;
var Handled: Boolean);
begin
inherited;
dm := TWineCellarDataModule.Create(nil);
end;
procedure TWineCellarApp.SaveWine(ctx: TWebContext);
var
Wine: TWine;
begin
Wine := ctx.Request.BodyAs<TWine>;
try
dm.AddWine(Wine);
finally
Wine.Free;
end;
end;
procedure TWineCellarApp.UpdateWineById(ctx: TWebContext);
var
Wine: TWine;
begin
Wine := ctx.Request.BodyAs<TWine>;
try
dm.UpdateWine(Wine);
finally
Wine.Free;
end;
Render(200, 'Wine updated');
end;
procedure TWineCellarApp.WineById(ctx: TWebContext);
begin
// different behaviour according to the request http method
case ctx.Request.HTTPMethod of
httpDELETE:
begin
dm.DeleteWine(StrToInt(ctx.Request.Params['id']));
Render(200, 'Wine deleted');
end;
httpGET:
begin
Render(dm.GetWineById(StrToInt(ctx.Request.Params['id'])));
end
else
raise Exception.Create('Invalid http method for action');
end;
end;
procedure TWineCellarApp.WinesList(ctx: TWebContext);
begin
Render(dm.FindWines(''));
end;
end.