public async Task <Result <Product, ProductsErrorCodes> > ChangeFrozenStatus(string productId, bool isFrozen, byte[] valueTimestamp, ProductFreezeInfo freezeInfo) { await using var context = _contextFactory.CreateDataContext(); var entity = await context.Products.FirstOrDefaultAsync(p => p.ProductId == productId); if (entity == null) { return(new Result <Product, ProductsErrorCodes>(ProductsErrorCodes.DoesNotExist)); } entity.IsFrozen = isFrozen; entity.FreezeInfo = JsonConvert.SerializeObject(freezeInfo); await context.SaveChangesAsync(); return(new Result <Product, ProductsErrorCodes>(ToModel(entity))); }
public async Task <Result <Product, ProductsErrorCodes> > ChangeFrozenStatus(string productId, bool isFrozen, bool forceFreezeIfAlreadyFrozen, ProductFreezeInfo freezeInfo, string userName, string correlationId) { var existing = await _repository.GetByIdAsync(productId); if (existing.IsFailed) { return(existing); } if (isFrozen == false) { freezeInfo = new ProductFreezeInfo(); } // can only freeze already frozen products with force freeze if (isFrozen && existing.Value.IsFrozen && !forceFreezeIfAlreadyFrozen) { return(existing); } if (existing.Value.IsDiscontinued) { return(new Result <Product, ProductsErrorCodes>(ProductsErrorCodes.CannotFreezeDiscontinuedProduct)); } var result = await _repository.ChangeFrozenStatus(productId, isFrozen, existing.Value.Timestamp, freezeInfo); if (result.IsSuccess) { await _auditService.TryAudit(correlationId, userName, productId, AuditDataType.Product, result.Value.ToJson(), existing.Value.ToJson()); await _entityChangedSender.SendEntityEditedEvent <Product, ProductContract, ProductChangedEvent>( existing.Value, result.Value, userName, correlationId); } return(result); }