From a1470c949b901393f29764d34b74318e3687e22a Mon Sep 17 00:00:00 2001 From: jmckellar252-png Date: Fri, 10 Oct 2025 16:00:28 +0000 Subject: [PATCH 1/3] feat: add library_users table and SQL queries - Add joneemckellar.sql with three required queries for media items analysis - Create library_users table in SQLite database with id, email, first_name, last_name, password fields - Populate library_users table with sample data using bcrypt encoded passwords --- .../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..ba2236d28cf48d5bc1528b48255714c81a2b126f 100644 GIT binary patch delta 1030 zcmZo@U~G86I6+!apMima9f)B-ZlaE{q&|b5_e5Sk9|ks_{|x+geE0c6c>ePV@?P86 z*v?bm7$U$fuCC75lwOjUl#`m1nN*ZmR2g4doLW?j!eMm|a&-)GRS0o(@^Mu_ky6m$ zQUHR?6onAih!BN zv9u%~%#VjVKN#fCcq2F;#AUY>BuXz>t09V3HekqeY!2YtV93V{WHR%mGVoXPed0^q ztf&yqXV}Qa%pPhhD&5FxYHE;bVPasQn`&g4q-$cBVxpU9ZfK@!Vq#`yYH9+MF)+@} z%$__!U$ovgGdtBQKO?U=KTpLdQN_?e#m}-Z-=fsVKQlQyy}~HUHz+FKw=&hhvnsr$Gfc3+qsdAi9OU(RGcWwjj|H+QuT^+GfOfipRnht z_X2W*K|G3Fz{JQNYAPyBlnV^AfL_*1$xn4itw@Z_EyzjLOU};)g@a3eDkZMq0!0je z8w39h{`LHAz=(OvH*rFDy#{kABQdeUOr%01CUxdeP9jV+1Urb6e***mS^gLN8=x-Q h$}Yof%Lq*atjto(mW-44*^5asi8GsWB8LquXaH`*Dsun; delta 59 zcmZp8z}V2hI6+!amw|zS1&ColcA}24ur7n1_e5Tx5Hnv01HT>LeZG**iVBZ-H;3@8 GF$4fGP78_v From 020a3560955346c17e26833eba3c04aeb59be160 Mon Sep 17 00:00:00 2001 From: jmckellar252-png Date: Fri, 10 Oct 2025 16:20:03 +0000 Subject: [PATCH 2/3] feat: complete Loading the Library Part II assignment - Add SQL queries for media analysis in joneemckellar.sql - Implement library_users table with sample data - Create LibraryUserModel entity and LibraryUserRepository - Integrate user loading into LibraryDbDataLoader - Successfully test application with database integration --- .../lesson25/factory/LibraryDbDataLoader.java | 6 ++++-- .../lesson25/models/LibraryDataModel.java | 4 ++++ .../lesson25/models/LibraryUserModel.java | 17 +++++++++++++++++ .../repository/LibraryUserRepository.java | 11 +++++++++++ .../main/resources/queries/joneemckellar.sql | 15 +++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java create mode 100644 lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java create mode 100644 lesson_25/db/db_app/src/main/resources/queries/joneemckellar.sql 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..ea73c1b13 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,17 +2,19 @@ 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 com.codedifferently.lesson25.repository.MediaItemRepository; import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -/** A data loader that loads library data from a database. */ @Service 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,7 +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..6c1c88378 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,9 @@ public List getGuests() { return results; } +public List getUsers() { + return users != null ? users : new ArrayList<>(); +} public Map> getCheckoutsByEmail() { Map> results = new HashMap<>(); for (LibraryGuestModel guest : this.guests) { 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..0bfd76546 --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java @@ -0,0 +1,17 @@ +package com.codedifferently.lesson25.models; + +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; + public String firstName; + public String lastName; + public String password; +} \ No newline at end of file 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..ada109d4b --- /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(); +} \ No newline at end of file diff --git a/lesson_25/db/db_app/src/main/resources/queries/joneemckellar.sql b/lesson_25/db/db_app/src/main/resources/queries/joneemckellar.sql new file mode 100644 index 000000000..8d62420db --- /dev/null +++ b/lesson_25/db/db_app/src/main/resources/queries/joneemckellar.sql @@ -0,0 +1,15 @@ +SELECT type, COUNT(*) as count +FROM media_items +GROUP BY type +ORDER BY type; + +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.type = 'book' AND mi.pages IS NOT NULL; + +SELECT g.name, g.email, g.type, coi.item_id, coi.due_date, mi.title, mi.type as item_type +FROM guests g +LEFT JOIN checked_out_items coi ON g.email = coi.email +LEFT JOIN media_items mi ON coi.item_id = mi.id +ORDER BY g.name; \ No newline at end of file From 81ca5707a2cbf81e55ffafcf208b575d5e8a07ce Mon Sep 17 00:00:00 2001 From: jmckellar252-png Date: Fri, 10 Oct 2025 16:45:53 +0000 Subject: [PATCH 3/3] fix: apply code formatting with spotless - Remove duplicate import in LibraryDbDataLoader - Fix indentation and spacing in all Java files - Ensure code meets project formatting standards --- .../lesson25/factory/LibraryDbDataLoader.java | 5 ++--- .../codedifferently/lesson25/models/LibraryDataModel.java | 7 ++++--- .../codedifferently/lesson25/models/LibraryUserModel.java | 5 ++--- .../lesson25/repository/LibraryUserRepository.java | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) 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 ea73c1b13..06a3ef646 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 @@ -4,7 +4,6 @@ import com.codedifferently.lesson25.repository.LibraryGuestRepository; import com.codedifferently.lesson25.repository.LibraryUserRepository; import com.codedifferently.lesson25.repository.MediaItemRepository; -import com.codedifferently.lesson25.repository.MediaItemRepository; import java.io.IOException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,7 +13,7 @@ public final class LibraryDbDataLoader implements LibraryDataLoader { @Autowired private MediaItemRepository mediaItemsRepository; @Autowired private LibraryGuestRepository libraryGuestRepository; - @Autowired private LibraryUserRepository libraryUserRepository; + @Autowired private LibraryUserRepository libraryUserRepository; @Override public LibraryDataModel loadData() throws IOException { @@ -22,7 +21,7 @@ public LibraryDataModel loadData() throws IOException { model.mediaItems = mediaItemsRepository.findAll(); model.guests = libraryGuestRepository.findAll(); - model.users = libraryUserRepository.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 6c1c88378..a6a804d2d 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 @@ -53,9 +53,10 @@ public List getGuests() { return results; } -public List getUsers() { - return users != null ? users : new ArrayList<>(); -} + public List getUsers() { + return users != null ? users : new ArrayList<>(); + } + public Map> getCheckoutsByEmail() { Map> results = new HashMap<>(); for (LibraryGuestModel guest : this.guests) { 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 0bfd76546..86babf79b 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 @@ -8,10 +8,9 @@ @Table(name = "library_users") public class LibraryUserModel { - @Id - public String id; + @Id public String id; public String email; public String firstName; public String lastName; public String password; -} \ No newline at end of file +} 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 index ada109d4b..63091849b 100644 --- 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 @@ -8,4 +8,4 @@ public interface LibraryUserRepository extends CrudRepository findAll(); -} \ No newline at end of file +}