Skip to content
This repository was archived by the owner on Jun 9, 2024. It is now read-only.

Commit c270b30

Browse files
committed
OracleSQL Project Complete & Tested
1 parent 1991cca commit c270b30

13 files changed

Lines changed: 136 additions & 127 deletions

src/main/java/EJB/FineOracleBean.java

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -205,21 +205,23 @@ public void checkIssueFine(int loanId) {
205205
// Calculate the fine cost
206206
double fineCost = 2.5 * daysDifferenceInt;
207207

208-
String insertFine = "INSERT INTO fines"
209-
+ "(LOAN_ID, FINE_AMOUNT, FINE_DATE, PAID)" + "VALUES ("
210-
+ loanId + ","
211-
+ fineCost + ","
212-
+ "CURRENT_TIMESTAMP,"
213-
+ "0)";
214-
215-
Statement stmt2 = null;
216-
try {
217-
stmt2 = con.createStatement();
218-
System.out.println(insertFine);
219-
stmt2.executeUpdate(insertFine);
220-
stmt2.close();
221-
} catch(SQLException e) {
222-
e.printStackTrace();
208+
if(fineCost > 0) {
209+
String insertFine = "INSERT INTO fines"
210+
+ "(LOAN_ID, FINE_AMOUNT, FINE_DATE, PAID)" + "VALUES ("
211+
+ loanId + ","
212+
+ fineCost + ","
213+
+ "CURRENT_TIMESTAMP,"
214+
+ "0)";
215+
216+
Statement stmt2 = null;
217+
try {
218+
stmt2 = con.createStatement();
219+
System.out.println(insertFine);
220+
stmt2.executeUpdate(insertFine);
221+
stmt2.close();
222+
} catch(SQLException e) {
223+
e.printStackTrace();
224+
}
223225
}
224226
}
225227
} catch(SQLException e) {
@@ -240,44 +242,45 @@ public void markAsPaid(int fineId) {
240242
}
241243
}
242244

243-
/* public ArrayList<fineModel> geFineReportForCustomer(ObjectId customerId, Date startDate, Date endDate) {
244-
// Client
245-
MongoClient mongo = mongoClientProviderBean.getMongoClient();
246-
// Get DB
247-
MongoDatabase db = mongo.getDatabase("library");
248-
// Get loans
249-
MongoCollection<Document> fines = db.getCollection("fines");
250-
MongoCollection<Document> loans = db.getCollection("loans");
251-
MongoCollection<Document> books = db.getCollection("books");
252-
MongoCollection<Document> users = db.getCollection("users");
253-
254-
Bson matchStage = Aggregates.match(
255-
Filters.and(
256-
Filters.eq("user_id", customerId), // Filter loans by customer ID
257-
Filters.gte("fine_date", startDate), // Filter fine_date >= startDate
258-
Filters.lte("fine_date", endDate) // Filter fine_date <= endDate
259-
)
260-
);
261-
262-
List<Bson> pipeline = Arrays.asList(
263-
matchStage,
264-
Aggregates.lookup("books", "book_id", "_id", "bookData"),
265-
Aggregates.lookup("users", "user_id", "_id", "userData"),
266-
267-
Aggregates.unwind("$bookData"),
268-
Aggregates.unwind("$userData"),
269-
Aggregates.project(
270-
Projections.fields(
271-
Projections.include("paid"), // Include loan-specific fields
272-
Projections.include("fine_amount"),
273-
Projections.include("fine_date"),
274-
Projections.computed("id", new Document("$toString", "$_id")), // Convert _id to a string
275-
Projections.computed("bookData.Title", "$bookData.Title"), // Include book title
276-
Projections.computed("bookData.Author", "$bookData.Author")
277-
)
278-
)
279-
);
280-
// Execute the aggregation and return the result as an AggregateIterable<Document>
281-
return fines.aggregate(pipeline);
282-
}*/
245+
public ArrayList<fineModel> geFineReportForCustomer(int customerId, Date startDate, Date endDate) {
246+
String query = "SELECT f.FINE_ID, f.FINE_AMOUNT, f.FINE_DATE, f.PAID, " +
247+
"b.TITLE, u.LAST_NAME, u.FIRST_NAME, " +
248+
"a.FIRST_NAME AS AUTHOR_FIRST_NAME, a.LAST_NAME AS AUTHOR_LAST_NAME " +
249+
"FROM fines f " +
250+
"INNER JOIN loans l ON l.LOAN_ID = f.LOAN_ID " +
251+
"INNER JOIN books b ON b.BOOK_ID = l.BOOK_ID " +
252+
"INNER JOIN AUTHORS a ON a.AUTHOR_ID = b.AUTHOR_ID " +
253+
"INNER JOIN LIBRARY_USERS u ON u.USER_ID = l.USER_ID " +
254+
"WHERE l.USER_ID = ? AND f.FINE_DATE >= ? AND f.FINE_DATE <= ?";
255+
256+
ArrayList<fineModel> fineList = new ArrayList<>();
257+
258+
try (Connection con = oracleClientProviderBean.getOracleClient();
259+
PreparedStatement pstmt = con.prepareStatement(query)) {
260+
261+
pstmt.setInt(1, customerId);
262+
pstmt.setObject(2, new java.sql.Date(startDate.getTime()));
263+
pstmt.setObject(3, new java.sql.Date(endDate.getTime()));
264+
265+
try (ResultSet rs = pstmt.executeQuery()) {
266+
while (rs.next()) {
267+
fineModel fine = new fineModel();
268+
fine.setFineId(rs.getLong("FINE_ID"));
269+
fine.setFineAmount(rs.getDouble("FINE_AMOUNT"));
270+
fine.setFineDate(rs.getDate("FINE_DATE"));
271+
fine.setPaid(rs.getBoolean("PAID"));
272+
fine.setBookTitle(rs.getString("TITLE"));
273+
fine.setUserFirstName(rs.getString("FIRST_NAME"));
274+
fine.setUserLastName(rs.getString("LAST_NAME"));
275+
fine.setAuthorFirstName(rs.getString("AUTHOR_FIRST_NAME"));
276+
fine.setAuthorLastName(rs.getString("AUTHOR_LAST_NAME"));
277+
fineList.add(fine);
278+
}
279+
}
280+
} catch (SQLException e) {
281+
e.printStackTrace();
282+
}
283+
284+
return fineList;
285+
}
283286
}

src/main/java/EJB/LoanOracleBean.java

Lines changed: 36 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -153,62 +153,52 @@ public ArrayList<loanModel> getActiveLoans() {
153153
return null;
154154
}
155155

156-
public ArrayList<loanModel> geLoanReportForCustomer(int customerId, Date startDate, Date endDate) {
157-
String query = "SELECT l.LOAN_ID LOAN_ID," +
158-
"l.BOOK_ID BOOK_ID," +
159-
"l.USER_ID USER_ID," +
160-
"l.RETURN_BY RETURN_BY," +
161-
"l.RETURNED_ON RETURNED_ON," +
162-
"l.RETURNED RETURNED," +
163-
"u.FIRST_NAME FIRST_NAME," +
164-
"u.LAST_NAME LAST_NAME," +
165-
"u.EMAIL EMAIL," +
166-
"b.TITLE TITLE," +
167-
"b.ISBN ISBN," +
168-
"b.PAGES PAGES," +
169-
"a.FIRST_NAME AUTHOR_FIRST_NAME," +
170-
"a.LAST_NAME AUTHOR_LAST_NAME FROM loans l " +
171-
"WHERE l.USER_ID = " + customerId + " " +
172-
"AND l.RETURN_BY >= " + startDate + " " +
173-
"AND l.RETURN_BY =< " + endDate + " " +
156+
public ArrayList<loanModel> getLoanReportForCustomer(int customerId, Date startDate, Date endDate) {
157+
String query = "SELECT l.LOAN_ID, l.BOOK_ID, l.USER_ID, l.RETURN_BY, l.RETURNED_ON, l.RETURNED, " +
158+
"u.FIRST_NAME, u.LAST_NAME, u.EMAIL, b.TITLE, b.ISBN, b.PAGES, " +
159+
"a.FIRST_NAME AS AUTHOR_FIRST_NAME, a.LAST_NAME AS AUTHOR_LAST_NAME " +
160+
"FROM loans l " +
174161
"INNER JOIN library_users u ON l.user_id = u.user_id " +
175162
"INNER JOIN books b ON b.book_id = l.book_id " +
176-
"INNER JOIN authors a ON b.author_id = a.author_id";
177-
ArrayList loans_list = new ArrayList();
178-
Statement stmt = null;
163+
"INNER JOIN authors a ON b.author_id = a.author_id " +
164+
"WHERE l.USER_ID = ? AND l.RETURN_BY >= ? AND l.RETURN_BY <= ?";
179165

180-
try {
181-
Connection con = oracleClientProviderBean.getOracleClient();
182-
stmt = con.createStatement();
183-
ResultSet rs = stmt.executeQuery(query);
166+
ArrayList<loanModel> loansList = new ArrayList<>();
184167

185-
while (rs.next()) {
186-
loanModel loan = new loanModel();
187-
loan.setLoanId(rs.getLong("LOAN_ID"));
188-
loan.setBookId(rs.getLong("BOOK_ID"));
189-
loan.setUserId(rs.getLong("USER_ID"));
190-
loan.setReturnBy(rs.getDate("RETURN_BY"));
191-
loan.setReturnedOn(rs.getDate("RETURNED_ON"));
192-
loan.setReturned(rs.getBoolean("RETURNED"));
193-
loan.setUserFirstName(rs.getString("FIRST_NAME"));
194-
loan.setUserLastName(rs.getString("LAST_NAME"));
195-
loan.setUserEmail(rs.getString("EMAIL"));
196-
loan.setBookTitle(rs.getString("TITLE"));
197-
loan.setBookIsbn(rs.getLong("ISBN"));
198-
loan.setAuthorFirstName(rs.getString("AUTHOR_FIRST_NAME"));
199-
loan.setAuthorLastName(rs.getString("AUTHOR_LAST_NAME"));
200-
loans_list.add(loan);
168+
try (Connection con = oracleClientProviderBean.getOracleClient();
169+
PreparedStatement pstmt = con.prepareStatement(query)) {
170+
171+
pstmt.setInt(1, customerId);
172+
pstmt.setObject(2, new java.sql.Date(startDate.getTime()));
173+
pstmt.setObject(3, new java.sql.Date(endDate.getTime()));
174+
175+
try (ResultSet rs = pstmt.executeQuery()) {
176+
while (rs.next()) {
177+
loanModel loan = new loanModel();
178+
loan.setLoanId(rs.getLong("LOAN_ID"));
179+
loan.setBookId(rs.getLong("BOOK_ID"));
180+
loan.setUserId(rs.getLong("USER_ID"));
181+
loan.setReturnBy(rs.getDate("RETURN_BY"));
182+
loan.setReturnedOn(rs.getDate("RETURNED_ON"));
183+
loan.setReturned(rs.getBoolean("RETURNED"));
184+
loan.setUserFirstName(rs.getString("FIRST_NAME"));
185+
loan.setUserLastName(rs.getString("LAST_NAME"));
186+
loan.setUserEmail(rs.getString("EMAIL"));
187+
loan.setBookTitle(rs.getString("TITLE"));
188+
loan.setBookIsbn(rs.getLong("ISBN"));
189+
loan.setAuthorFirstName(rs.getString("AUTHOR_FIRST_NAME"));
190+
loan.setAuthorLastName(rs.getString("AUTHOR_LAST_NAME"));
191+
loansList.add(loan);
192+
}
201193
}
202-
203-
stmt.close();
204-
return loans_list;
205-
} catch(SQLException e) {
194+
} catch (SQLException e) {
206195
e.printStackTrace();
207196
}
208197

209-
return null;
198+
return loansList;
210199
}
211200

201+
212202
public void returnBook(int loanId) {
213203
Connection con = oracleClientProviderBean.getOracleClient();
214204
String insertLoan = "UPDATE loans SET returned = 1, returned_on = CURRENT_TIMESTAMP WHERE loan_id = ?";
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import Objects.bookModel;
24
import com.google.gson.Gson;
35
import EJB.BookOracleBean;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1+
package Endpoints;
2+
13
import Objects.UserModel;
24
import com.google.gson.Gson;
35
import jakarta.ejb.EJB;
4-
import EJB.UserOracleBean;
56
import jakarta.servlet.ServletException;
67
import jakarta.servlet.annotation.WebServlet;
78
import jakarta.servlet.http.HttpServlet;
89
import jakarta.servlet.http.HttpServletRequest;
910
import jakarta.servlet.http.HttpServletResponse;
10-
11+
import EJB.UserOracleBean;
1112
import java.io.IOException;
1213
import java.io.PrintWriter;
1314
import java.util.ArrayList;
1415

15-
@WebServlet(name = "Books", value = "/users")
16-
public class Users extends HttpServlet {
16+
@WebServlet(name = "users", value = "/users")
17+
public class Customers extends HttpServlet {
1718
@EJB
1819
UserOracleBean userBean;
1920

@@ -31,7 +32,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t
3132
out.print(jsonArray);
3233
out.flush();
3334
}
34-
3535
@Override
3636
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3737

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import Objects.fineModel;
24
import com.google.gson.Gson;
35
import jakarta.ejb.EJB;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import EJB.LoanOracleBean;
24
import EJB.BookOracleBean;
35
import Objects.loanModel;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import EJB.BookOracleBean;
24
import EJB.LoanOracleBean;
35
import EJB.FineOracleBean;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import Objects.fineModel;
24
import com.google.gson.Gson;
35
import jakarta.ejb.EJB;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import Objects.bookModel;
24
import com.google.gson.Gson;
35
import jakarta.ejb.EJB;
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package Endpoints;
2+
13
import Objects.fineModel;
24
import com.google.gson.Gson;
35
import jakarta.ejb.EJB;
@@ -14,7 +16,7 @@
1416
import java.util.Calendar;
1517
import java.util.Date;
1618

17-
@WebServlet(name = "loan-report", value = "/fine-report")
19+
@WebServlet(name = "fine-report", value = "/fine-report")
1820
public class fineReport extends HttpServlet {
1921
@EJB
2022
FineOracleBean fineBean;
@@ -23,18 +25,18 @@ public class fineReport extends HttpServlet {
2325
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2426
response.setContentType("application/json");
2527

26-
ObjectId customerId = new ObjectId(request.getParameter("id"));
28+
int customerId = Integer.parseInt(request.getParameter("id"));
2729
String date = request.getParameter("date");
2830

2931
Date[] convertedDate = getFirstAndLastDayOfMonth(date);
3032

3133
PrintWriter out = response.getWriter();
32-
//ArrayList<fineModel> result = fineBean.geFineReportForCustomer(customerId, convertedDate[0], convertedDate[1]);
34+
ArrayList<fineModel> result = fineBean.geFineReportForCustomer(customerId, convertedDate[0], convertedDate[1]);
3335

3436
Gson gson = new Gson();
35-
//String jsonArray = gson.toJson(result);
37+
String jsonArray = gson.toJson(result);
3638

37-
//out.print(jsonArray);
39+
out.print(jsonArray);
3840
out.flush();
3941
}
4042

0 commit comments

Comments
 (0)