Example #1
0
        internal async Task SaveDataObj(Action <ExpandoObject> setParams, ExpandoObject dataToSave, TextWriter writer)
        {
            String baseUrl = dataToSave.Get <String>("baseUrl");

            if (NormalizeBaseUrl != null)
            {
                baseUrl = NormalizeBaseUrl(baseUrl);
            }
            ExpandoObject data = dataToSave.Get <ExpandoObject>("data");
            var           rm   = await RequestModel.CreateFromBaseUrl(_host, Admin, baseUrl);

            RequestView rw   = rm.GetCurrentAction();
            var         prms = new ExpandoObject();

            setParams?.Invoke(prms);
            prms.Append(rw.parameters);
            CheckUserState(prms);
            IDataModel model = await _dbContext.SaveModelAsync(rw.CurrentSource, rw.UpdateProcedure, data, prms);

            IModelHandler handler = rw.GetHookHandler();

            if (handler != null)
            {
                await handler.AfterSave(data, model.Root);
            }
            WriteDataModel(model, writer);
        }
Example #2
0
        internal async Task SaveDataObj(Action <ExpandoObject> setParams, ExpandoObject dataToSave, TextWriter writer)
        {
            String baseUrl = dataToSave.Get <String>("baseUrl");

            if (NormalizeBaseUrl != null)
            {
                baseUrl = NormalizeBaseUrl(baseUrl);
            }
            ExpandoObject data = dataToSave.Get <ExpandoObject>("data");
            var           rm   = await RequestModel.CreateFromBaseUrl(_host, baseUrl);

            RequestView rw   = rm.GetCurrentAction();
            var         prms = new ExpandoObject();

            setParams?.Invoke(prms);
            prms.Append(rw.parameters);
            CheckUserState(prms);
            IDataModel model = null;

            IModelHandler handler      = rw.GetHookHandler();
            String        invokeTarget = rw.GetInvokeTarget();

            if (handler != null)
            {
                Int64 userId  = prms.Get <Int64>("UserId");
                var   handled = await handler.BeforeSave(userId, data);

                if (!handled)
                {
                    model = await _dbContext.SaveModelAsync(rw.CurrentSource, rw.UpdateProcedure, data, prms);

                    await handler.AfterSave(userId, data, model.Root);
                }
            }
            else if (invokeTarget != null)
            {
                model = await _dbContext.SaveModelAsync(rw.CurrentSource, rw.UpdateProcedure, data, prms);

                var clr = new ClrInvoker();
                clr.EnableThrow();
                clr.Invoke(invokeTarget, prms);                 // after save
            }
            else
            {
                model = await _dbContext.SaveModelAsync(rw.CurrentSource, rw.UpdateProcedure, data, prms);
            }
            var eh = rw?.events?.afterSave;

            if (eh != null)
            {
                // new model data
                await _dbContext.SaveModelAsync(eh.CurrentSource(rw), eh.UpdateProcedure(rw), model.Root, prms);
            }
            WriteDataModel(model, writer);
        }
 public UsersController(IModelHandler <IUserModel, IUser, IUserProfile> handler)
 {
     _handler = handler;
 }
Example #4
0
 /// <summary>
 /// Registers a type-specific injector
 /// </summary>
 public void RegisterModelHandler <T>(IModelHandler <T> handler)
 {
     _handlers.Add(new RegisteredInjector(typeof(T), handler));
 }