delphimvcframework/samples/activerecord_crud/Entities.pas

151 lines
3.1 KiB
ObjectPascal

unit Entities;
interface
uses
MVCFramework.Serializer.Commons,
MVCFramework.ActiveRecord,
System.Classes;
type
[MVCNameCase(ncLowerCase)]
[Table('PEOPLE')]
TPerson = class(TMVCActiveRecord)
private
[PrimaryKey('ID', [foAutoGenerated])]
fID: Int64;
[TableField('LAST_NAME')]
fLastName: string;
[TableField('FIRST_NAME')]
fFirstName: string;
[TableField('DOB')]
fDOB: TDate;
[TableField('FULL_NAME')]
fFullName: string;
[TableField('IS_MALE')]
fIsMale: Boolean;
[TableField('NOTE')]
fNote: string;
[TableField('PHOTO')]
fPhoto: TStream;
// transient fields
fAge: Integer;
procedure SetLastName(const Value: string);
procedure SetID(const Value: Int64);
procedure SetFirstName(const Value: string);
procedure SetDOB(const Value: TDate);
function GetFullName: string;
procedure SetIsMale(const Value: Boolean);
procedure SetNote(const Value: string);
protected
procedure OnAfterLoad; override;
procedure OnBeforeInsertOrUpdate; override;
procedure OnValidation; override;
procedure OnBeforeInsert; override;
public
constructor Create; override;
destructor Destroy; override;
property ID: Int64 read fID write SetID;
property LastName: string read fLastName write SetLastName;
property FirstName: string read fFirstName write SetFirstName;
property Age: Integer read fAge;
property DOB: TDate read fDOB write SetDOB;
property FullName: string read GetFullName;
property IsMale: Boolean read fIsMale write SetIsMale;
property Note: string read fNote write SetNote;
property Photo: TStream read fPhoto;
end;
implementation
uses
System.DateUtils,
System.SysUtils;
{ TPersona }
constructor TPerson.Create;
begin
inherited;
fPhoto := TMemoryStream.Create;
end;
destructor TPerson.Destroy;
begin
fPhoto.Free;
inherited;
end;
function TPerson.GetFullName: string;
begin
Result := fFullName;
end;
procedure TPerson.OnAfterLoad;
begin
inherited;
fAge := Yearsbetween(fDOB, now);
end;
procedure TPerson.OnBeforeInsert;
begin
inherited;
TMemoryStream(fPhoto).LoadFromFile('C:\DEV\dmvcframework\samples\_\customer.png');
end;
procedure TPerson.OnBeforeInsertOrUpdate;
begin
inherited;
fLastName := fLastName.ToUpper;
fFirstName := fFirstName.ToUpper;
fFullName := fFirstName + ' ' + fLastName;
end;
procedure TPerson.OnValidation;
begin
inherited;
if fLastName.Trim.IsEmpty or fFirstName.Trim.IsEmpty then
raise EMVCActiveRecord.Create('Validation error. FirstName and LastName are required');
end;
procedure TPerson.SetLastName(const Value: string);
begin
fLastName := Value;
end;
procedure TPerson.SetNote(const Value: string);
begin
fNote := Value;
end;
procedure TPerson.SetDOB(const Value: TDate);
begin
fDOB := Value;
end;
procedure TPerson.SetID(const Value: Int64);
begin
fID := Value;
end;
procedure TPerson.SetIsMale(const Value: Boolean);
begin
fIsMale := Value;
end;
procedure TPerson.SetFirstName(const Value: string);
begin
fFirstName := Value;
end;
initialization
ActiveRecordMappingRegistry.AddEntity('people', TPerson);
finalization
end.