public async Task <IActionResult> OnPostAddSubscriptionAsync(string userId, SubscriptionDTO subscription) { var memberByUserSpec = new MemberByUserIdSpec(userId); var member = await _repository.GetAsync(memberByUserSpec); if (member == null) { member = await _memberRegistrationService.RegisterMemberAsync(userId); } var subscriptionByMemberSpec = new SubscriptionsByMemberSpec(member.Id); var subscriptionsFromDb = await _repository.ListAsync(subscriptionByMemberSpec); // return error message if new subscription overlaps an existing subscription foreach (var subscriptionFromDb in subscriptionsFromDb) { if ((subscription.StartDate >= subscriptionFromDb.Dates.StartDate && subscription.StartDate <= subscriptionFromDb.Dates.EndDate) || (subscription.EndDate >= subscriptionFromDb.Dates.StartDate && subscription.EndDate <= subscriptionFromDb.Dates.EndDate)) { ModelState.AddModelError("OverlappingSubscription", "Subscriptions cannot overlap"); return(BadRequest(ModelState)); } } try { await _repository.AddAsync(new Subscription() { Dates = new DateTimeRange(subscription.StartDate, subscription.EndDate), MemberId = member.Id }); } //DateTimeRange throws an error if EndDate is prior to StartDate catch (ArgumentException e) { ModelState.AddModelError("InvalidSubscription", e.Message); return(BadRequest(ModelState)); } return(RedirectToPage("./User", new { userId = userId })); }
public async Task <IActionResult> OnGetAsync(string userId) { if (string.IsNullOrEmpty(userId)) { NotFound(); } var currentUser = await _userManager.Users.FirstOrDefaultAsync(x => x.Id == userId); if (currentUser == null) { return(BadRequest()); } var roles = await _roleManager.Roles.ToListAsync(); var unassignedRoles = new List <IdentityRole>(); var assignedRoles = new List <IdentityRole>(); foreach (var role in roles) { if (!(await _userManager.GetUsersInRoleAsync(role.Name)).Contains(currentUser)) { unassignedRoles.Add(role); } else { assignedRoles.Add(role); } } IdentityUser = currentUser; RolesNotAssignedToUser = unassignedRoles.Select(x => new SelectListItem(x.Name, x.Id)).ToList(); Roles = assignedRoles.ToList(); var memberByUserSpec = new MemberByUserIdSpec(userId); var member = await _repository.GetAsync(memberByUserSpec); var subscriptions = new List <Subscription>(); if (member != null) { var subscriptionByMemberSpec = new SubscriptionsByMemberSpec(member.Id); subscriptions = await _repository.ListAsync(subscriptionByMemberSpec); foreach (var subscription in subscriptions) { Subscriptions.Add(new SubscriptionDTO() { Id = subscription.Id, StartDate = subscription.Dates.StartDate, EndDate = subscription.Dates.EndDate, }); var totalDaysInSubscription = subscription.Dates.EndDate != null ? ((DateTime)subscription.Dates.EndDate - subscription.Dates.StartDate).TotalDays : (DateTime.Today - subscription.Dates.StartDate).TotalDays; TotalDaysInAllSubscriptions += totalDaysInSubscription; } } return(Page()); }