delphimvcframework/samples/articles_crud_server/Services.pas
Daniele Teti d2b024ff43 Updated Angular Project
FIX ErrorObj from TRESTClient
2017-05-12 00:26:29 +02:00

117 lines
2.7 KiB
ObjectPascal

unit Services;
interface
uses
System.Generics.Collections, BusinessObjects, MainDM, System.SysUtils, Commons;
type
TServiceBase = class abstract
strict protected
FDM: TdmMain;
public
constructor Create(AdmMain: TdmMain); virtual;
procedure Commit;
procedure Rollback;
procedure StartTransaction;
end;
TArticlesService = class(TServiceBase)
public
function GetAll: TObjectList<TArticle>;
function GetByID(const AID: Integer): TArticle;
procedure Delete(AArticolo: TArticle);
procedure Add(AArticolo: TArticle);
procedure Update(AArticolo: TArticle);
end;
implementation
uses
FireDAC.Stan.Option, FireDAC.Comp.Client, FireDAC.Stan.Param,
MVCFramework.FireDAC.Utils, MVCFramework.DataSet.Utils,
MVCFramework.Serializer.Commons;
{ TArticoliService }
procedure TArticlesService.Add(AArticolo: TArticle);
var
Cmd: TFDCustomCommand;
begin
AArticolo.CheckInsert;
Cmd := FDM.updArticles.Commands[arInsert];
TFireDACUtils.ObjectToParameters(Cmd.Params, AArticolo, 'NEW_');
Cmd.Execute;
AArticolo.ID := Cmd.ParamByName('ID').AsInteger;
end;
procedure TArticlesService.Delete(AArticolo: TArticle);
var
Cmd: TFDCustomCommand;
begin
AArticolo.CheckDelete;
Cmd := FDM.updArticles.Commands[arDelete];
TFireDACUtils.ObjectToParameters(Cmd.Params, AArticolo, 'OLD_');
Cmd.Execute;
end;
function TArticlesService.GetAll: TObjectList<TArticle>;
begin
FDM.dsArticles.Open('SELECT * FROM ARTICOLI ORDER BY ID');
Result := FDM.dsArticles.AsObjectList<TArticle>;
FDM.dsArticles.Close;
end;
function TArticlesService.GetByID(const AID: Integer): TArticle;
begin
Result := nil;
FDM.dsArticles.Open('SELECT * FROM ARTICOLI WHERE ID = :ID', [AID]);
try
if not FDM.dsArticles.Eof then
Result := FDM.dsArticles.AsObject<TArticle>
else
raise EServiceException.Create('Article not found');
finally
FDM.dsArticles.Close;
end;
end;
procedure TArticlesService.Update(AArticolo: TArticle);
var
Cmd: TFDCustomCommand;
begin
AArticolo.CheckUpdate;
Cmd := FDM.updArticles.Commands[arUpdate];
TFireDACUtils.ObjectToParameters(Cmd.Params, AArticolo, 'NEW_');
Cmd.ParamByName('OLD_ID').AsInteger := AArticolo.ID;
Cmd.Execute;
if Cmd.RowsAffected <> 1 then
raise Exception.Create('Article not found');
end;
{ TServiceBase }
procedure TServiceBase.Commit;
begin
FDM.Connection.Commit;
end;
constructor TServiceBase.Create(AdmMain: TdmMain);
begin
inherited Create;
FDM := AdmMain;
end;
procedure TServiceBase.Rollback;
begin
FDM.Connection.Rollback;
end;
procedure TServiceBase.StartTransaction;
begin
FDM.Connection.StartTransaction;
end;
end.