예제 #1
0
        public async Task <IActionResult> GetSamplesPage(int id, DateTime start, DateTime end)
        {
            if (start.Equals(DateTime.MinValue) || end.Equals(DateTime.MinValue))
            {
                return(BadRequest(ModelState));
            }

            if (end < start)
            {
                var tmp = start;
                start = end;
                end   = tmp;
            }

            var request = new SampleAccessRequest()
            {
                Selector   = SampleAccessRequest.SelectionCriteria.Pet,
                UserId     = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId      = id,
                RangeStart = start,
                RangeEnd   = end
            };


            var port    = new BasicPresenter <GenericDataResponse <IEnvDataSample> >();
            var success = await _sampleDataUseCase.Handle(request, port);

            if (!success)
            {
                return(BadRequest());
            }
            return(new OkObjectResult(port.Response.Result.Select(SampleDto.From)));
        }
예제 #2
0
        public async Task <bool> Handle(SampleAccessRequest message, IOutboundPort <GenericDataResponse <IEnvDataSample> > outputPort)
        {
            var response = new GenericDataResponse <IEnvDataSample>();
            var user     = await _userStore.GetUserById(message.UserId);

            switch (message.Selector)
            {
            case SampleAccessRequest.SelectionCriteria.User:
                if (user == null)
                {
                    return(false);
                }

                response.Result = await _sampleStore.GetRangeByUser(user, message.RangeStart, message.RangeEnd);

                break;

            case SampleAccessRequest.SelectionCriteria.Environment:
                // ensure the user has access to see this environment's data:
                await _userStore.LoadEnvironments(user);

                var env = user.Environments.FirstOrDefault(e => e.Id == message.EnvId);
                if (env == null)
                {
                    return(false);                 // env doesn't exist or user can't access it.
                }
                response.Result = await _sampleStore.GetRangeByEnv(env, message.RangeStart, message.RangeEnd);

                break;

            case SampleAccessRequest.SelectionCriteria.Pet:
                // ensure the user owns the pet in question:
                await _userStore.LoadPets(user);

                var pet = user.Pets.FirstOrDefault(p => p.Id == message.PetId);
                if (pet == null)
                {
                    return(false);                 // pet doesn't exist or user can't access its data.
                }
                response.Result = await _sampleStore.GetRangeByPet(pet, message.RangeStart, message.RangeEnd);

                break;

            default:
                throw new ArgumentException("Invalid selection mode", nameof(message));
            }

            outputPort.Handle(response);
            return(true);
        }