xtool/contrib/mORMot/SQLite3/Samples/37 - FishShop Service/ServFishShopMain.pas

99 lines
2.0 KiB
ObjectPascal

unit ServFishShopMain;
{$I Synopse.inc} // define HASINLINE CPU32 CPU64 OWNNORMTOUPPER
interface
uses
SynCommons,
mORMot,
mORMotHttpServer,
mORMotService,
ServFishShopTypes;
type
EFishShop = class(ESynException);
TFishShopService = class(TInterfacedObject, IFishShop)
protected
fFishData: IFishData;
public
function GetSpecialOffersPicture: TServiceCustomAnswer;
procedure GetFishList(out fishes: TFishList);
procedure GetFishDetails(const id: variant;
out fish: TFishDetailed);
procedure Order(const basket: TBasketList;
const cardnumber, cardcontrol, discountcoupon: RawUTF8);
end;
TFishShopSettings = class(TSynDaemonSettings)
published
end;
TFishShopDaemon = class(TSynDaemon)
protected
fServer: TSQLRestServer;
fHttpServer: TSQLHttpServer;
fFishData: IFishData;
public
procedure Start; override;
procedure Stop; override;
end;
implementation
{ TFishShopService }
function TFishShopService.GetSpecialOffersPicture: TServiceCustomAnswer;
begin
end;
procedure TFishShopService.GetFishList(out fishes: TFishList);
begin
if Assigned(fFishData) then
fFishData.GetFishList(fishes)
else
raise EFishShop.Create('Panic Mode');
end;
procedure TFishShopService.GetFishDetails(const id: variant;
out fish: TFishDetailed);
begin
if VarIsEmptyOrNull(id) then
exit;
end;
procedure TFishShopService.Order(const basket: TBasketList; const cardnumber,
cardcontrol, discountcoupon: RawUTF8);
begin
end;
{ TFishShopDaemon }
procedure TFishShopDaemon.Start;
var
instance: TFishShopService;
begin
fFishData := TFishDataLegacyDB.Create;
fServer := TSQLRestServerFullMemory.CreateWithOwnModel([], False, FISHSHOP_ROOT);
instance := TFishShopService.Create;
instance.fFishData := fFishData;
fServer.ServiceDefine(instance, [IFishShop], FISHSHOP_CONTRACT);
fHttpServer := TSQLHttpServer.Create(FISHSHOP_PORT, fServer);
end;
procedure TFishShopDaemon.Stop;
begin
fServer.Free;
fHttpServer.Free;
fFishData := nil;
end;
end.