public async Task <(TEditEntityDto entityDto, TEntity entity)> Put(string id, TEditEntityDto entityDto, DbContext context, IResourceMandatoryPredicateFactory <TEntity, TKey> mandatoryPredicateFactory, List <IEntityCorrector <TEntity, TCreateEntityDto, TEditEntityDto, TKey> > correctors)
        {
            var foundEntity = await GetById(id, context, mandatoryPredicateFactory.GetMandatoryPredicates());

            if (foundEntity == null)
            {
                throw new EntityNotFoundException();
            }

            _mapper.Map(entityDto, foundEntity);

            var correctorContext = new EntityCorrectorContext
            {
                OperationKind = CrudOperationKind.Put
            };

            await correctors.CorrectEditEntityAsync(correctorContext, foundEntity, entityDto);

            context.Set <TEntity>().Update(foundEntity);

            await context.SaveChangesAsync();

            foundEntity = await GetById(id, context, mandatoryPredicateFactory.GetMandatoryPredicates());

            entityDto = _mapper.Map <TEditEntityDto>(foundEntity);

            await correctors.CorrectEditEntityDtoAsync(correctorContext, entityDto, foundEntity);

            return(entityDto, foundEntity);
        }
        public async Task <(TEditEntityDto entityDto, TEntity entity)> Post(TCreateEntityDto entityDto, DbContext context, List <IEntityCorrector <TEntity, TCreateEntityDto, TEditEntityDto, TKey> > correctors)
        {
            var entity = _mapper.Map <TEntity>(entityDto);

            _logger.LogInformation("Start add the new entity {entity} with id {id}", entity, entity.Id);
            var correctorContext = new EntityCorrectorContext
            {
                OperationKind = CrudOperationKind.Post
            };
            await correctors.CorrectCreateEntityAsync(correctorContext, entity, entityDto);

            context.Set <TEntity>().Add(entity);
            await context.SaveChangesAsync();

            var savedDto = _mapper.Map <TEditEntityDto>(entity);

            await correctors.CorrectEditEntityDtoAsync(correctorContext, savedDto, entity);

            return(savedDto, entity);
        }
Esempio n. 3
0
 public static async Task CorrectEditEntityDtoAsync <TEntity, TCreateEntityDto, TEditEntityDto, TKey>(
     this List <IEntityCorrector <TEntity, TCreateEntityDto, TEditEntityDto, TKey> > correctors, EntityCorrectorContext context, TEditEntityDto receivedEditEntityDto, TEntity entity)
     where TEntity : BaseEntity <TKey>
     where TKey : struct
     where TCreateEntityDto : class
     where TEditEntityDto : class
 {
     foreach (var entityCorrector in correctors)
     {
         await entityCorrector.CorrectEntityDtoAsync(context, receivedEditEntityDto, entity);
     }
 }
 public Task CorrectEntityDtoAsync(EntityCorrectorContext context, TEditEntityDto entityDto, BaseEntity <TKey> entity)
 {
     return(Task.CompletedTask);
 }
 public Task CorrectEntityAsync(EntityCorrectorContext context, BaseEntity <TKey> entity, TEditEntityDto receivedEntityDto)
 {
     ((ITenantedEntity)entity).TenantId = _tenantInfoProvider.GetCurrentTenantId() ?? Guid.Empty;
     return(Task.CompletedTask);
 }