1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using InABox.Core;
- using InABox.Poster.Shared;
- using InABox.Scripting;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace InABox.Poster.Custom;
- public class CustomPosterEngine<TPostable> : BasePosterEngine<TPostable, ICustomPoster<TPostable>, CustomPosterSettings>
- where TPostable : Entity, IPostable, IRemotable, IPersistent, new()
- {
- public override bool BeforePost(IDataModel<TPostable> model)
- {
- if (GetScriptDocument() is ScriptDocument script)
- {
- return script.Execute(methodname: "BeforePost", parameters: new object[] { model });
- }
- return false;
- }
- protected override IPostResult<TPostable> DoProcess(IDataModel<TPostable> model)
- {
- if (GetScriptDocument() is ScriptDocument script)
- {
- if(!script.Execute(methodname: "Process", parameters: new object[] { model }))
- {
- throw new Exception("Post Failed.");
- }
- var resultsObject = script.GetValue("Results");
- return (resultsObject as IPostResult<TPostable>)
- ?? throw new Exception($"Script 'Results' property expected to be IPostResult<{typeof(TPostable)}>, got {resultsObject}");
- }
- else
- {
- throw new Exception("Post Failed.");
- }
- }
- public override void AfterPost(IDataModel<TPostable> model, IPostResult<TPostable> result)
- {
- if (GetScriptDocument() is ScriptDocument script)
- {
- script.Execute(methodname: "AfterPost", parameters: new object[] { model });
- }
- }
- }
|