Refactoring: Added interfaces, custom exceptions, UserManager unit tests, dependency injection/inversion; Regex match search by date, keywords
This commit is contained in:
@@ -3,16 +3,23 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Logic;
|
||||
using Models;
|
||||
using Data;
|
||||
|
||||
namespace WebApp.Pages
|
||||
{
|
||||
[Authorize]
|
||||
public class AnnouncementModel : PageModel
|
||||
{
|
||||
private readonly IAnnouncementRepository _announcementRepository;
|
||||
|
||||
public AnnouncementModel(IAnnouncementRepository announcementRepository)
|
||||
{
|
||||
_announcementRepository = announcementRepository;
|
||||
}
|
||||
public void OnGet(int id)
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
ViewData.Add("announcement", announcementManager.GetAllAnnouncements().Where(x => x.ID == id).First());
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(_announcementRepository);
|
||||
ViewData.Add("announcement", announcementManager.GetAllAnnouncements().First(x => x.ID == id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,12 +4,26 @@
|
||||
@model WebApp.Pages.AnnouncementsModel
|
||||
@{
|
||||
ViewData["Title"] = "Announcements";
|
||||
List<Announcement> announcements = ((List<Announcement>)ViewData["announcements"]).OrderByDescending(x => x.PublishDate).OrderByDescending(x => x.IsSticky).ToList();
|
||||
int currentPage = @Convert.ToInt32(ViewData["page"]);
|
||||
List<Announcement> announcements = ((List<Announcement>)ViewData["announcements"]).OrderByDescending(x => x.IsSticky).ToList();
|
||||
int currentPage = 0;
|
||||
if (ViewData["page"] != null)
|
||||
{
|
||||
currentPage = Convert.ToInt32(ViewData["page"]);
|
||||
}
|
||||
}
|
||||
|
||||
<a href="./CreateAnnouncement" class="btn btn-primary">Create new announcement</a>
|
||||
|
||||
<form method="get">
|
||||
<div class="form-actions no-color">
|
||||
<p>
|
||||
<input type="hidden" name="handler" value="search" />
|
||||
<input type="text" name="s" />
|
||||
<input type="submit" asp-page-handler="Search" value="Search" class="btn btn-default" />
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="mb-3 mt-3">
|
||||
@foreach (Announcement announcement in announcements)
|
||||
{
|
||||
@@ -27,7 +41,9 @@
|
||||
}
|
||||
</div>
|
||||
|
||||
<nav aria-label="Page navigation">
|
||||
@if (ViewData["page"] != null)
|
||||
{
|
||||
<nav aria-label="Page navigation">
|
||||
<ul class="pagination justify-content-center">
|
||||
@if (currentPage <= 1)
|
||||
{
|
||||
@@ -57,4 +73,5 @@
|
||||
@: </li>
|
||||
}
|
||||
</ul>
|
||||
</nav>
|
||||
</nav>
|
||||
}
|
@@ -11,21 +11,33 @@ namespace WebApp.Pages
|
||||
public class AnnouncementsModel : PageModel
|
||||
{
|
||||
public AnnouncementManager AnnouncementManager { get; set; }
|
||||
public void OnGet(int? p, int? c)
|
||||
private readonly IAnnouncementRepository _announcementRepository;
|
||||
|
||||
public AnnouncementsModel(IAnnouncementRepository announcementRepository)
|
||||
{
|
||||
AnnouncementManager = new AnnouncementManager();
|
||||
if (p == null || p < 1)
|
||||
_announcementRepository = announcementRepository;
|
||||
}
|
||||
|
||||
public void OnGet(int? p, int? c) // page, count
|
||||
{
|
||||
AnnouncementManager = new AnnouncementManager(_announcementRepository);
|
||||
if (!(p < 0))
|
||||
{
|
||||
p = 1;
|
||||
}
|
||||
if (c == null || c < 1)
|
||||
if (!(c < 1))
|
||||
{
|
||||
c = 10;
|
||||
}
|
||||
ViewData.Add("announcements", AnnouncementManager.GetAnnouncementsByPage(p - 1, c));
|
||||
ViewData.Add("announcements", AnnouncementManager.GetAnnouncementsByPage(p.Value - 1, c.Value));
|
||||
ViewData.Add("page", p);
|
||||
ViewData.Add("count", c);
|
||||
ViewData.Add("allCount", AnnouncementManager.GetAllAnnouncements().Count());
|
||||
ViewData.Add("allCount", AnnouncementManager.GetAllAnnouncements().Count);
|
||||
}
|
||||
public void OnGetSearch(string s) // search
|
||||
{
|
||||
AnnouncementManager = new AnnouncementManager(_announcementRepository);
|
||||
ViewData.Add("announcements", AnnouncementManager.SearchAnnouncements(s));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using Data;
|
||||
using Logic;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -29,7 +30,7 @@ namespace WebApp.Pages
|
||||
}
|
||||
public void OnPost()
|
||||
{
|
||||
UserManager userManager = new UserManager();
|
||||
UserManager userManager = new UserManager(new UserRepository());
|
||||
User user = userManager.GetUserById(int.Parse(User.FindFirstValue("id")));
|
||||
if (NewPassword == null)
|
||||
{
|
||||
|
@@ -1,3 +1,4 @@
|
||||
using Data;
|
||||
using Logic;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -17,8 +18,8 @@ namespace WebApp.Pages
|
||||
}
|
||||
public IActionResult OnPost()
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
UserManager userManager = new UserManager();
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(new AnnouncementRepository());
|
||||
UserManager userManager = new UserManager(new UserRepository());
|
||||
User user = userManager.GetUserById(int.Parse(User.FindFirstValue("id")));
|
||||
announcementManager.CreateAnnouncement(Announcement.Title, Announcement.Description, user, DateTime.Now, Announcement.IsImportant, Announcement.IsSticky);
|
||||
return RedirectToPage("Announcements");
|
||||
|
@@ -10,11 +10,17 @@ namespace WebApp.Pages
|
||||
[Authorize]
|
||||
public class DeleteAnnouncementModel : PageModel
|
||||
{
|
||||
private readonly IAnnouncementRepository _announcementRepository;
|
||||
|
||||
public DeleteAnnouncementModel(IAnnouncementRepository announcementRepository)
|
||||
{
|
||||
_announcementRepository = announcementRepository;
|
||||
}
|
||||
[BindProperty]
|
||||
public int AnnouncementId { get; set; }
|
||||
public void OnGet(int id)
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(_announcementRepository);
|
||||
if (id != null)
|
||||
{
|
||||
Announcement announcement = announcementManager.GetAnnouncementById(id);
|
||||
@@ -26,7 +32,7 @@ namespace WebApp.Pages
|
||||
}
|
||||
public IActionResult OnPost()
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(_announcementRepository);
|
||||
announcementManager.DeleteAnnouncement(AnnouncementId);
|
||||
return RedirectToPage("Announcements");
|
||||
}
|
||||
|
@@ -10,11 +10,17 @@ namespace WebApp.Pages
|
||||
[Authorize]
|
||||
public class EditAnnouncementModel : PageModel
|
||||
{
|
||||
private readonly IAnnouncementRepository _announcementRepository;
|
||||
|
||||
public EditAnnouncementModel(IAnnouncementRepository announcementRepository)
|
||||
{
|
||||
_announcementRepository = announcementRepository;
|
||||
}
|
||||
[BindProperty]
|
||||
public Announcement Announcement { get; set; }
|
||||
public void OnGet(int id)
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(_announcementRepository);
|
||||
if (id != null)
|
||||
{
|
||||
Announcement announcement = announcementManager.GetAnnouncementById(id);
|
||||
@@ -26,7 +32,7 @@ namespace WebApp.Pages
|
||||
}
|
||||
public IActionResult OnPost()
|
||||
{
|
||||
AnnouncementManager announcementManager = new AnnouncementManager();
|
||||
AnnouncementManager announcementManager = new AnnouncementManager(_announcementRepository);
|
||||
announcementManager.UpdateAnnouncement(Announcement.ID, Announcement.Title, Announcement.Description, Announcement.IsImportant, Announcement.IsSticky);
|
||||
return RedirectToPage("Announcements");
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Models;
|
||||
using Logic;
|
||||
using System.Security.Claims;
|
||||
using Data;
|
||||
|
||||
namespace WebApp.Pages
|
||||
{
|
||||
@@ -19,7 +20,7 @@ namespace WebApp.Pages
|
||||
|
||||
public IActionResult OnPost(string? returnUrl)
|
||||
{
|
||||
var userManager = new UserManager();
|
||||
var userManager = new UserManager(new UserRepository());
|
||||
User? user = userManager.AuthenticatedUser(MyUser.Name, MyUser.Password);
|
||||
if (user != null)
|
||||
{
|
||||
|
@@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Logic;
|
||||
using Models;
|
||||
using Data;
|
||||
|
||||
namespace WebApp.Pages
|
||||
{
|
||||
@@ -14,8 +15,8 @@ namespace WebApp.Pages
|
||||
}
|
||||
public void OnPost()
|
||||
{
|
||||
var userManager = new UserManager();
|
||||
if (userManager.CreateUser(MyUser.Name, BCrypt.Net.BCrypt.HashPassword(MyUser.Password), MyUser.Role))
|
||||
var userManager = new UserManager(new UserRepository());
|
||||
if (userManager.CreateUser(MyUser.Name, BCrypt.Net.BCrypt.HashPassword(MyUser.Password), MyUser.Role) != null)
|
||||
{
|
||||
ViewData["confirm"] = $"Successfully registered {MyUser.Name}!";
|
||||
}
|
||||
|
@@ -1,3 +1,5 @@
|
||||
using Data;
|
||||
using Logic;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
|
||||
namespace WebApp
|
||||
@@ -16,6 +18,10 @@ namespace WebApp
|
||||
options.AccessDeniedPath = new PathString("/Error/401");
|
||||
});
|
||||
|
||||
builder.Services.AddScoped<IUserRepository, UserRepository>();
|
||||
builder.Services.AddScoped<ICommentRepository, CommentRepository>();
|
||||
builder.Services.AddScoped<IAnnouncementRepository, AnnouncementRepository>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
|
@@ -22,6 +22,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Data\Data.csproj" />
|
||||
<ProjectReference Include="..\Logic\Logic.csproj" />
|
||||
<ProjectReference Include="..\Models\Models.csproj" />
|
||||
</ItemGroup>
|
||||
|
Reference in New Issue
Block a user