From 5c0eb222a489926560cb9df498e1ee0ef021776b Mon Sep 17 00:00:00 2001 From: Dimitar Byalkov Date: Wed, 29 Mar 2023 22:46:46 +0200 Subject: [PATCH] view announcements, users by page number --- .../HouseData/Managers/UserManager.cs | 4 +++ .../HouseData/Models/Announcement.cs | 2 +- .../HouseData/Models/Comment.cs | 2 +- .../HouseData/Models/Complaint.cs | 2 +- .../HouseData/Models/Event.cs | 2 +- .../HouseData/Models/GenericMessage.cs | 8 ++++- .../HouseData/Models/User.cs | 4 +-- .../Repositories/AnnouncementRepository.cs | 36 +++++++++++++++++-- .../HouseData/Repositories/UserRepository.cs | 33 ++++++++++++++++- .../WebApp/Pages/Announcement.cshtml | 19 ++++++++++ .../WebApp/Pages/Announcement.cshtml.cs | 5 ++- .../WebApp/Pages/Announcements.cshtml | 34 +++++++++++++----- .../WebApp/Pages/Announcements.cshtml.cs | 9 ++++- .../WebApp/Pages/Login.cshtml.cs | 2 +- 14 files changed, 141 insertions(+), 21 deletions(-) diff --git a/StudentHouseDashboard/HouseData/Managers/UserManager.cs b/StudentHouseDashboard/HouseData/Managers/UserManager.cs index 76ac731..0a8fa7a 100644 --- a/StudentHouseDashboard/HouseData/Managers/UserManager.cs +++ b/StudentHouseDashboard/HouseData/Managers/UserManager.cs @@ -25,6 +25,10 @@ namespace StudentHouseDashboard.Managers { return userRepository.GetUserById(id); } + public List GetUsersByPage(int? p, int? c) + { + return userRepository.GetUsersByPage(p, c); + } public bool CreateUser(string name, string password, UserRole role) { return userRepository.CreateUser(name, password, role); diff --git a/StudentHouseDashboard/HouseData/Models/Announcement.cs b/StudentHouseDashboard/HouseData/Models/Announcement.cs index 5b7b6b3..c020318 100644 --- a/StudentHouseDashboard/HouseData/Models/Announcement.cs +++ b/StudentHouseDashboard/HouseData/Models/Announcement.cs @@ -7,7 +7,7 @@ namespace StudentHouseDashboard.Models { public class Announcement : GenericMessage, IVotable { - public Announcement(User author, string description, string title, DateTime publishDate, bool isImportant, bool isSticky) : base(author, description, title, publishDate) + public Announcement(int id, User author, string description, string title, DateTime publishDate, bool isImportant, bool isSticky) : base(id, author, description, title, publishDate) { IsImportant = isImportant; IsSticky = isSticky; diff --git a/StudentHouseDashboard/HouseData/Models/Comment.cs b/StudentHouseDashboard/HouseData/Models/Comment.cs index f3f7b69..ca76440 100644 --- a/StudentHouseDashboard/HouseData/Models/Comment.cs +++ b/StudentHouseDashboard/HouseData/Models/Comment.cs @@ -7,7 +7,7 @@ namespace StudentHouseDashboard.Models { public class Comment : GenericMessage, IVotable { - public Comment(User author, string description, string title, DateTime publishDate) : base(author, description, title, publishDate) + public Comment(int id, User author, string description, string title, DateTime publishDate) : base(id, author, description, title, publishDate) { } diff --git a/StudentHouseDashboard/HouseData/Models/Complaint.cs b/StudentHouseDashboard/HouseData/Models/Complaint.cs index 8700a2c..21a9bd9 100644 --- a/StudentHouseDashboard/HouseData/Models/Complaint.cs +++ b/StudentHouseDashboard/HouseData/Models/Complaint.cs @@ -7,7 +7,7 @@ namespace StudentHouseDashboard.Models { public class Complaint : GenericMessage { - public Complaint(User author, string description, string title, DateTime publishDate, ComplaintStatus status, ComplaintSeverity severity) : base(author, description, title, publishDate) + public Complaint(int id, User author, string description, string title, DateTime publishDate, ComplaintStatus status, ComplaintSeverity severity) : base(id, author, description, title, publishDate) { Status = status; Severity = severity; diff --git a/StudentHouseDashboard/HouseData/Models/Event.cs b/StudentHouseDashboard/HouseData/Models/Event.cs index 8823179..3d161e6 100644 --- a/StudentHouseDashboard/HouseData/Models/Event.cs +++ b/StudentHouseDashboard/HouseData/Models/Event.cs @@ -7,7 +7,7 @@ namespace StudentHouseDashboard.Models { public class Event : GenericMessage { - public Event(User author, string description, string title, DateTime publishDate, DateTime startDate, DateTime endDate) : base(author, description, title, publishDate) + public Event(int id, User author, string description, string title, DateTime publishDate, DateTime startDate, DateTime endDate) : base(id, author, description, title, publishDate) { StartDate = startDate; EndDate = endDate; diff --git a/StudentHouseDashboard/HouseData/Models/GenericMessage.cs b/StudentHouseDashboard/HouseData/Models/GenericMessage.cs index 3ba7d1b..7592308 100644 --- a/StudentHouseDashboard/HouseData/Models/GenericMessage.cs +++ b/StudentHouseDashboard/HouseData/Models/GenericMessage.cs @@ -13,14 +13,20 @@ namespace StudentHouseDashboard private string title; private DateTime publishDate; - protected GenericMessage(User author, string description, string title, DateTime publishDate) + protected GenericMessage(int id, User author, string description, string title, DateTime publishDate) { + ID = id; Author = author; Description = description; Title = title; PublishDate = publishDate; } + public int ID + { + get; private set; + } + public User Author { get => author; diff --git a/StudentHouseDashboard/HouseData/Models/User.cs b/StudentHouseDashboard/HouseData/Models/User.cs index 5f892d5..89a529d 100644 --- a/StudentHouseDashboard/HouseData/Models/User.cs +++ b/StudentHouseDashboard/HouseData/Models/User.cs @@ -15,7 +15,7 @@ namespace StudentHouseDashboard.Models public User(int id, string name, string password, UserRole role) { - Id = id; + ID = id; Name = name; Password = password; Role = role; @@ -24,7 +24,7 @@ namespace StudentHouseDashboard.Models { } - public int Id + public int ID { get; private set; } diff --git a/StudentHouseDashboard/HouseData/Repositories/AnnouncementRepository.cs b/StudentHouseDashboard/HouseData/Repositories/AnnouncementRepository.cs index 55d7297..8eefef6 100644 --- a/StudentHouseDashboard/HouseData/Repositories/AnnouncementRepository.cs +++ b/StudentHouseDashboard/HouseData/Repositories/AnnouncementRepository.cs @@ -29,7 +29,7 @@ namespace StudentHouseDashboard.Repositories } public List GetAllAnnouncements() { - var announcements = new List(); + List announcements = new List(); UserManager userManager = new UserManager(); using (SqlConnection conn = CreateConnection()) { @@ -40,7 +40,8 @@ namespace StudentHouseDashboard.Repositories while (reader.Read()) { // ID, Name, Password, Role - announcements.Add(new Announcement(userManager.GetUserById(Convert.ToInt32(reader["ID"])), + announcements.Add(new Announcement(Convert.ToInt32(reader["ID"]), + userManager.GetUserById(Convert.ToInt32(reader["Author"])), reader["Description"].ToString(), reader["Title"].ToString(), (DateTime)reader["PublishDate"], (bool)reader["IsImportant"], (bool)reader["IsSticky"])); @@ -49,5 +50,36 @@ namespace StudentHouseDashboard.Repositories } return announcements; } + public List GetAnnouncementsByPage(int? p, int? c) + { + List announcements = new List(); + UserManager userManager = new UserManager(); + if (c == null) + { + c = 10; + } + if (p == null) + { + p = 0; + } + using (SqlConnection conn = CreateConnection()) + { + string sql = "SELECT TOP(@count) * FROM Users WHERE ID > @start;"; + SqlCommand sqlCommand = new SqlCommand(sql, conn); + sqlCommand.Parameters.AddWithValue("@start", p * c); + sqlCommand.Parameters.AddWithValue("@count", c); + var reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + announcements.Add(new Announcement(Convert.ToInt32(reader["ID"]), + userManager.GetUserById(Convert.ToInt32(reader["Author"])), + reader["Description"].ToString(), reader["Title"].ToString(), + (DateTime)reader["PublishDate"], (bool)reader["IsImportant"], + (bool)reader["IsSticky"])); + } + + } + return announcements; + } } } diff --git a/StudentHouseDashboard/HouseData/Repositories/UserRepository.cs b/StudentHouseDashboard/HouseData/Repositories/UserRepository.cs index 66e4ef0..e738a63 100644 --- a/StudentHouseDashboard/HouseData/Repositories/UserRepository.cs +++ b/StudentHouseDashboard/HouseData/Repositories/UserRepository.cs @@ -48,7 +48,7 @@ namespace StudentHouseDashboard.Repositories (UserRole)reader["Role"]) ); } - conn.Close(); + } return users; } @@ -62,6 +62,7 @@ namespace StudentHouseDashboard.Repositories var reader = cmd.ExecuteReader(); reader.Read(); + // ID, Name, Password, Role return new User(Convert.ToInt32(reader["ID"]), reader["Name"].ToString(), @@ -69,6 +70,33 @@ namespace StudentHouseDashboard.Repositories (UserRole)reader["Role"]); } } + public List GetUsersByPage(int? p, int? c) + { + List users = new List(); + if (c == null) + { + c = 0; + } + if (p == null) + { + p = 0; + } + using (SqlConnection conn = CreateConnection()) + { + string sql = "SELECT TOP(@count) * FROM Users WHERE ID > @start;"; + SqlCommand sqlCommand = new SqlCommand(sql, conn); + sqlCommand.Parameters.AddWithValue("@start", p * c); + sqlCommand.Parameters.AddWithValue("@count", c); + var reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + users.Add(new User(Convert.ToInt32(reader["ID"]), reader["Name"].ToString(), + reader["Password"].ToString(), (UserRole)reader["Role"])); + } + + } + return users; + } public bool CreateUser(string name, string password, UserRole role) { using (SqlConnection conn = CreateConnection()) @@ -79,6 +107,7 @@ namespace StudentHouseDashboard.Repositories cmd.Parameters.AddWithValue("@pass", password); cmd.Parameters.AddWithValue("@role", (int)role); int writer = cmd.ExecuteNonQuery(); + if (writer == 1) { return true; @@ -99,6 +128,7 @@ namespace StudentHouseDashboard.Repositories cmd.Parameters.AddWithValue("@role", (int)role); cmd.Parameters.AddWithValue("@id", id); int writer = cmd.ExecuteNonQuery(); + if (writer == 1) { return true; @@ -116,6 +146,7 @@ namespace StudentHouseDashboard.Repositories SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@id", id); int writer = cmd.ExecuteNonQuery(); + if (writer == 1) { return true; diff --git a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml index aade10c..bfecd60 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml +++ b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml @@ -1,4 +1,23 @@ @page +@using StudentHouseDashboard.Models; @model WebApp.Pages.AnnouncementModel @{ + User user = (User)ViewData["user"]; + ViewData["Title"] = $"User {user.Name}"; } +

@user.Name

+
+
+
+

Name:

+

Password:

+

Role:

+
+
+

@user.Name

+

@user.Password

+

@user.Role.ToString()

+
+
+
+ diff --git a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml.cs index 703589b..84e8773 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml.cs +++ b/StudentHouseDashboard/WebApp/Pages/Announcement.cshtml.cs @@ -1,12 +1,15 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using StudentHouseDashboard.Managers; namespace WebApp.Pages { public class AnnouncementModel : PageModel { - public void OnGet() + public void OnGet(int id) { + UserManager userManager = new UserManager(); + ViewData.Add("user", userManager.GetUserById(id)); } } } diff --git a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml index 596e222..608c2d0 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml +++ b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml @@ -1,15 +1,33 @@ @page +@using StudentHouseDashboard.Models; @model WebApp.Pages.AnnouncementsModel @{ ViewData["Title"] = "Announcements"; + List users = (List)ViewData["users"]; } -
-
-
Card title
-
Card subtitle
-

Some quick example text to build on the card title and make up the bulk of the card's content.

- Card link - Another link +@foreach (User user in users) +{ +
+
+
@user.Role.ToString()
+
@user.Name
+

@user.Password

+ More details +
-
+} + + diff --git a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml.cs index 98595e8..e6cb448 100644 --- a/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml.cs +++ b/StudentHouseDashboard/WebApp/Pages/Announcements.cshtml.cs @@ -1,12 +1,19 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using StudentHouseDashboard.Managers; namespace WebApp.Pages { public class AnnouncementsModel : PageModel { - public void OnGet() + public AnnouncementManager AnnouncementManager { get; set; } + public UserManager UserManager { get; set; } + public void OnGet(int? p, int? c) { + UserManager = new UserManager(); + ViewData.Add("users", UserManager.GetUsersByPage(p, c)); + ViewData.Add("page", p); + ViewData.Add("allCount", UserManager.GetAllUsers().Count()); } } } diff --git a/StudentHouseDashboard/WebApp/Pages/Login.cshtml.cs b/StudentHouseDashboard/WebApp/Pages/Login.cshtml.cs index cd37796..ef4dc1f 100644 --- a/StudentHouseDashboard/WebApp/Pages/Login.cshtml.cs +++ b/StudentHouseDashboard/WebApp/Pages/Login.cshtml.cs @@ -23,7 +23,7 @@ namespace WebApp.Pages if (item.Name == MyUser.Name && BCrypt.Net.BCrypt.Verify(MyUser.Password, item.Password)) { MyUser = item; - ViewData["confirm"] = $"Welcome, {MyUser.Name}! {MyUser.Id}, {MyUser.Password}, {MyUser.Role}"; + ViewData["confirm"] = $"Welcome, {MyUser.Name}! {MyUser.ID}, {MyUser.Password}, {MyUser.Role}"; } }