public Task <CharacterCreationResponse> Handle(CharacterCreationCommand request, CancellationToken cancellationToken) { var existingOnes = _facade.Query(); var errors = new Dictionary <string, string>(); if (existingOnes.Count(x => x.Name == request.Name) > 0) { errors.Add(nameof(request.Name), $"A character with name {request.Name} already exists."); } var existingGuids = existingOnes.Select(x => x.Id); if (!request.Friends.TrueForAll(x => existingGuids.Contains(x))) { errors.Add(nameof(request.Friends), "Some of provided friends don't exist."); } if (!request.Episodes.TrueForAll(x => Episode.List.Count(y => y.Value == x) == 1)) { errors.Add(nameof(request.Episodes), "Some of provided episodes don't exist."); } if (errors.Count == 0) { var chr = new Character { Name = request.Name, Episodes = new Episodes( Episode.List .Where(x => request .Episodes .Contains(x.Value)) .ToArray()), Friends = new Friends( existingOnes.Where(x => request .Friends .Contains(x.Id)) .ToArray()) }; var(newCharactersId, facadeErrors) = _facade.TryAdd(chr); if (newCharactersId != Guid.Empty) { return(Task.FromResult(new CharacterCreationResponse { Id = newCharactersId })); } foreach (var error in facadeErrors) { errors.Add(error.Key, error.Value); } } return(Task.FromResult(new CharacterCreationResponse { Errors = errors })); }
public Task <CharactersQueryResponse> Handle(CharactersQuery request, CancellationToken cancellationToken) { Characters result; if (request?.PaginationOptions != null) { int pageNr; int charactersCount; (result, pageNr, charactersCount) = _facade.QueryPaginated(request.PaginationOptions); return(Task.FromResult(new CharactersQueryResponse { Data = result, Total = charactersCount, CurrentPage = pageNr })); } else { result = _facade.Query(); return(Task.FromResult(new CharactersQueryResponse { Data = result })); } }