profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
PollsController.cs 4,408 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 PollsController : Controller
19 {
20 private readonly IPollAdminService _service;
21 private readonly IStringLocalizer<App.Resources.Views.Shared> _l;
22
23 public PollsController(IPollAdminService 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 polls = await _service.GetAllAsync(search);
32
33 var vm = new AdminPollIndexViewModel
34 {
35 Title = _l["Polls"].Value,
36 Items = polls.OrderByDescending(p => p.Id).ToList(),
37 CurrentSearch = search
38 };
39 return View(vm);
40 }
41
42 public async Task<IActionResult> Details(Guid id)
43 {
44 var poll = await _service.GetByIdAsync(id);
45 if (poll == null) return NotFound();
46
47 return View(new AdminDetailsViewModel<TripPollBllDto>
48 {
49 Title = _l["Poll details"].Value,
50 Item = poll
51 });
52 }
53
54 public async Task<IActionResult> Create()
55 {
56 var vm = new AdminPollFormViewModel
57 {
58 Title = _l["New poll"].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(AdminPollFormViewModel vm)
68 {
69 if (ModelState.IsValid)
70 {
71 await _service.CreateAsync(vm.Poll);
72 return RedirectToAction(nameof(Index));
73 }
74 vm.Title = _l["New poll"].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 poll = await _service.GetByIdAsync(id);
83 if (poll == null) return NotFound();
84 var vm = new AdminPollFormViewModel
85 {
86 Title = _l["Edit poll"].Value,
87 Poll = poll,
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, AdminPollFormViewModel vm)
97 {
98 if (id != vm.Poll.Id) return NotFound();
99 if (ModelState.IsValid)
100 {
101 await _service.UpdateAsync(vm.Poll);
102 return RedirectToAction(nameof(Index));
103 }
104 vm.Title = _l["Edit poll"].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 poll = await _service.GetByIdAsync(id);
113 if (poll == null) return NotFound();
114
115 return View(new AdminDeleteViewModel<TripPollBllDto>
116 {
117 Title = _l["Delete poll"].Value,
118 Item = poll
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