mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-16 16:25:54 +01:00
173 lines
3.9 KiB
ObjectPascal
173 lines
3.9 KiB
ObjectPascal
|
unit uData.Model;
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
MVCFramework.Serializer.Commons, MVCFramework.Nullables;
|
||
|
|
||
|
type
|
||
|
TBaseBO = class
|
||
|
protected
|
||
|
procedure Clone(Source: TBaseBO); virtual; abstract;
|
||
|
public
|
||
|
constructor Create; virtual;
|
||
|
procedure CheckInsert; virtual;
|
||
|
procedure CheckUpdate; virtual;
|
||
|
procedure CheckDelete; virtual;
|
||
|
end;
|
||
|
|
||
|
[MVCNameCase(ncLowerCase)]
|
||
|
TGenre = class(TBaseBO)
|
||
|
private
|
||
|
FGenreID: Integer;
|
||
|
FGenre: string;
|
||
|
FSelected: Boolean;
|
||
|
protected
|
||
|
procedure Clone(Source: TBaseBO); override;
|
||
|
public
|
||
|
constructor Create(AID: Integer; AName: string); reintroduce;
|
||
|
property GenreID: Integer read FGenreID write FGenreID;
|
||
|
property Genre: string read FGenre write FGenre;
|
||
|
// this is a dummy property - it gets set when rendering a list with an existing genre
|
||
|
property Selected: Boolean read FSelected write FSelected;
|
||
|
end;
|
||
|
|
||
|
TMovie = class(TBaseBO)
|
||
|
private
|
||
|
FMovieID: Integer;
|
||
|
FGenreID: Integer;
|
||
|
FCurrent: Boolean;
|
||
|
FMovieName: string;
|
||
|
FGenreName: string;
|
||
|
FRating: Integer;
|
||
|
FReleaseDate: TDate;
|
||
|
procedure SetGenreID(const Value: Integer);
|
||
|
procedure SetCurrent(const Value: Boolean);
|
||
|
procedure SetReleaseDate(const Value: TDate);
|
||
|
public
|
||
|
constructor CreateNew(ACurrent: Boolean);
|
||
|
procedure Clone(Source: TBaseBO); override;
|
||
|
procedure CheckInsert; override;
|
||
|
procedure CheckUpdate; override;
|
||
|
procedure CheckDelete; override;
|
||
|
property MovieID: Integer read FMovieID write FMovieID;
|
||
|
property MovieName: string read FMovieName write FMovieName;
|
||
|
property Rating: Integer read FRating write FRating;
|
||
|
property GenreID: Integer read FGenreID write SetGenreID;
|
||
|
[MVCDoNotDeSerialize]
|
||
|
property GenreName: string read FGenreName write FGenreName;
|
||
|
property Current: Boolean read FCurrent write SetCurrent;
|
||
|
property ReleaseDate: TDate read FReleaseDate write SetReleaseDate;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
System.SysUtils,
|
||
|
System.IOUtils, System.DateUtils;
|
||
|
|
||
|
{ TBaseBO }
|
||
|
|
||
|
procedure TBaseBO.CheckDelete;
|
||
|
begin
|
||
|
// override in descendant
|
||
|
end;
|
||
|
|
||
|
procedure TBaseBO.CheckInsert;
|
||
|
begin
|
||
|
// override in descendant
|
||
|
end;
|
||
|
|
||
|
procedure TBaseBO.CheckUpdate;
|
||
|
begin
|
||
|
// override in descendant
|
||
|
end;
|
||
|
|
||
|
constructor TBaseBO.Create;
|
||
|
begin
|
||
|
inherited Create;
|
||
|
end;
|
||
|
|
||
|
{ TGenre }
|
||
|
|
||
|
procedure TGenre.Clone(Source: TBaseBO);
|
||
|
begin
|
||
|
if Source is TGenre then
|
||
|
begin
|
||
|
FGenreID := TGenre(Source).FGenreID;
|
||
|
FGenre := TGenre(Source).FGenre;
|
||
|
FSelected := TGenre(Source).FSelected;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
constructor TGenre.Create(AID: Integer; AName: string);
|
||
|
begin
|
||
|
inherited Create;
|
||
|
FGenreID := AID;
|
||
|
FGenre := AName;
|
||
|
end;
|
||
|
|
||
|
{ TMovie }
|
||
|
|
||
|
procedure TMovie.CheckDelete;
|
||
|
begin
|
||
|
inherited;
|
||
|
if Current then
|
||
|
raise Exception.Create('Cannot delete a current movie');
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.CheckInsert;
|
||
|
begin
|
||
|
inherited;
|
||
|
if FMovieID <= 0 then
|
||
|
raise Exception.Create('Must supply Movie ID');
|
||
|
if (FRating < 0) or (FRating > 10) then
|
||
|
raise Exception.Create('Rating must be between 0 and 10');
|
||
|
if FReleaseDate < EncodeDate(1900, 1, 1) then
|
||
|
raise Exception.Create('Movies cannot be older than 1st Jan 1900');
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.CheckUpdate;
|
||
|
begin
|
||
|
inherited;
|
||
|
CheckInsert;
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.Clone(Source: TBaseBO);
|
||
|
begin
|
||
|
if Source is TMovie then
|
||
|
begin
|
||
|
FMovieID := TMovie(Source).FMovieID;
|
||
|
FGenreID := TMovie(Source).FGenreID;
|
||
|
FGenreName := TMovie(Source).FGenreName;
|
||
|
FCurrent := TMovie(Source).FCurrent;
|
||
|
FMovieName := TMovie(Source).FMovieName;
|
||
|
FRating := TMovie(Source).FRating;
|
||
|
FReleaseDate := TMovie(Source).FReleaseDate;
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
constructor TMovie.CreateNew(ACurrent: Boolean);
|
||
|
begin
|
||
|
inherited Create;
|
||
|
FCurrent := ACurrent;
|
||
|
ReleaseDate := Now;
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.SetGenreID(const Value: Integer);
|
||
|
begin
|
||
|
FGenreID := Value;
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.SetReleaseDate(const Value: TDate);
|
||
|
begin
|
||
|
FReleaseDate := Value;
|
||
|
end;
|
||
|
|
||
|
procedure TMovie.SetCurrent(const Value: Boolean);
|
||
|
begin
|
||
|
FCurrent := Value;
|
||
|
end;
|
||
|
|
||
|
end.
|