From 08f48d62b86aa1dd02b59534b3ef3e8c31e15241 Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:02:33 +0000 Subject: [PATCH 1/7] feat(lesson-25): add queries for counts, total pages, and guest checkout join --- .../src/main/resources/queries/lesson25_toby_evans.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 db/db_app/src/main/resources/queries/lesson25_toby_evans.sql diff --git a/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql b/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql new file mode 100644 index 000000000..ea2033bfc --- /dev/null +++ b/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql @@ -0,0 +1,7 @@ +SELECT type, COUNT(*) AS total_count FROM media_items GROUP BY type; + +SELECT SUM(pages) AS total_pages_checked_out FROM checked_out_items; + +SELECT g.id AS guest_id, g.first_name, g.last_name, c.item_id, c.checked_out_date, c.return_date +FROM guests g +LEFT JOIN checked_out_items c ON g.id = c.guest_id; From f34e1439b2ed3833eeb46ef0accd277fdc63ebcd Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:08:02 +0000 Subject: [PATCH 2/7] chore(lesson-25): normalize paths under lesson_25 module --- .../db}/db_app/src/main/resources/queries/lesson25_toby_evans.sql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {db => lesson_25/db}/db_app/src/main/resources/queries/lesson25_toby_evans.sql (100%) diff --git a/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql b/lesson_25/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql similarity index 100% rename from db/db_app/src/main/resources/queries/lesson25_toby_evans.sql rename to lesson_25/db/db_app/src/main/resources/queries/lesson25_toby_evans.sql From e6ebdc603b8de876dfb273e16779298745f28e81 Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:10:53 +0000 Subject: [PATCH 3/7] feat(lesson-25): add library_users table and seed users in lesson_25 sqlite --- .../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..365031dc93fd6377229b24bd3f606f54abf46fff 100644 GIT binary patch delta 1048 zcma)4OK;Oa5VmX5kc!xpf+|!2Mv9c8K4NduIKBXBv7)@%B#leWC0eJO)~z3n?a(Bb z)Es)@()(FjI8C%=>RXoQ@Ne);4K?+l#6-SB)oj=$Tsp{ycRkxgj!8XXIn z)&vM`)P!tZpzGQ7l0Z*T^x_OnD|>WZ*sar*TE3jENpw+=mPcu%K}Ee{Hn-~ZrdTS` z;%2@o3NG6kD5hmMbf}@pJua!je^STLvQ7-syV5^+<{5u)dcGXTF-6})U8}7sHfq3* zZH#eaLUaSTF#osMFhBeM|FRQDO^^D0`=UaAWXb60lORou>XE-m^WrJJM-Ci}2#bmN zIVY6#Y{iWM=W|VH8tO~bh1#)-R-1;l;U-E5#ef`RK`beyk9YRLHppdcMy{nh0@KYP z$!;++1B+Z6XsMHQFVkmsfV8G^ResRi0?@&y!s620BPRqrTXAE+`J8OX*A=WAav7So zqNBbiqL|-h1ir#oftG9*l85O7&R{ylZUr2*Sp@c_{$WOD^;9p{J{kZkqoqt%f9>4D z-9{`pA=a}MHwK)~K~-s@>oT%#qF@~8mZ5t(UZrwtEjD9tuv~7PKxK$TJp=VQeUY{PtoTW4~PVQ<2?{_#1bBu(A0e* I5xLQ@KgF6RKL7v# delta 59 zcmZp8z}V2hI6+!amw|zS1&ColcA}24ur7n1_e5Tx5Hnv01HT>LeZG**iVBZ-H;3@8 GF$4fGP78_v From 2978ce540c543dbfc3bfb43f249b9912414698ff Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:11:04 +0000 Subject: [PATCH 4/7] feat(lesson-25): add LibraryUserModel (lesson_25 module) --- .../lesson25/models/LibraryUserModel.java | 28 +++++++++++++++++++ 1 file changed, 28 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..4abbc8863 --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java @@ -0,0 +1,28 @@ +package com.codedifferently.lesson25.models; + +public class LibraryUserModel { + private final String id; + private final String email; + private final String firstName; + private final String lastName; + private final String password; + + public LibraryUserModel(String id, String email, String firstName, String lastName, String password) { + this.id = id; + this.email = email; + this.firstName = firstName; + this.lastName = lastName; + this.password = password; + } + + public String getId() { return id; } + public String getEmail() { return email; } + public String getFirstName() { return firstName; } + public String getLastName() { return lastName; } + public String getPassword() { return password; } + + @Override + public String toString() { + return firstName + " " + lastName + " <" + email + ">"; + } +} From 4539256daf0b853df5516c55c8ef30bdd16ca275 Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:11:11 +0000 Subject: [PATCH 5/7] feat(lesson-25): add LibraryUserRepository (lesson_25 module) --- .../repository/LibraryUserRepository.java | 33 +++++++++++++++++++ 1 file changed, 33 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..0ae740837 --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java @@ -0,0 +1,33 @@ +package com.codedifferently.lesson25.repository; + +import com.codedifferently.lesson25.models.LibraryUserModel; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +public class LibraryUserRepository { + private final Connection connection; + + public LibraryUserRepository(Connection connection) { + this.connection = connection; + } + + public List findAll() throws Exception { + List users = new ArrayList<>(); + String sql = "SELECT id, email, first_name, last_name, password FROM library_users"; + try (Statement st = connection.createStatement(); ResultSet rs = st.executeQuery(sql)) { + while (rs.next()) { + users.add(new LibraryUserModel( + rs.getString("id"), + rs.getString("email"), + rs.getString("first_name"), + rs.getString("last_name"), + rs.getString("password") + )); + } + } + return users; + } +} From 468dcb437582c78f510a66e665737f74fbdc9280 Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:30:58 +0000 Subject: [PATCH 6/7] feat(lesson-25): add users list + getter/setter to LibraryDataModel --- .../com/codedifferently/lesson25/models/LibraryDataModel.java | 3 +++ 1 file changed, 3 insertions(+) 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..306b1da9c 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 @@ -59,4 +59,7 @@ public Map> getCheckoutsByEmail() { } return results; } + private java.util.List users = new java.util.ArrayList<>(); + public java.util.List getUsers() { return users; } + public void setUsers(java.util.List users) { this.users = users; } } From d8d7af5a17d0f003d700d7db82b4ccce8599ff10 Mon Sep 17 00:00:00 2001 From: Toby Evans Date: Fri, 10 Oct 2025 16:32:25 +0000 Subject: [PATCH 7/7] feat(lesson-25): populate users in LibraryDbDataLoader --- .../factory/LibraryDbDataLoader.java.bak | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java.bak diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java.bak b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java.bak new file mode 100644 index 000000000..b897de124 --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/factory/LibraryDbDataLoader.java.bak @@ -0,0 +1,26 @@ +package com.codedifferently.lesson25.factory; + +import com.codedifferently.lesson25.models.LibraryDataModel; +import com.codedifferently.lesson25.repository.LibraryGuestRepository; +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; + + @Override + public LibraryDataModel loadData() throws IOException { + var model = new LibraryDataModel(); + + model.mediaItems = mediaItemsRepository.findAll(); + model.guests = libraryGuestRepository.findAll(); + + return model; + } +}