Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 18 additions & 7 deletions lesson_25/createdb/createdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
conn.close()
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -13,13 +14,15 @@ public final class LibraryDbDataLoader implements LibraryDataLoader {

@Autowired private MediaItemRepository mediaItemsRepository;
@Autowired private LibraryGuestRepository libraryGuestRepository;
@Autowired private LibraryUserRepository libraryUserRepository;

@Override
public LibraryDataModel loadData() throws IOException {
var model = new LibraryDataModel();

model.mediaItems = mediaItemsRepository.findAll();
model.guests = libraryGuestRepository.findAll();
model.users = libraryUserRepository.findAll();

return model;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class LibraryDataModel {

public List<MediaItemModel> mediaItems;
public List<LibraryGuestModel> guests;
public List<LibraryUserModel> users;

public List<MediaItem> getMediaItems() {
List<MediaItem> results = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;}
}
Original file line number Diff line number Diff line change
@@ -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;}
Original file line number Diff line number Diff line change
@@ -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<LibraryUserModel> loadAllUsers() {
String sql = "SELECT id, email, first_name, last_name, password FROM library_users";
List<LibraryUserModel> users = new ArrayList<>();

database.executeQuery(sql, resultSet -> {
try {
while (resultSet.next()) {
users.add(mapResultSetToUserModel(resultSet));
}
} catch (Exception e) {
e.printStackTrace();
}
});
return users;
}
}
Original file line number Diff line number Diff line change
@@ -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<LibraryUserModel> loadAllUsers() {
String sql = "SELECT id, email, first_name, last_name, password FROM library_users";
List<LibraryUserModel> users = new ArrayList<>();

database.executeQuery(sql, resultSet -> {
try {
while (resultSet.next()) {
users.add(mapResultSetToUserModel(resultSet));
}
} catch (Exception e) {
e.printStackTrace();
}
});
return users;
}
7 changes: 7 additions & 0 deletions lesson_25/db/db_app/src/main/resources/csv/library_users.csv
Original file line number Diff line number Diff line change
@@ -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,[email protected],Jane,Doe,$2a$10$hash1ExampleBcryptString12345.
a1c3b5d7-f9e0-1c2b-3d4e-5f6a7b8c9d0e,[email protected],John,Smith,$2a$10$hash2ExampleBcryptString67890.
e9d8c7b6-a5f4-3e2d-1c0b-9a8f7e6d5c4b,[email protected],Alice,Jones,$2a$10$hash3ExampleBcryptString11223.
Original file line number Diff line number Diff line change
@@ -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;

Loading