You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.9KB

  1. using CartWise.Application.Interfaces;
  2. using CartWise.Infrastructure.Identity;
  3. using CartWise.Web.ViewModels.Household;
  4. using Microsoft.AspNetCore.Authorization;
  5. using Microsoft.AspNetCore.Identity;
  6. using Microsoft.AspNetCore.Mvc;
  7. namespace CartWise.Web.Controllers;
  8. [Authorize]
  9. public class HouseholdController : Controller
  10. {
  11. private readonly IHouseholdService _householdService;
  12. private readonly UserManager<ApplicationUser> _userManager;
  13. public HouseholdController(IHouseholdService householdService, UserManager<ApplicationUser> userManager)
  14. {
  15. _householdService = householdService;
  16. _userManager = userManager;
  17. }
  18. [HttpGet]
  19. [Route("household")]
  20. public async Task<IActionResult> Index()
  21. {
  22. var userId = _userManager.GetUserId(User)!;
  23. var household = await _householdService.GetCurrentHouseholdAsync(userId);
  24. if (household is null)
  25. {
  26. return RedirectToAction(nameof(Create));
  27. }
  28. var members = new List<HouseholdMemberViewModel>();
  29. foreach (var member in household.Members.OrderBy(m => m.JoinedUtc))
  30. {
  31. var memberUser = await _userManager.FindByIdAsync(member.UserId);
  32. var displayName = !string.IsNullOrWhiteSpace(memberUser?.DisplayName)
  33. ? memberUser.DisplayName
  34. : memberUser?.Email ?? "Unknown";
  35. members.Add(new HouseholdMemberViewModel
  36. {
  37. UserId = member.UserId,
  38. DisplayName = displayName,
  39. Role = member.Role,
  40. JoinedUtc = member.JoinedUtc
  41. });
  42. }
  43. var viewModel = new HouseholdIndexViewModel
  44. {
  45. HouseholdId = household.HouseholdId,
  46. Name = household.Name,
  47. CreatedUtc = household.CreatedUtc,
  48. Members = members
  49. };
  50. return View(viewModel);
  51. }
  52. [HttpGet]
  53. [Route("household/create")]
  54. public async Task<IActionResult> Create()
  55. {
  56. var userId = _userManager.GetUserId(User)!;
  57. var existingHousehold = await _householdService.GetCurrentHouseholdAsync(userId);
  58. if (existingHousehold is not null)
  59. {
  60. return RedirectToAction(nameof(Index));
  61. }
  62. return View(new CreateHouseholdViewModel());
  63. }
  64. [HttpPost]
  65. [Route("household/create")]
  66. [ValidateAntiForgeryToken]
  67. public async Task<IActionResult> Create(CreateHouseholdViewModel model)
  68. {
  69. if (!ModelState.IsValid)
  70. {
  71. return View(model);
  72. }
  73. var userId = _userManager.GetUserId(User)!;
  74. var result = await _householdService.CreateHouseholdAsync(model.Name, userId);
  75. if (!result.IsSuccess)
  76. {
  77. ModelState.AddModelError(string.Empty, result.Error!);
  78. return View(model);
  79. }
  80. return RedirectToAction(nameof(Index));
  81. }
  82. }

Powered by TurnKey Linux.