| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | using InABox.API;using InABox.Core;using InABox.Database;using Microsoft.Exchange.WebServices.Data;namespace InABox.Rpc{    public class RpcSaveHandler : RpcCommandHandler<IRpcServer, RpcSaveCommand, RpcSaveParameters, RpcSaveResult>    {        public RpcSaveHandler(IRpcServer sender) : base(sender)        {        }        protected override RpcSaveResult Execute(IRpcSession session, RpcSaveParameters parameters)        {            var user = CredentialsCache.ValidateAndRefresh(session.ID)                ?? throw new RpcException("User not found in Credentials Cache!", RpcError.UNAUTHENTICATED);            var response = new RpcSaveResult() { Type = parameters.Type };            var entities = parameters.Items;            var originals = new Dictionary<string, object>[entities.Length];            for(int i = 0; i < entities.Length; ++i)            {                originals[i] = BaseObjectExtensions.GetOriginaValues(entities[i], false);            }            var store = DbFactory.FindStore(parameters.Type, user.ID, user.UserID, session.Platform, session.Version ?? "");            store.Save(entities, parameters.AuditNote);            var deltas = new Dictionary<string, object?>[entities.Length];            for (int i = 0; i < entities.Length; ++i)            {                var preSaveChanges = originals[i];                var item = entities[i];                var currentChanges = item.GetOriginaValues(false);                var delta = new Dictionary<string, object?>();                foreach (var (key, value) in currentChanges)                {                    if (preSaveChanges.TryGetValue(key, out var oldValue))                    {                        if (!Equals(value, oldValue))                            delta[key] = CoreUtils.GetPropertyValue(item, key);                    }                    else                        delta[key] = CoreUtils.GetPropertyValue(item, key);                }                deltas[i] = delta;            }            response.Deltas = deltas;            return response;        }    }}
 |