diff --git a/lesson_25/createdb/createdb.py b/lesson_25/createdb/createdb.py index a8af9b776..640e8645c 100644 --- a/lesson_25/createdb/createdb.py +++ b/lesson_25/createdb/createdb.py @@ -4,20 +4,31 @@ import sqlite3 # Step 1: Load the CSV file into a pandas DataFrame -media_items_df = pd.read_csv('/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/media_items.csv') -guests_df = pd.read_csv('/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/guests.csv') -checked_out_items_df = pd.read_csv('/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/checked_out_items.csv') -checked_out_items_df['due_date'] = pd.to_datetime(checked_out_items_df['due_date']).values.astype(np.int64) +media_items_df = pd.read_csv( + '/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/media_items.csv') +guests_df = pd.read_csv( + '/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/guests.csv') +checked_out_items_df = pd.read_csv( + '/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/checked_out_items.csv') +checked_out_items_df['due_date'] = pd.to_datetime( + checked_out_items_df['due_date']).values.astype(np.int64) +library_users_df = pd.read_csv( + '/workspaces/code-society-25-2/lesson_12/io/io_app/src/main/resources/csv/library_users.csv') + # Step 2: Create a connection to the SQLite database # Note: This will create the database file if it doesn't exist already -os.makedirs('/workspaces/code-society-25-2/lesson_25/db/db_app/src/main/resources/sqlite/', exist_ok=True) +os.makedirs( + '/workspaces/code-society-25-2/lesson_25/db/db_app/src/main/resources/sqlite/', exist_ok=True) conn = sqlite3.connect('../db/db_app/src/main/resources/sqlite/data.db') # Step 3: Write the DataFrame to the SQLite database media_items_df.to_sql('media_items', conn, if_exists='replace', index=False) guests_df.to_sql('guests', conn, if_exists='replace', index=False) -checked_out_items_df.to_sql('checked_out_items', conn, if_exists='replace', index=False) +checked_out_items_df.to_sql( + 'checked_out_items', conn, if_exists='replace', index=False) +library_users_df.to_sql('library_users', conn, + if_exists='replace', index=False) # Don't forget to close the connection -conn.close() \ No newline at end of file +conn.close() 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..abd3c0b30 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<>(); 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..81ee2da0e --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUserModel.java @@ -0,0 +1,23 @@ +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;} +} \ No newline at end of file diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUsersModel.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUsersModel.java new file mode 100644 index 000000000..a404c785e --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/models/LibraryUsersModel.java @@ -0,0 +1,21 @@ +public class LibraryUsersModel { + 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;} \ 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..ce798edee --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRepository.java @@ -0,0 +1,40 @@ +package com.codedifferently.lesson25.repository; + +import com.codedifferently.lesson25.models.LibraryUserModel; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + +public class LibraryUserRespository { + private final Database database; + + public LibraryUserRespository(Database database){ + this.database = database; + } + + private LibraryUserModel mapResultSetToUserModel(ResultSet resultSet) throws Exception { + return new LibraryUserModel( + resultSet.getString("id"), + resultSet.getString("email"), + resultSet.getString("first_name"), + resultSet.getString("last_name"), + resultSet.getString("password") + ); + } + + public List loadAllUsers() { + String sql = "SELECT id, email, first_name, last_name, password FROM library_users"; + List users = new ArrayList<>(); + + database.executeQuery(sql, resultSet -> { + try { + while (resultSet.next()) { + users.add(mapResultSetToUserModel(resultSet)); + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + return users; + } +} \ No newline at end of file diff --git a/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRespository.java b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRespository.java new file mode 100644 index 000000000..696885c23 --- /dev/null +++ b/lesson_25/db/db_app/src/main/java/com/codedifferently/lesson25/repository/LibraryUserRespository.java @@ -0,0 +1,38 @@ +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + + +public class LibraryUserRespository { + private final Database database; + + public LibraryUserRespository(Database database){ + this.database = database; + } +} + +private LibraryUserModel mapResultSetToUserModel(ResultSet resultSet) throws Exception { + return new LibraryUserModel( + result.Set.getString("id"), + result.Set.getString("email"), + result.Set.getString("first_name"), + result.Set.getString("last_name"), + result.Set.getString("password") + ); +} + +public List loadAllUsers() { + String sql = "SELECT id, email, first_name, last_name, password FROM library_users"; + List users = new ArrayList<>(); + + database.executeQuery(sql, resultSet -> { + try { + while (resultSet.next()) { + users.add(mapResultSetToUserModel(resultSet)); + } + } catch (Exception e) { + e.printStackTrace(); + } + }); + return users; + } diff --git a/lesson_25/db/db_app/src/main/resources/csv/library_users.csv b/lesson_25/db/db_app/src/main/resources/csv/library_users.csv new file mode 100644 index 000000000..e7d0c332f --- /dev/null +++ b/lesson_25/db/db_app/src/main/resources/csv/library_users.csv @@ -0,0 +1,7 @@ + +library_users_df = pd.read_csv('/workspaces/code-society-25-2/lesson_12/io_app/src/main/resources/csv/library_users.csv') + +id,email,first_name,last_name,password +b2a4c8d0-9e6f-4a1b-8c3d-5f7e0a2b4c8d,jane.doe@example.com,Jane,Doe,$2a$10$hash1ExampleBcryptString12345. +a1c3b5d7-f9e0-1c2b-3d4e-5f6a7b8c9d0e,john.smith@example.com,John,Smith,$2a$10$hash2ExampleBcryptString67890. +e9d8c7b6-a5f4-3e2d-1c0b-9a8f7e6d5c4b,alice.jones@example.com,Alice,Jones,$2a$10$hash3ExampleBcryptString11223. \ No newline at end of file diff --git a/lesson_25/db/db_app/src/main/resources/queries/library_data_analysis.sql b/lesson_25/db/db_app/src/main/resources/queries/library_data_analysis.sql new file mode 100644 index 000000000..c639065a2 --- /dev/null +++ b/lesson_25/db/db_app/src/main/resources/queries/library_data_analysis.sql @@ -0,0 +1,30 @@ +SELECT +type, +COUNT(id) AS item_count +FROM +media_items +GROUP BY +type; + + +SELECT +SUM(mi.page_count) AS total_pages_checked_out +FROM +checked_out_items coi +JOIN +media_items mi ON coi.item_id = mi.id; + + +SELECT +g.id AS guest_id, +g.first_name, +g.last_name, +coi.item_id, +coi.checkout_date +FROM +guests g +LEFT OUTER JOIN +checked_out_items coi ON g.id = coi.guest_id +ORDER BY +g.id, coi.checkout_date; +