/// Conference Domain services implementation
unit DomConferenceServices;

interface

uses
  SysUtils,
  Classes,
  SynCommons,
  mORMot,
  DomConferenceTypes,
  DomConferenceInterfaces,
  DomConferenceDepend;

type
  TConferenceBooking = class(TInterfacedObject, IConferenceBooking)
  protected
    fRepository: IBookingRepository;
  public
    constructor Create(aRepository: IBookingRepository); reintroduce;
    // IConferenceBooking methods below
    function RegisterAttendee(var Attendee: TAttendee;
      const Days: TSessionDays): TRegisterAttendee;
  end;

implementation

{ TConferenceBooking }

constructor TConferenceBooking.Create(aRepository: IBookingRepository);
begin
  inherited Create;
  fRepository := aRepository;
end;

function TConferenceBooking.RegisterAttendee(var Attendee: TAttendee;
  const Days: TSessionDays): TRegisterAttendee;
var
  number: TAttendeeRegistrationNumber;
  res: TBookingRepositoryError;
begin
  Attendee.CleanupName;
  if (Attendee.Name = '') or (Attendee.FirstName = '') then
    exit(raMissingField);
  //if length(Days) = 0 then
  //  exit(raMissingField);
  res := fRepository.SaveNewRegistration(Attendee, number);
  if res = brSuccess then begin
    Attendee.RegistrationNumber := number;
    result := raSuccess;
  end
  else
    result := raPersistenceError;
end;

initialization
end.
