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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #5
0
        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));
            }
        }