Esempio n. 1
0
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var token = bindingContext.HttpContext.RequestAborted;
            var claim = bindingContext.ModelName;

            if (claim == null)
            {
                bindingContext.Result = ModelBindingResult.Failed();
                return;
            }
            var profile = new UserProfile();
            var val     = Enum.Parse <ProfileServiceQuery>(claim);

            var typeValues = Enum.GetValues(typeof(ProfileServiceQuery));

            foreach (ProfileServiceQuery value in typeValues)
            {
                if ((val & value) != value)
                {
                    continue;
                }
                switch (value)
                {
                case ProfileServiceQuery.None:
                    break;

                case ProfileServiceQuery.UniversityId:
                    var universityId = bindingContext.HttpContext.User.Claims.FirstOrDefault(f =>
                                                                                             string.Equals(f.Type, AppClaimsPrincipalFactory.University, StringComparison.OrdinalIgnoreCase));
                    if (universityId?.Value != null && Guid.TryParse(universityId.Value, out var p))
                    {
                        profile.UniversityId = p;
                    }
                    break;

                case ProfileServiceQuery.Country:
                    profile.Country = await _countryProvider.GetUserCountryAsync(token);

                    break;

                case ProfileServiceQuery.Course:
                    if (bindingContext.HttpContext.User.Identity.IsAuthenticated)
                    {
                        var userId        = _userManager.GetLongUserId(bindingContext.HttpContext.User);
                        var queryCourses  = new UserCoursesQuery(userId);
                        var resultCourses = await _queryBus.QueryAsync(queryCourses, token);

                        profile.Courses = resultCourses.Select(s => s.Name);
                    }

                    break;
                    // throw new ArgumentOutOfRangeException();
                }
            }
            bindingContext.Result = ModelBindingResult.Success(profile);
        }
Esempio n. 2
0
 public async Task UserCoursesQuery_Ok()
 {
     var query = new UserCoursesQuery(638);
     var _     = await fixture.QueryBus.QueryAsync(query, default);
 }