Skip to content

Commit 90fb4c9

Browse files
Suzune (#147)
* feat(user/admin): add extend request manager and request extend book * feat(user/admin): add extend request manager and request extend book * feat(user/admin): improve bussiness logic for extent book and use email service to handle request of user
1 parent 262a56d commit 90fb4c9

18 files changed

+277
-38
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3+
* Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template
4+
*/
5+
package com.library.controller.admin;
6+
7+
import com.library.factory.ServiceFactory;
8+
import com.library.model.dto.ExtendRequestViewDTO;
9+
import com.library.service.BookService;
10+
import com.library.service.ExtendBookService;
11+
import com.library.service.UserService;
12+
import com.library.util.MailTransfer;
13+
import java.io.IOException;
14+
import java.io.PrintWriter;
15+
import jakarta.servlet.ServletException;
16+
import jakarta.servlet.annotation.WebServlet;
17+
import jakarta.servlet.http.HttpServlet;
18+
import jakarta.servlet.http.HttpServletRequest;
19+
import jakarta.servlet.http.HttpServletResponse;
20+
import jakarta.servlet.http.HttpSession;
21+
import java.util.List;
22+
23+
/**
24+
*
25+
* @author hieuchu
26+
*/
27+
@WebServlet(name = "ApproveRequestController", urlPatterns = {"/admin/approve-request"})
28+
public class ApproveRequestController extends HttpServlet {
29+
30+
private final UserService userService = ServiceFactory.getUserService();
31+
private final ExtendBookService extendSerivce = ServiceFactory.getExtendBookService();
32+
private final BookService bookService = ServiceFactory.getBookService();
33+
34+
@Override
35+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
36+
throws ServletException, IOException {
37+
HttpSession session = request.getSession(false);
38+
List<ExtendRequestViewDTO> list = (List<ExtendRequestViewDTO>) session.getAttribute("extendDTO");
39+
session.removeAttribute("extendDTO");
40+
String account = request.getParameter("account");
41+
String coverImage = request.getParameter("cover");
42+
int userID = userService.getUserIDByAccount(account);
43+
String bookTitle = request.getParameter("title");
44+
int bookID = bookService.getBookIDByCover(coverImage);
45+
String status = "approved";
46+
String imageUrl = "https://raw.githubusercontent.com/Suzune705/deploy-image/master/" + coverImage;
47+
48+
extendSerivce.updateRequestStatus(userID, status);
49+
String message = "<p>Your extension request has been approved.</p>"
50+
+ "<p>Book: <b>" + bookTitle + "</b></p>"
51+
+ "<img src='" + imageUrl + "' style='width:150px;'>"
52+
+ "<p>Thank you!</p>";
53+
String subject = "Your Book Extension Request Has Been Approved";
54+
MailTransfer.send(account, subject, message);
55+
response.sendRedirect(request.getContextPath() + "/admin/extend-request-manger");
56+
57+
}
58+
59+
@Override
60+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
61+
throws ServletException, IOException {
62+
63+
}
64+
65+
}

src/java/com/library/controller/admin/ExtendRequestManagerController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import jakarta.servlet.http.HttpServlet;
1515
import jakarta.servlet.http.HttpServletRequest;
1616
import jakarta.servlet.http.HttpServletResponse;
17+
import jakarta.servlet.http.HttpSession;
1718
import java.util.List;
1819

1920
/**
@@ -29,8 +30,10 @@ public class ExtendRequestManagerController extends HttpServlet {
2930
protected void doGet(HttpServletRequest request, HttpServletResponse response)
3031
throws ServletException, IOException {
3132

33+
HttpSession session = request.getSession();
3234
List<ExtendRequestViewDTO> list = extendSerivce.getAllExtendRequests();
3335
request.setAttribute("list", list);
36+
session.setAttribute("extendDTO", list);
3437
request.getRequestDispatcher("/WEB-INF/views/admin/extend_request_manager.jsp").forward(request, response);
3538
}
3639

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3+
* Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template
4+
*/
5+
package com.library.controller.admin;
6+
7+
import com.library.factory.ServiceFactory;
8+
import com.library.model.dto.ExtendRequestViewDTO;
9+
import com.library.service.BookService;
10+
import com.library.service.ExtendBookService;
11+
import com.library.service.UserService;
12+
import com.library.util.MailTransfer;
13+
import java.io.IOException;
14+
import java.io.PrintWriter;
15+
import jakarta.servlet.ServletException;
16+
import jakarta.servlet.annotation.WebServlet;
17+
import jakarta.servlet.http.HttpServlet;
18+
import jakarta.servlet.http.HttpServletRequest;
19+
import jakarta.servlet.http.HttpServletResponse;
20+
import jakarta.servlet.http.HttpSession;
21+
import java.util.List;
22+
23+
/**
24+
*
25+
* @author hieuchu
26+
*/
27+
@WebServlet(name = "RejectRequestController", urlPatterns = {"/admin/reject-request"})
28+
public class RejectRequestController extends HttpServlet {
29+
30+
private final UserService userService = ServiceFactory.getUserService();
31+
private final ExtendBookService extendSerivce = ServiceFactory.getExtendBookService();
32+
private final BookService bookService = ServiceFactory.getBookService();
33+
34+
@Override
35+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
36+
throws ServletException, IOException {
37+
HttpSession session = request.getSession(false);
38+
List<ExtendRequestViewDTO> list = (List<ExtendRequestViewDTO>) session.getAttribute("extendDTO");
39+
session.removeAttribute("extendDTO");
40+
String account = request.getParameter("account");
41+
String coverImage = request.getParameter("cover");
42+
int userID = userService.getUserIDByAccount(account);
43+
String bookTitle = request.getParameter("title");
44+
int bookID = bookService.getBookIDByCover(coverImage);
45+
String imageUrl = "https://raw.githubusercontent.com/Suzune705/deploy-image/master/" + coverImage;
46+
String message = "<p>Your extension request has been <b style='color:red'>rejected</b>.</p>"
47+
+ "<p>Book: <b>" + bookTitle + "</b></p>"
48+
+ "<img src='" + imageUrl + "' style='width:150px;'>";
49+
String subject = "Your Book Extension Request Has Been Rejected";
50+
MailTransfer.send(account, subject, message);
51+
response.sendRedirect(request.getContextPath() + "/admin/extend-request-manger");
52+
53+
}
54+
55+
@Override
56+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
57+
throws ServletException, IOException {
58+
59+
}
60+
61+
}

src/java/com/library/controller/borrowing/BorrowedBooksListController.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ public class BorrowedBooksListController extends HttpServlet {
3030
@Override
3131
protected void doGet(HttpServletRequest request, HttpServletResponse response)
3232
throws ServletException, IOException {
33-
HttpSession session = request.getSession(false);
34-
33+
HttpSession session = request.getSession(false);
34+
session.removeAttribute("targetBookID");
35+
3536
String account = (String) session.getAttribute("account");
36-
37+
3738
List<BorrowedBookDTO> borrowedBooks = borrowDao.borrowedBooksList(account);
38-
39+
3940
request.setAttribute("borrowedBooks", borrowedBooks);
4041
request.getRequestDispatcher("/WEB-INF/views/borrowing/borrowedbooks.jsp").forward(request, response);
4142
}

src/java/com/library/controller/filter/AutholizationURLController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ public static final String[] pageForAdmin() {
5353
"/admin/user/delete",
5454
"/admin/user/logout",
5555
"/admin/users/logout-all",
56-
"/admin/extend-request-manger"
56+
"/admin/extend-request-manger",
57+
"/admin/approve-request",
58+
"/admin/reject-request"
5759
};
5860
return tmp ;
5961
}

src/java/com/library/controller/admin/ConfirmExtendController.java renamed to src/java/com/library/controller/user/RequestExtendController.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
33
* Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template
44
*/
5-
package com.library.controller.admin;
5+
package com.library.controller.user;
66

77
import com.library.enums.RequestStatus;
88
import com.library.factory.ServiceFactory;
@@ -30,7 +30,7 @@
3030
* @author hieuchu
3131
*/
3232
@WebServlet(name = "ConfirmExtendController", urlPatterns = {"/user/request-extend-book"})
33-
public class ConfirmExtendController extends HttpServlet {
33+
public class RequestExtendController extends HttpServlet {
3434

3535
private final ExtendBookService extendSerivce = ServiceFactory.getExtendBookService();
3636
private final BorrowingService borrowService = ServiceFactory.getBorrowService();
@@ -63,12 +63,10 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
6363
ExtendRequestDTO e = new ExtendRequestDTO();
6464
e.setBorrowing(borrow);
6565
e.setUser(u);
66-
if (extendSerivce.limitExtend(dto.getBookID(), account) > 4) {
67-
extendSerivce.insertData(e);
68-
session.removeAttribute("bookExtend");
69-
session.removeAttribute("targetBookID");
70-
response.sendRedirect(request.getContextPath() + "/user/dashboard");
71-
}
66+
extendSerivce.insertData(e);
67+
session.removeAttribute("bookExtend");
68+
session.removeAttribute("targetBookID");
69+
response.sendRedirect(request.getContextPath() + "/user/dashboard");
7270

7371
}
7472

src/java/com/library/dao/BookDao.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,5 @@ public interface BookDao {
4646
int insertBook(Book b);
4747
Map<String, Integer> countingBorrowedBookByCategory();
4848

49+
int getBookID(String title);
4950
}

src/java/com/library/dao/BookDaoImpl.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class BookDaoImpl implements BookDao {
3232
private static final Logger logger = LoggerFactory.getLogger(BookDaoImpl.class);
3333

3434
@Override
35-
public List<Book> getAllBook(){
35+
public List<Book> getAllBook() {
3636
List<Book> list = new ArrayList<>();
3737
String sql = " SELECT b.book_id, b.title ,b.slug, b.author, b.quantity, c.category_id AS category_ID , c.name as category_name , b.cover_image FROM books b LEFT JOIN categories c ON b.category_id = c.category_id ";
3838
logger.debug("Executing SQL : ", sql);
@@ -47,7 +47,7 @@ public List<Book> getAllBook(){
4747
b.setCoverImage(rs.getString("cover_image"));
4848

4949
Category category = new Category();
50-
category.setCategoryID(rs.getInt("category_ID"));
50+
category.setCategoryID(rs.getInt("category_ID"));
5151
category.setType(BookType.convert(rs.getString("category_name")));
5252
b.setCategory(category);
5353
list.add(b);
@@ -326,9 +326,7 @@ public Map<String, Integer> countingBorrowedBookByCategory() {
326326
+ "join categories on categories.category_id = books.category_id\n"
327327
+ "group by categories.name";
328328

329-
try (Connection conn = DBConnection.getInstance().getConnection();
330-
PreparedStatement ps = conn.prepareStatement(sql);
331-
ResultSet rs = ps.executeQuery()) {
329+
try (Connection conn = DBConnection.getInstance().getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) {
332330
while (rs.next()) {
333331
map.put(rs.getString("name"), rs.getInt("totalBorrowed"));
334332
}
@@ -338,4 +336,22 @@ public Map<String, Integer> countingBorrowedBookByCategory() {
338336
return map;
339337
}
340338

339+
@Override
340+
public int getBookID(String coverImage) {
341+
String sql = "select book_id from books\n"
342+
+ "where cover_image = ? ";
343+
try (
344+
Connection conn = DBConnection.getInstance().getConnection();
345+
PreparedStatement ps = conn.prepareStatement(sql)){
346+
ps.setString(1, coverImage);
347+
ResultSet rs = ps.executeQuery() ;
348+
while (rs.next()) {
349+
return rs.getInt("book_id");
350+
}
351+
} catch (SQLException e) {
352+
e.printStackTrace();
353+
}
354+
return -1;
355+
}
356+
341357
}

src/java/com/library/dao/BorrowingDaoImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public int totalReturnedBooks(String account) {
7272
@Override
7373
public List<BorrowedBookDTO> borrowedBooksList(String account) {
7474
List<BorrowedBookDTO> list = new ArrayList<>();
75-
String sql = "SELECT bk.cover_image, b.borrow_date, b.due_date, bk.slug , bk.book_id , bk.title "
75+
String sql = "SELECT bk.cover_image, b.borrow_date, b.due_date, bk.slug , bk.book_id , bk.title , b.extend_count "
7676
+ "FROM borrowings b "
7777
+ "JOIN users u ON u.user_id = b.user_id "
7878
+ "JOIN books bk ON bk.book_id = b.book_id "
@@ -89,6 +89,7 @@ public List<BorrowedBookDTO> borrowedBooksList(String account) {
8989
dto.setDueDate(rs.getDate("due_date").toLocalDate());
9090
dto.setCoverImage(rs.getString("cover_image"));
9191
dto.setName(rs.getString("title"));
92+
dto.setExtendTime(rs.getInt("extend_count"));
9293
list.add(dto);
9394
}
9495
} catch (SQLException s) {

src/java/com/library/dao/ExtendRequestDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@
1616
public interface ExtendRequestDao {
1717
boolean insertExtendRequest(ExtendRequestDTO request) ;
1818
List<ExtendRequestViewDTO> getAllExtendRequests();
19+
boolean hasUserSentRequest(int borrowingID , int userID );
20+
void updateStatus(int userID, String status);
1921
}

0 commit comments

Comments
 (0)