From c2e898cb7fd5bd4a5101fab7b54edce909c79dba Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 22:41:19 +0000 Subject: [PATCH 1/6] Add SQL queries for media item counts, checked out pages, and guest checkout records --- .../src/main/resources/queries/lindaquinoa.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 lesson_25/db/db_app/src/main/resources/queries/lindaquinoa.sql diff --git a/lesson_25/db/db_app/src/main/resources/queries/lindaquinoa.sql b/lesson_25/db/db_app/src/main/resources/queries/lindaquinoa.sql new file mode 100644 index 000000000..6ad4104f6 --- /dev/null +++ b/lesson_25/db/db_app/src/main/resources/queries/lindaquinoa.sql @@ -0,0 +1,17 @@ +-- Query 1: Count of media items by type +SELECT type, COUNT(*) as item_count +FROM media_items +GROUP BY type +ORDER BY type; + +-- Query 2: Sum of total pages checked out by guests +SELECT SUM(mi.pages) as total_pages_checked_out +FROM checked_out_items coi +JOIN media_items mi ON coi.item_id = mi.id +WHERE mi.pages IS NOT NULL; + +-- Query 3: All 5 guests with corresponding checked_out_items records +SELECT g.type, g.name, g.email, coi.item_id, coi.due_date +FROM guests g +LEFT JOIN checked_out_items coi ON g.email = coi.email +ORDER BY g.name, coi.due_date; From 2f277957c95ba3574c684889de97fb9e72166003 Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 22:48:58 +0000 Subject: [PATCH 2/6] Add library_users table with sample user data - Create library_users table with id, email, first_name, last_name, password fields - Add 5 sample users with bcrypt encoded passwords - Table uses UUID for id and enforces email uniqueness --- .../db_app/src/main/resources/sqlite/data.db | Bin 16384 -> 28672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lesson_25/db/db_app/src/main/resources/sqlite/data.db b/lesson_25/db/db_app/src/main/resources/sqlite/data.db index 8baa982d2b27c50808a4c569a14c47972c41a695..0a55ae712fd260f4e4bc9589bf15a8c7fb5ecfdd 100644 GIT binary patch delta 1471 zcmb7@QBTuQ6vx|jWsKNfA&_MunwpRd6UNrjvMn)&fkig9funT-G0Pph!VT>T?ZEY^ z%m<&h58<;C9{m))7~eGU(dcKeg~2RHtWBEq-2dslzjMz2o}7>;-^lLdXo4V!kn>(X z_j@yQ(F8HO+GE%vF~o!k@R#FdUxzj;ch4ri;-_OTClDn71s@DShXV) z8Kx(omnu?DmN+@LSd=)A#7&QI9By#3^g`y=EBR8cvdOJVn={Tb(jZnZl=7O)m6c+V zQ_A^gisY)VY;2gVS`%u>o8yWqyj41YrukYo`bS=FJn}F*HWVqvNCGz-sBIpqxP@x) zsHLCBH4k(x<%apIVnf+c|Nruyt%jU_51*~GANVoG`J|a`0$A)X7Bk!-0^Jo{acv#<^Xffnjr@Km1wU*e&6mJ&4pN@EDu7cf`JR zG6R+%=?-Sn7Yh#?8uoB(Km+a-^u6X^d-CX?4!PnOaSaRv0(=4Q!CUYW2xkwtpKPxy z+S8Om`mrzVGf@coOq`?K#F~$@Q-K(zgncCP7j(|*k7^mXo^(#nE fPzmzJbqHRrdfZ7xsWf@vk!x-Vj8lp5joJMM0Bx)6 delta 59 zcmZp8z}V2hI6+!amw|zS1&ColcA}24ur7n1_e5Tx5Hnv01HT>LeZG**iVBZ-H;3@8 GF$4fGP78_v From c4cea849555d775954980c8691cda21a741de4b7 Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 22:52:03 +0000 Subject: [PATCH 3/6] Create LibraryUserModel JPA entity - Add LibraryUserModel following LibraryGuestModel pattern - Map to library_users table with proper JPA annotations - Include id, email, firstName, lastName, password fields - Use @Column annotations for snake_case database field mapping --- .../lesson25/models/LibraryUserModel.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java new file mode 100644 index 000000000..195fe165a --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java @@ -0,0 +1,22 @@ +package com.codedifferently.lesson25.models; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name = "library_users") +public class LibraryUserModel { + + @Id public String id; + public String email; + + @Column(name = "first_name") + public String firstName; + + @Column(name = "last_name") + public String lastName; + + public String password; +} From 4cc056d76dbc125afca69b8eb1090ae9f24e7c7c Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 23:00:48 +0000 Subject: [PATCH 4/6] Create LibraryUserRepository interface - Add LibraryUserRepository following LibraryGuestRepository pattern - Extends CrudRepository - Override findAll() method to return List - Enables Spring Data JPA integration for user data access --- .../lesson25/repository/LibraryUserRepository.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java new file mode 100644 index 000000000..63091849b --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java @@ -0,0 +1,11 @@ +package com.codedifferently.lesson25.repository; + +import com.codedifferently.lesson25.models.LibraryUserModel; +import java.util.List; +import org.springframework.data.repository.CrudRepository; + +public interface LibraryUserRepository extends CrudRepository { + + @Override + List findAll(); +} From d86597982b1b1d9c33d97747cc570dca626944f3 Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 23:50:03 +0000 Subject: [PATCH 5/6] Integrate LibraryUserModel into data loading system - Add users field to LibraryDataModel with getUsers() method - Wire LibraryUserRepository into LibraryDbDataLoader - Load users alongside media items and guests in loadData() - Complete integration following existing patterns --- .../lesson25/factory/LibraryDbDataLoader.java | 3 +++ .../codedifferently/lesson25/models/LibraryDataModel.java | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java index b897de124..ac4f60e62 100644 --- a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java @@ -2,6 +2,7 @@ import com.codedifferently.lesson25.models.LibraryDataModel; import com.codedifferently.lesson25.repository.LibraryGuestRepository; +import com.codedifferently.lesson25.repository.LibraryUserRepository; import com.codedifferently.lesson25.repository.MediaItemRepository; import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +14,7 @@ public final class LibraryDbDataLoader implements LibraryDataLoader { @Autowired private MediaItemRepository mediaItemsRepository; @Autowired private LibraryGuestRepository libraryGuestRepository; + @Autowired private LibraryUserRepository libraryUserRepository; @Override public LibraryDataModel loadData() throws IOException { @@ -20,6 +22,7 @@ public LibraryDataModel loadData() throws IOException { model.mediaItems = mediaItemsRepository.findAll(); model.guests = libraryGuestRepository.findAll(); + model.users = libraryUserRepository.findAll(); return model; } diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryDataModel.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryDataModel.java index 6c268f962..d34036997 100644 --- a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryDataModel.java +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryDataModel.java @@ -17,6 +17,7 @@ public class LibraryDataModel { public List mediaItems; public List guests; + public List users; public List getMediaItems() { List results = new ArrayList<>(); @@ -52,6 +53,10 @@ public List getGuests() { return results; } + public List getUsers() { + return this.users; + } + public Map> getCheckoutsByEmail() { Map> results = new HashMap<>(); for (LibraryGuestModel guest : this.guests) { From 2f83c8080dc6ab1cdc480c39231fb74f8faaa6f3 Mon Sep 17 00:00:00 2001 From: lquinoa252 Date: Sun, 9 Nov 2025 23:55:57 +0000 Subject: [PATCH 6/6] Fix formatting and verify integration - Apply Spotless code formatting to LibraryUserModel - Verify application runs successfully with all 3 repositories - Confirm all 44 tests pass without errors - Validate SQL queries and database integration work correctly --- .../codedifferently/lesson25/models/LibraryUserModel.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java index 195fe165a..8e01d52c3 100644 --- a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java @@ -11,12 +11,12 @@ public class LibraryUserModel { @Id public String id; public String email; - + @Column(name = "first_name") public String firstName; - + @Column(name = "last_name") public String lastName; - + public String password; }