xtool/contrib/mORMot/SQLite3/Samples/26 - RESTful ORM/RESTData.pas

96 lines
2.5 KiB
ObjectPascal

unit RESTData;
{$I Synopse.inc} // define HASINLINE and some FPC-specific options
interface
uses
SynCommons,
SynTable, // for TSynValidate
mORMot;
type
TSQLRecordWithModTimeAndMetaData = class(TSQLRecord)
protected
fCreated: TCreateTime;
fModified: TModTime;
fMetaData: variant;
published
property Modified: TModTime read fModified write fModified;
property Created: TCreateTime read fCreated write fCreated;
property MetaData: variant read fMetaData write fMetaData;
end;
TSQLNoteKind = class(TSQLRecordWithModTimeAndMetaData)
protected
fName: RawUTF8;
public
class procedure InitializeTable(Server: TSQLRestServer;
const FieldName: RawUTF8; Options: TSQLInitializeTableOptions); override;
published
property Name: RawUTF8 read fName write fName stored AS_UNIQUE;
end;
TSQLNote = class(TSQLRecordWithModTimeAndMetaData)
protected
fIdent: RawUTF8;
fKind: TSQLNoteKind;
fParent: TSQLNote;
published
property Ident: RawUTF8 read fIdent write fIdent;
property Kind: TSQLNoteKind read fKind write fKind;
property Parent: TSQLNote read fParent write fParent;
end;
TSQLNoteFile = class(TSQLRecordWithModTimeAndMetaData)
protected
fFileName: RawUTF8;
fNote: TSQLNote;
published
property FileName: RawUTF8 read fFileName write fFileName;
property Note: TSQLNote read fNote write fNote;
end;
TSQLUser = class(TSQLAuthUser)
protected
fMetaData: variant;
published
property MetaData: variant read fMetaData write fMetaData;
end;
function DataModel(const RootURI: RawUTF8): TSQLModel;
const
HTTP_PORT = '888';
implementation
function DataModel(const RootURI: RawUTF8): TSQLModel;
begin
result := TSQLModel.Create(
[TSQLAuthGroup,TSQLUser,TSQLNoteKind,TSQLNote,TSQLNoteFile],
RootURI);
TSQLNoteKind.AddFilterOrValidate('Name',TSynValidateText.Create('{MinLength:3}'));
TSQLNote.AddFilterOrValidate('Ident',TSynValidateText.Create('{MinLength:3}'));
TSQLNoteFile.AddFilterOrValidate('FileName',TSynValidateNonVoidText.Create);
TSQLNoteFile.AddFilterOrValidate('FileName',TSynValidateText.Create('{MaxPunctCount:0}'));
end;
{ TSQLNoteKind }
class procedure TSQLNoteKind.InitializeTable(Server: TSQLRestServer;
const FieldName: RawUTF8; Options: TSQLInitializeTableOptions);
var Kind: TSQLNoteKind;
begin
inherited;
Kind := TSQLNoteKind.Create;
Kind.Name := 'PostIt';
Server.Add(Kind,true);
Kind.Name := 'Todo';
Server.Add(Kind,true);
Kind.Free;
end;
end.