Skip to content

Commit ea35bf8

Browse files
committed
feat: Add validation for controllers
- add try-catch blocks - recieve toastr messages when error occurred
1 parent 15056f4 commit ea35bf8

File tree

8 files changed

+208
-85
lines changed

8 files changed

+208
-85
lines changed

src/CoinyProject.Application/AlbumServices/Services/AlbumService.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,7 @@ public async Task<IEnumerable<AlbumGetDTO>> GetAllAlbumsDTO(string? userId)
9999

100100
public async Task<IEnumerable<AlbumGetForViewDTO>> GetAllAlbumsForView(string? userId)
101101
{
102-
if (userId == null)
103-
throw new ArgumentNullException("userId is null");
104-
105-
var albums = await _unitOfWork.Albums.GetAllAlbumsWithElementsAndFavoritesForView(userId);
102+
var albums = await _unitOfWork.Albums.GetAllAlbumsWithElementsAndFavoritesForView();
106103

107104
if (albums == null)
108105
throw new ArgumentNullException("albums is null");

src/CoinyProject.Infrastructure.Data/Repositories/Interfaces/IAlbumRepository.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace CoinyProject.Infrastructure.Data.Repositories.Interfaces
1010
public interface IAlbumRepository : IBaseRepository<Album>
1111
{
1212
Task<IEnumerable<Album>?> GetAllAlbumsWithElements(string? userId);
13-
Task<IEnumerable<Album>?> GetAllAlbumsWithElementsAndFavoritesForView(string? userId);
13+
Task<IEnumerable<Album>?> GetAllAlbumsWithElementsAndFavoritesForView();
1414
Task<Album?> GetAlbumWithElementsById(int? id);
1515
Task<Album?> GetAlbumWithAuthorCheck(int? id, string? currentUserId);
1616
Task<Album?> GetAlbumById(int? id);

src/CoinyProject.Infrastructure.Data/Repositories/Realization/AlbumRepository.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public AlbumRepository(ApplicationDBContext dBContext) : base(dBContext)
4747
.ToListAsync();
4848
}
4949

50-
public async Task<IEnumerable<Album>?> GetAllAlbumsWithElementsAndFavoritesForView(string? userId)
50+
public async Task<IEnumerable<Album>?> GetAllAlbumsWithElementsAndFavoritesForView()
5151
{
5252
return await _dBContext.Albums
5353
.Include(x => x.Elements)

src/CoinyProject.WebUI/Controllers/AlbumController.cs

+74-18
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Microsoft.AspNetCore.Http;
1010
using Microsoft.AspNetCore.Identity;
1111
using Microsoft.AspNetCore.Mvc;
12+
using Microsoft.Extensions.Localization;
1213
using System.Security.Claims;
1314
using System.Xml.Linq;
1415

@@ -19,24 +20,44 @@ public class AlbumController : Controller
1920
{
2021
private readonly IAlbumService _albumService;
2122
private readonly UserManager<User> _userManager;
23+
private readonly IStringLocalizer<AlbumController> _localizer;
2224

23-
public AlbumController(IAlbumService albumService, UserManager<User> userManager)
25+
public AlbumController(IAlbumService albumService, UserManager<User> userManager,
26+
IStringLocalizer<AlbumController> localizer)
2427
{
2528
_albumService = albumService;
2629
_userManager = userManager;
30+
_localizer = localizer;
2731
}
2832

2933
public async Task<ActionResult> Index()
3034
{
31-
var albums = await _albumService.GetAllAlbumsDTO(_userManager.GetUserId(User));
32-
return View(albums);
35+
try
36+
{
37+
var albums = await _albumService.GetAllAlbumsDTO(_userManager.GetUserId(User));
38+
return View(albums);
39+
}
40+
catch
41+
{
42+
TempData["error"] = Convert.ToString(_localizer["Error getting albums"]);
43+
return RedirectToAction("Index", "Home");
44+
}
45+
3346
}
3447

3548
[ActionName("Get")]
36-
public async Task<ActionResult> GetAlbum(int id)
49+
public async Task<ActionResult> GetAlbum(int? id)
3750
{
38-
var album = await _albumService.GetAlbumById(id);
39-
return View(album);
51+
try
52+
{
53+
var album = await _albumService.GetAlbumById(id);
54+
return View(album);
55+
}
56+
catch
57+
{
58+
TempData["error"] = Convert.ToString(_localizer["Error getting album"]);
59+
return RedirectToAction("Index");
60+
}
4061
}
4162

4263
public ActionResult Create()
@@ -45,29 +66,64 @@ public ActionResult Create()
4566
}
4667

4768
[HttpPost]
48-
public async Task<ActionResult> Create(AlbumCreating album)
69+
public async Task<ActionResult> Create(AlbumCreating? album)
4970
{
50-
var albumId = await _albumService.AddAlbum(album, _userManager.GetUserId(User));
51-
return RedirectToAction("Create", "AlbumElement", new { id = albumId });
71+
try
72+
{
73+
var albumId = await _albumService.AddAlbum(album, _userManager.GetUserId(User));
74+
TempData["success"] = Convert.ToString(_localizer["Album successfully created"]);
75+
return RedirectToAction("Create", "AlbumElement", new { id = albumId });
76+
}
77+
catch
78+
{
79+
TempData["error"] = Convert.ToString(_localizer["Error creating album"]);
80+
return RedirectToAction("Create", "Album");
81+
}
5282
}
5383

54-
public async Task<ActionResult> Edit(int id)
84+
public async Task<ActionResult> Edit(int? id)
5585
{
56-
var album = await _albumService.GetAlbumForEdit(id, _userManager.GetUserId(User));
57-
return View(album);
86+
try
87+
{
88+
var album = await _albumService.GetAlbumForEdit(id, _userManager.GetUserId(User));
89+
return View(album);
90+
}
91+
catch
92+
{
93+
TempData["error"] = Convert.ToString(_localizer["Error getting album"]);
94+
return RedirectToAction("Index", "Home");
95+
}
5896
}
5997

6098
[HttpPost]
61-
public async Task<ActionResult> Edit(AlbumEditDTO album)
99+
public async Task<ActionResult> Edit(AlbumEditDTO? album)
62100
{
63-
await _albumService.UpdateAlbum(album);
64-
return RedirectToAction("Index");
101+
try
102+
{
103+
await _albumService.UpdateAlbum(album);
104+
TempData["success"] = Convert.ToString(_localizer["Album successfully updated"]);
105+
return RedirectToAction("Index");
106+
}
107+
catch
108+
{
109+
TempData["error"] = Convert.ToString(_localizer["Error updating album"]);
110+
return RedirectToAction("Index");
111+
}
65112
}
66113

67-
public async Task<ActionResult> Delete(int id)
114+
public async Task<ActionResult> Delete(int? id)
68115
{
69-
await _albumService.DeleteAlbum(id, _userManager.GetUserId(User));
70-
return RedirectToAction("Index");
116+
try
117+
{
118+
await _albumService.DeleteAlbum(id, _userManager.GetUserId(User));
119+
TempData["success"] = Convert.ToString(_localizer["Album successfully deleted"]);
120+
return RedirectToAction("Index");
121+
}
122+
catch
123+
{
124+
TempData["error"] = Convert.ToString(_localizer["Error deleting album"]);
125+
return RedirectToAction("Index");
126+
}
71127
}
72128

73129
}

src/CoinyProject.WebUI/Controllers/AlbumElementController.cs

+46-15
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public AlbumElementController(IAlbumService albumService,
2828
_userManager = userManager;
2929
}
3030

31-
public IActionResult Create(int id)
31+
public IActionResult Create(int? id)
3232
{
3333
TempData["AlbumId"] = id.ToString();
3434
return View();
@@ -37,36 +37,67 @@ public IActionResult Create(int id)
3737
[HttpPost]
3838
public async Task<IActionResult> Create(AlbumElementCreating element)
3939
{
40-
await _albumService.AddAlbumElement(element);
41-
TempData["success"] = Convert.ToString(_localizer["Album element successfully created"]);
40+
try
41+
{
42+
await _albumService.AddAlbumElement(element);
43+
TempData["success"] = Convert.ToString(_localizer["Album element successfully created"]);
4244

43-
return RedirectToAction("Create");
45+
return RedirectToAction("Create");
46+
}
47+
catch
48+
{
49+
TempData["error"] = Convert.ToString(_localizer["Error creating album element"]);
50+
return RedirectToAction("Create");
51+
}
52+
4453
}
4554

4655
public async Task<ActionResult> Edit(int id)
4756
{
48-
var album = await _albumService.GetAlbumElementForEdit(id, _userManager.GetUserId(User));
49-
50-
return View(album);
57+
try
58+
{
59+
var album = await _albumService.GetAlbumElementForEdit(id, _userManager.GetUserId(User));
60+
return View(album);
61+
}
62+
catch
63+
{
64+
TempData["error"] = Convert.ToString(_localizer["Error getting album element"]);
65+
return RedirectToAction("Index", "Home");
66+
}
5167
}
5268

5369
[HttpPost]
5470
public async Task<ActionResult> Edit(AlbumElementEditDTO album)
5571
{
56-
var id = await _albumService.UpdateAlbumElement(album);
72+
try
73+
{
74+
var id = await _albumService.UpdateAlbumElement(album);
5775

58-
TempData["success"] = Convert.ToString(_localizer["Album element successfully updated"]);
59-
return RedirectToAction("Get","Album", new { id });
76+
TempData["success"] = Convert.ToString(_localizer["Album element successfully updated"]);
77+
return RedirectToAction("Get", "Album", new { id });
78+
}
79+
catch
80+
{
81+
TempData["error"] = Convert.ToString(_localizer["Error updating album element"]);
82+
return RedirectToAction("Index", "Home");
83+
}
84+
6085
}
6186

6287
public async Task<ActionResult> Delete(int id)
6388
{
64-
var albumId = await _albumService.DeleteAlbumElement(id, _userManager.GetUserId(User));
89+
try
90+
{
91+
var albumId = await _albumService.DeleteAlbumElement(id, _userManager.GetUserId(User));
6592

66-
TempData["success"] = Convert.ToString(_localizer["Album element successfully deleted"]);
67-
return RedirectToAction("Get", "Album", new { id = albumId });
93+
TempData["success"] = Convert.ToString(_localizer["Album element successfully deleted"]);
94+
return RedirectToAction("Get", "Album", new { id = albumId });
95+
}
96+
catch
97+
{
98+
TempData["error"] = Convert.ToString(_localizer["Error getting album element"]);
99+
return RedirectToAction("Index", "Home");
100+
}
68101
}
69-
70-
71102
}
72103
}

src/CoinyProject.WebUI/Controllers/DiscussionController.cs

+59-20
Original file line numberDiff line numberDiff line change
@@ -4,64 +4,103 @@
44
using Microsoft.AspNetCore.Authorization;
55
using Microsoft.AspNetCore.Identity;
66
using Microsoft.AspNetCore.Mvc;
7+
using Microsoft.Extensions.Localization;
78
using System.Security.Claims;
89

910
namespace CoinyProject.WebUI.Controllers
1011
{
11-
[Authorize]
1212
public class DiscussionController : Controller
1313
{
1414
private readonly IDiscussionService _discussionService;
1515
private readonly UserManager<User> _userManager;
16-
public DiscussionController(IDiscussionService discussionService, UserManager<User> userManager)
16+
private readonly IStringLocalizer<DiscussionController> _localizer;
17+
public DiscussionController(IDiscussionService discussionService, UserManager<User> userManager,
18+
IStringLocalizer<DiscussionController> localizer)
1719
{
1820
_discussionService = discussionService;
1921
_userManager = userManager;
22+
_localizer = localizer;
2023
}
2124

2225
public async Task<IActionResult> Index()
2326
{
24-
var discussions = await _discussionService.GetAllDiscussionsForView();
25-
return View(discussions);
27+
try
28+
{
29+
var discussions = await _discussionService.GetAllDiscussionsForView();
30+
return View(discussions);
31+
}
32+
catch
33+
{
34+
TempData["error"] = _localizer["An error occurred while loading discussions"];
35+
return RedirectToAction("Index", "Home");
36+
}
37+
2638
}
2739

40+
[Authorize]
2841
public async Task<IActionResult> Create()
2942
{
30-
ViewBag.AvailableTopics = await _discussionService.GetAvailableTopics();
31-
return View();
43+
try
44+
{
45+
ViewBag.AvailableTopics = await _discussionService.GetAvailableTopics();
46+
return View();
47+
}
48+
catch
49+
{
50+
TempData["error"] = _localizer["An error occurred while loading topics"];
51+
return RedirectToAction("Index");
52+
}
53+
3254
}
3355

34-
[HttpPost]
35-
public async Task<IActionResult> Create(DiscussionCreateDTO discussion)
56+
[HttpPost, Authorize]
57+
public async Task<IActionResult> Create(DiscussionCreateDTO? discussion)
3658
{
37-
await _discussionService.AddDiscussion(discussion, _userManager.GetUserId(User));
38-
39-
TempData["success"] = "Discussion successfully created";
40-
return RedirectToAction("Index", "Discussion");
59+
try
60+
{
61+
await _discussionService.AddDiscussion(discussion, _userManager.GetUserId(User));
4162

63+
TempData["success"] = "Discussion successfully created";
64+
return RedirectToAction("Index", "Discussion");
65+
}
66+
catch
67+
{
68+
TempData["error"] = _localizer["An error occurred while creating discussion"];
69+
return RedirectToAction("Index");
70+
}
4271
}
4372

44-
public async Task<IActionResult> Get(int id)
73+
[Authorize]
74+
public async Task<IActionResult> Get(int? id)
4575
{
46-
if (id != 0)
76+
try
4777
{
4878
var discussin = await _discussionService.GetDiscussionById(id);
4979
ViewBag.UserId = _userManager.GetUserId(User);
5080

5181
return View(discussin);
5282
}
53-
return NotFound();
54-
83+
catch
84+
{
85+
TempData["error"] = _localizer["An error occurred while loading discussion"];
86+
return RedirectToAction("Index");
87+
}
5588
}
56-
[HttpPost]
57-
public async Task<IActionResult> Get([FromBody] DiscussionMessageCreateDTO dataToSend)
89+
90+
[HttpPost, Authorize]
91+
public async Task<IActionResult> Get([FromBody] DiscussionMessageCreateDTO? dataToSend)
5892
{
59-
if (ModelState.IsValid)
93+
try
6094
{
6195
await _discussionService.AddDiscussionMessage(dataToSend);
6296
return Ok();
6397
}
64-
return BadRequest();
98+
catch
99+
{
100+
TempData["error"] = _localizer["An error occurred while sending message"];
101+
return RedirectToAction("Index");
102+
}
103+
65104
}
66105

67106
}

0 commit comments

Comments
 (0)