delphimvcframework/samples/winecellar/WineCellarAppControllerU.pas

128 lines
2.6 KiB
ObjectPascal
Raw Normal View History

2013-10-29 16:51:16 +01:00
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('/')]
2013-11-11 02:05:03 +01:00
[MVCHTTPMethod([httpGET])]
2013-10-29 16:51:16 +01:00
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;
2013-10-29 16:51:16 +01:00
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;
2013-10-29 16:51:16 +01:00
begin
Wine := ctx.Request.BodyAs<TWine>;
try
dm.AddWine(Wine);
finally
Wine.Free;
end;
2013-10-29 16:51:16 +01:00
end;
procedure TWineCellarApp.UpdateWineById(ctx: TWebContext);
var
Wine: TWine;
2013-10-29 16:51:16 +01:00
begin
Wine := ctx.Request.BodyAs<TWine>;
try
dm.UpdateWine(Wine);
finally
Wine.Free;
end;
Render(200, 'Wine updated');
2013-10-29 16:51:16 +01:00
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;
2013-10-29 16:51:16 +01:00
httpGET:
begin
Render(dm.GetWineById(StrToInt(ctx.Request.Params['id'])));
end
2013-10-29 16:51:16 +01:00
else
raise Exception.Create('Invalid http method for action');
end;
2013-10-29 16:51:16 +01:00
end;
procedure TWineCellarApp.WinesList(ctx: TWebContext);
begin
Render(dm.FindWines(''));
end;
end.