public async Task <ActivityStateDocument> Handle(CreateStateDocumentCommand request, CancellationToken cancellationToken) { var state = new ActivityStateEntity(request.Content, request.ContentType) { StateId = request.StateId, Activity = request.Activity, Agent = request.Agent, Registration = request.Registration }; _context.ActivityStates.Add(state); await _context.SaveChangesAsync(cancellationToken); return(_mapper.Map <ActivityStateDocument>(state)); }
public async Task <ActivityStateDocument> Handle(GetActivityStateQuery request, CancellationToken cancellationToken) { string activityHash = request.ActivityId.ComputeHash(); AgentEntity agent = _mapper.Map <AgentEntity>(request.Agent); var query = _context.ActivityStates .Where(x => x.Activity.Hash == activityHash) .Where(x => x.Agent.Hash == agent.Hash); if (request.Registration.HasValue) { query.Where(x => x.Registration == request.Registration); } ActivityStateEntity state = await query.SingleOrDefaultAsync(cancellationToken); return(_mapper.Map <ActivityStateDocument>(state)); }
public async Task <ActivityStateDocument> Handle(CreateStateDocumentCommand request, CancellationToken cancellationToken) { ActivityEntity activity = (ActivityEntity)await _mediator.Send(MergeActivityCommand.Create(request.ActivityId), cancellationToken); AgentEntity agent = (AgentEntity)await _mediator.Send(MergeActorCommand.Create(request.Agent), cancellationToken); var state = new ActivityStateEntity(request.Content, request.ContentType) { StateId = request.StateId, Activity = activity, Agent = agent, Registration = request.Registration }; _context.ActivityStates.Add(state); await _context.SaveChangesAsync(cancellationToken); return(_mapper.Map <ActivityStateDocument>(state)); }
public async Task <ActivityStateDocument> Handle(UpdateStateDocumentCommand request, CancellationToken cancellationToken) { string activityHash = request.ActivityId.ComputeHash(); var query = _context.Documents .OfType <ActivityStateEntity>() .Where(x => x.Key == request.StateId) .Where(x => x.Activity.Hash == activityHash) .Where(x => x.Agent.AgentId == request.AgentId); if (request.Registration.HasValue && request.Registration.Value != Guid.Empty) { query.Where(x => x.RegistrationId == request.Registration); } ActivityStateEntity state = await query.SingleOrDefaultAsync(cancellationToken); if (state == null) { throw new NotFoundException("State", request.StateId); } var stateDocument = state; if (stateDocument.ContentType != MediaTypes.Application.Json || request.ContentType != MediaTypes.Application.Json) { throw new BadRequestException(); } JsonString jsonString = Encoding.UTF8.GetString(request.Content); JsonString savedJsonString = Encoding.UTF8.GetString(stateDocument.Content); // Merge, and overwrite duplicate props with props in new json document savedJsonString.Merge(jsonString); byte[] mergedJsonBytes = Encoding.UTF8.GetBytes(jsonString.ToString()); state.UpdateDocument(mergedJsonBytes, request.ContentType); _context.Documents.Update(state); await _context.SaveChangesAsync(cancellationToken); return(_mapper.Map <ActivityStateDocument>(state)); }
public async Task <ActivityStateDocument> Handle(MergeStateDocumentCommand request, CancellationToken cancellationToken) { AgentEntity agent = _mapper.Map <AgentEntity>(request.Agent); string activityHash = request.ActivityId.ComputeHash(); var query = _context.ActivityStates .Where(x => x.Activity.Hash == activityHash) .Where(x => x.Agent.Hash == agent.Hash); if (request.Registration.HasValue) { query.Where(x => x.Registration == request.Registration); } ActivityStateEntity state = await query.SingleOrDefaultAsync(); if (state != null) { // Update state.Document.UpdateDocument(request.Content, request.ContentType); _context.ActivityStates.Update(state); await _context.SaveChangesAsync(cancellationToken); return(_mapper.Map <ActivityStateDocument>(state)); } else { // Create return(await Handle(new CreateStateDocumentCommand() { ActivityId = request.ActivityId, Agent = request.Agent, Content = request.Content, ContentType = request.ContentType, Registration = request.Registration, StateId = request.StateId }, cancellationToken)); } }