Exemple #1
0
 private static void SetCreatedBy(SquidexEvent @event, IMongoEntity entity)
 {
     if (entity is IEntityWithCreatedBy withCreatedBy)
     {
         withCreatedBy.CreatedBy = @event.Actor;
     }
 }
Exemple #2
0
 private static void SetAppId(IEntity entity, SquidexEvent @event)
 {
     if (entity is IUpdateableEntityWithAppRef appEntity && @event is AppEvent appEvent)
     {
         appEntity.AppId = appEvent.AppId.Id;
     }
 }
Exemple #3
0
 private static void SetAppId(SquidexEvent @event, IMongoEntity entity)
 {
     if (entity is IAppRefEntity app && @event is AppEvent appEvent)
     {
         app.AppId = appEvent.AppId.Id;
     }
 }
Exemple #4
0
 private static void SetCreatedBy(IEntity entity, SquidexEvent @event)
 {
     if (entity is IUpdateableEntityWithCreatedBy withCreatedBy && withCreatedBy.CreatedBy == null)
     {
         withCreatedBy.CreatedBy = @event.Actor;
     }
 }
Exemple #5
0
 private static void SetLastModifiedBy(IEntity entity, SquidexEvent @event)
 {
     if (entity is IUpdateableEntityWithLastModifiedBy withModifiedBy)
     {
         withModifiedBy.LastModifiedBy = @event.Actor;
     }
 }
Exemple #6
0
 private static void SetLastModifiedBy(SquidexEvent @event, IMongoEntity entity)
 {
     if (entity is IEntityWithLastModifiedBy withModifiedBy)
     {
         withModifiedBy.LastModifiedBy = @event.Actor;
     }
 }
        public static Task CreateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater) where T : MongoEntity, new()
        {
            var entity = EntityMapper.Create <T>(@event, headers);

            updater(entity);

            return(collection.InsertOneIfNotExistsAsync(entity));
        }
Exemple #8
0
        public static T Update <T>(SquidexEvent @event, EnvelopeHeaders headers, T entity) where T : IMongoEntity, new()
        {
            SetVersion(headers, entity);
            SetLastModified(headers, entity);
            SetLastModifiedBy(@event, entity);

            return(entity);
        }
        private Task UpdateSchemaAsync(SquidexEvent @event, EnvelopeHeaders headers, Action <MongoSchemaEntity> updater)
        {
            return(Collection.UpdateAsync(@event, headers, s =>
            {
                updater(s);

                s.IsPublished = s.SchemaDef.IsPublished;
            }));
        }
Exemple #10
0
        public static T Update <T>(this T entity, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater = null) where T : IEntity, new()
        {
            SetVersion(headers, entity);
            SetLastModified(headers, entity);
            SetLastModifiedBy(@event, entity);

            updater?.Invoke(entity);

            return(entity);
        }
Exemple #11
0
        public static T Update <T>(this T entity, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater = null) where T : IEntity
        {
            SetId(entity, headers);
            SetAppId(entity, @event);
            SetCreated(entity, headers);
            SetCreatedBy(entity, @event);
            SetLastModified(entity, headers);
            SetLastModifiedBy(entity, @event);
            SetVersion(entity, headers);

            updater?.Invoke(entity);

            return(entity);
        }
Exemple #12
0
        public static T Create <T>(SquidexEvent @event, EnvelopeHeaders headers) where T : IMongoEntity, new()
        {
            var entity = new T();

            SetId(headers, entity);

            SetVersion(headers, entity);
            SetCreated(headers, entity);
            SetCreatedBy(@event, entity);

            SetAppId(@event, entity);

            return(Update(@event, headers, entity));
        }
Exemple #13
0
        public static T Create <T>(SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater = null) where T : IEntity, new()
        {
            var entity = new T();

            SetId(headers, entity);

            SetVersion(headers, entity);
            SetCreated(headers, entity);
            SetCreatedBy(@event, entity);

            SetAppId(@event, entity);

            return(entity.Update(@event, headers, updater));
        }
 private Task UpdateSchema(SquidexEvent @event, EnvelopeHeaders headers, Func <Schema, Schema> updater)
 {
     return(Collection.UpdateAsync(@event, headers, e => UpdateSchema(e, updater)));
 }
        public static async Task UpdateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater) where T : MongoEntity, new()
        {
            var entity = await collection.Find(t => t.Id == headers.AggregateId()).FirstOrDefaultAsync();

            if (entity == null)
            {
                throw new DomainObjectNotFoundException(headers.AggregateId().ToString(), typeof(T));
            }

            EntityMapper.Update(@event, headers, entity);

            updater(entity);

            await collection.ReplaceOneAsync(t => t.Id == entity.Id, entity);
        }
        public static async Task <bool> TryUpdateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater) where T : class, IEntity, new()
        {
            var entity =
                await collection.Find(t => t.Id == headers.AggregateId())
                .FirstOrDefaultAsync();

            if (entity != null)
            {
                if (entity is IEntityWithVersion withVersion)
                {
                    var eventVersion = headers.EventStreamNumber();

                    if (eventVersion <= withVersion.Version)
                    {
                        return(false);
                    }
                }

                await collection.UpdateAsync(@event, headers, entity, updater);

                return(true);
            }

            return(false);
        }
        private static async Task UpdateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, T entity, Action <T> updater) where T : class, IEntity, new()
        {
            entity.Update(@event, headers, updater);

            await collection.ReplaceOneAsync(t => t.Id == entity.Id, entity);
        }
        public static async Task CreateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, Func <T, Task> updater) where T : class, IMongoEntity, new()
        {
            var entity = EntityMapper.Create <T>(@event, headers);

            await updater(entity);

            await collection.InsertOneIfNotExistsAsync(entity);
        }
        public static Task CreateAsync <T>(this IMongoCollection <T> collection, SquidexEvent @event, EnvelopeHeaders headers, Action <T> updater) where T : class, IEntity, new()
        {
            var entity = new T().Update(@event, headers, updater);

            return(collection.InsertOneIfNotExistsAsync(entity));
        }