public async Task <OknObject> UpdateObjectEvent(UpdateObjectEventCommand command, CancellationToken cancellationToken) { var filter = Builders <ObjectEntity> .Filter.Where(x => x.ObjectId == command.ObjectId); var originalEntity = await _context.Objects .Find(filter) .FirstOrDefaultAsync(cancellationToken); if (originalEntity == null) { throw new ObjectEventNotExistException("Object with this id doesn't exist"); } var originalObjectEvent = originalEntity.Events.FirstOrDefault(x => x.EventId == command.EventId); if (originalObjectEvent == null) { throw new ObjectEventNotExistException("Object event with this id doesn't exist"); } SetObjectVersionIfNotExist(command, originalEntity); originalObjectEvent.Name = command.Name ?? originalObjectEvent.Name; originalObjectEvent.Description = command.Description ?? originalObjectEvent.Description; originalObjectEvent.OccuredAt = command.OccuredAt != default ? command.OccuredAt : originalObjectEvent.OccuredAt; if (command.Photos != null) { originalObjectEvent.Photos = command.Photos.Select(x => ProcessFileInfo(x)).ToList(); } if (command.Files != null) { originalObjectEvent.Files = command.Files.Select(x => ProcessFileInfo(x)).ToList(); } await IncObjectVersion(command, originalEntity, originalEntity, cancellationToken); var result = await _context.Objects.ReplaceOneAsync(filter, originalEntity, cancellationToken : cancellationToken); return(null); }
public async Task <IActionResult> Update([FromRoute] string objectId, [FromRoute] string eventId, [FromBody] UpdateObjectEventViewModel request) { if (request == null) { return(BadRequest()); } var currentUser = HttpContext.User; var updateCommand = new UpdateObjectEventCommand(objectId, eventId) { Name = request.Name, Description = request.Description, OccuredAt = request.OccuredAt ?? DateTime.UtcNow, Files = request.Files?.Select(x => new FileInfo { FileId = x.FileId, Description = x.Description }).ToList(), Photos = request.Photos?.Select(x => new FileInfo { FileId = x.FileId, Description = x.Description }).ToList() }; updateCommand.SetCreator( long.Parse(currentUser.FindFirstValue(ClaimTypes.NameIdentifier)).ToString(), currentUser.FindFirstValue(ClaimTypes.Name), currentUser.FindFirstValue(ClaimTypes.Email)); await _objectsEventsRepository.UpdateObjectEvent(updateCommand, CancellationToken.None); return(Ok()); }