profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
WishlistController.cs 4,515 bytes
1 using SplitApp.WebApp.Application.DTO;
2 using SplitApp.WebApp.Application.Services.Admin;
3 using SplitApp.Modules.Trips.Domain.Entities;
4 using SplitApp.Modules.Trips.Domain.Enums;
5 using SplitApp.Modules.Expenses.Domain.Entities;
6 using SplitApp.Modules.Expenses.Domain.Enums;
7 using SplitApp.Modules.Users.Domain.Entities;
8 using Microsoft.AspNetCore.Authorization;
9 using Microsoft.AspNetCore.Mvc;
10 using Microsoft.AspNetCore.Mvc.Rendering;
11 using Microsoft.Extensions.Localization;
12 using SplitApp.WebApp.Areas.Admin.Models;
13
14 namespace SplitApp.WebApp.Areas.Admin.Controllers;
15
16 [Area("Admin")]
17 [Authorize(Roles = "admin")]
18 public class WishlistController : Controller
19 {
20 private readonly IWishlistAdminService _service;
21 private readonly IStringLocalizer<App.Resources.Views.Shared> _l;
22
23 public WishlistController(IWishlistAdminService service, IStringLocalizer<App.Resources.Views.Shared> l)
24 {
25 _service = service;
26 _l = l;
27 }
28
29 public async Task<IActionResult> Index(string? search)
30 {
31 var items = await _service.GetAllAsync(search);
32
33 var vm = new AdminWishlistIndexViewModel
34 {
35 Title = _l["Wishlist"].Value,
36 Items = items.OrderByDescending(w => w.Id).ToList(),
37 CurrentSearch = search
38 };
39 return View(vm);
40 }
41
42 public async Task<IActionResult> Details(Guid id)
43 {
44 var item = await _service.GetByIdAsync(id);
45 if (item == null) return NotFound();
46
47 return View(new AdminDetailsViewModel<TripWishlistItemBllDto>
48 {
49 Title = _l["Wishlist item details"].Value,
50 Item = item
51 });
52 }
53
54 public async Task<IActionResult> Create()
55 {
56 var vm = new AdminWishlistFormViewModel
57 {
58 Title = _l["New wishlist item"].Value,
59 TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name"),
60 UserList = new SelectList((await _service.GetUsersAsync()).Select(u => new { u.Id, Name = u.FirstName + " " + u.LastName }).ToList(), "Id", "Name")
61 };
62 return View(vm);
63 }
64
65 [HttpPost]
66 [ValidateAntiForgeryToken]
67 public async Task<IActionResult> Create(AdminWishlistFormViewModel vm)
68 {
69 if (ModelState.IsValid)
70 {
71 await _service.CreateAsync(vm.Item);
72 return RedirectToAction(nameof(Index));
73 }
74 vm.Title = _l["New wishlist item"].Value;
75 vm.TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name");
76 vm.UserList = new SelectList((await _service.GetUsersAsync()).Select(u => new { u.Id, Name = u.FirstName + " " + u.LastName }).ToList(), "Id", "Name");
77 return View(vm);
78 }
79
80 public async Task<IActionResult> Edit(Guid id)
81 {
82 var item = await _service.GetByIdAsync(id);
83 if (item == null) return NotFound();
84 var vm = new AdminWishlistFormViewModel
85 {
86 Title = _l["Edit wishlist item"].Value,
87 Item = item,
88 TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name"),
89 UserList = new SelectList((await _service.GetUsersAsync()).Select(u => new { u.Id, Name = u.FirstName + " " + u.LastName }).ToList(), "Id", "Name")
90 };
91 return View(vm);
92 }
93
94 [HttpPost]
95 [ValidateAntiForgeryToken]
96 public async Task<IActionResult> Edit(Guid id, AdminWishlistFormViewModel vm)
97 {
98 if (id != vm.Item.Id) return NotFound();
99 if (ModelState.IsValid)
100 {
101 await _service.UpdateAsync(vm.Item);
102 return RedirectToAction(nameof(Index));
103 }
104 vm.Title = _l["Edit wishlist item"].Value;
105 vm.TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name");
106 vm.UserList = new SelectList((await _service.GetUsersAsync()).Select(u => new { u.Id, Name = u.FirstName + " " + u.LastName }).ToList(), "Id", "Name");
107 return View(vm);
108 }
109
110 public async Task<IActionResult> Delete(Guid id)
111 {
112 var item = await _service.GetByIdAsync(id);
113 if (item == null) return NotFound();
114
115 return View(new AdminDeleteViewModel<TripWishlistItemBllDto>
116 {
117 Title = _l["Delete wishlist item"].Value,
118 Item = item
119 });
120 }
121
122 [HttpPost, ActionName("Delete")]
123 [ValidateAntiForgeryToken]
124 public async Task<IActionResult> DeleteConfirmed(Guid id)
125 {
126 await _service.DeleteAsync(id);
127 return RedirectToAction(nameof(Index));
128 }
129 }
130