Skip to content

Commit 3608c3e

Browse files
Merge pull request #11 from zjshermanburke/Development
Refactor librarybuilder, fix bugs, security, build system, and tests
2 parents 522c66c + ee7e4a0 commit 3608c3e

29 files changed

Lines changed: 518 additions & 332 deletions

.github/workflows/ci.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main, Development]
6+
pull_request:
7+
branches: [main, Development]
8+
9+
jobs:
10+
build-and-test:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
16+
- name: Install dependencies
17+
run: |
18+
sudo apt-get update
19+
sudo apt-get install -y cmake libpqxx-dev libgtest-dev
20+
21+
- name: Build
22+
run: |
23+
cd librarybuilder
24+
mkdir -p build
25+
cd build
26+
cmake ..
27+
make
28+
29+
- name: Run unit tests
30+
run: |
31+
cd librarybuilder/build
32+
./tests --gtest_filter="-CollectionLoadingTest.*"

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
scrapwork/*
22
recommendermodel/.venv/*
3-
recommendermodel/Data/title.basics.tsv.gz
3+
recommendermodel/Data/title.basics.tsv.gz
4+
librarybuilder/build/
5+
recommendermodel/src/__pycache__/*
6+
*.pyc

librarybuilder/.vscode/CMakeLists.txt

Lines changed: 0 additions & 15 deletions
This file was deleted.

librarybuilder/CMakeLists.txt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
cmake_minimum_required (VERSION 3.10)
2+
project(librarybuilder VERSION 1.0.0 LANGUAGES CXX)
3+
4+
set(CMAKE_CXX_STANDARD 17)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6+
set(CMAKE_CXX_EXTENSIONS OFF)
7+
8+
# Test Coverage
9+
option(COVERAGE "Enable test coverage" OFF)
10+
if(COVERAGE)
11+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
12+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
13+
endif()
14+
15+
find_package(PkgConfig REQUIRED)
16+
pkg_check_modules(PQXX REQUIRED libpqxx)
17+
18+
set(LIB_SOURCES
19+
src/Media.cpp
20+
src/MediaCollection.cpp
21+
src/Movie.cpp
22+
src/MovieCollection.cpp
23+
src/Book.cpp
24+
src/BookCollection.cpp
25+
src/DataBaseConnection.cpp
26+
src/SQLQueryUtil.cpp
27+
src/Util.cpp)
28+
29+
# Main Exectuable
30+
add_executable(main src/main.cpp ${LIB_SOURCES})
31+
target_include_directories(main PRIVATE include ${PQXX_INCLUDE_DIRS})
32+
target_link_libraries(main ${PQXX_LIBRARIES})
33+
34+
35+
# Test Exectuable
36+
find_package(GTest REQUIRED)
37+
add_executable(tests
38+
test/MovieCollectionTest.cpp
39+
test/BookCollectionTest.cpp
40+
test/CollectionLoadingTest.cpp
41+
test/UtilTest.cpp
42+
${LIB_SOURCES}
43+
)
44+
45+
target_include_directories(tests PRIVATE include ${PQXX_INCLUDE_DIRS})
46+
target_link_libraries(tests GTest::GTest GTest::Main ${PQXX_LIBRARIES})
47+
48+
enable_testing()
49+
add_test(NAME AllTests COMMAND tests)

librarybuilder/build/main

-5.65 MB
Binary file not shown.

librarybuilder/include/Book.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,22 @@ class Book: public Media{
1818
std::string author;
1919
public:
2020
// Constructors
21-
Book(std::string title, int times_consumed=def_times_consumed,
22-
int user_rating=def_user_rating, std::string isbn=def_string_val,
23-
std::string genre=def_string_val, std::string sub_genre = def_string_val,
24-
std::string author=def_author);
21+
Book(const std::string&title, int times_consumed=def_times_consumed,
22+
int user_rating=def_user_rating, const std::string &isbn=def_string_val,
23+
const std::string &genre=def_string_val, const std::string &sub_genre = def_string_val,
24+
const std::string &author=def_author);
2525

2626
// Getters and Setters
2727
int get_times_read() const;
28-
std::string get_isbn() const;
29-
std::string get_genre() const;
30-
std::string get_sub_genre() const;
31-
std::string get_author() const;
28+
const std::string &get_isbn() const;
29+
const std::string &get_genre() const;
30+
const std::string &get_sub_genre() const;
31+
const std::string &get_author() const;
3232
void set_times_read(int times_read);
33-
void set_isbn(std::string isbn);
34-
void set_genre(std::string genre);
35-
void set_sub_genre(std::string sub_genre);
36-
void set_author(std::string author);
33+
void set_isbn(const std::string &isbn);
34+
void set_genre(const std::string &genre);
35+
void set_sub_genre(const std::string &sub_genre);
36+
void set_author(const std::string &author);
3737

3838
// Custom Methods
3939
void increment_read(){Media::increment_times_consumed();} // Wrapper method to provide more intuitive naming

librarybuilder/include/BookCollection.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,26 @@ class BookCollection: public MediaCollection{
1010
std::vector<Book> *books;
1111
public:
1212
// Constructor
13-
BookCollection(std::string name);
14-
// Copy Constructor
13+
BookCollection(const std::string &name);
14+
// Deep Copy Constructor
1515
BookCollection(const BookCollection &source);
16+
// Copy Assignment Operator
17+
BookCollection &operator=(const BookCollection &source);
18+
// Move Constructor
19+
BookCollection(BookCollection &&source) noexcept;
20+
// Move Assignment Operator
21+
BookCollection &operator=(BookCollection &&source) noexcept;
1622
// Destructor
1723
~BookCollection();
1824

1925
// Getters and Setters
20-
std::vector<Book> get_books() const;
26+
const std::vector<Book> &get_books() const;
2127

2228
// Check if book exist in collection, if it doesn't add it
23-
bool add_book(std::string title, int times_read, int user_rating,
24-
std::string isbn, std::string genre, std::string sub_genre, std::string author);
29+
bool add_book(const std::string &title, int times_read, int user_rating,
30+
const std::string &isbn, const std::string &genre, const std::string &sub_genre, const std::string &author);
2531
// If book exists, increment times watched
26-
bool increment_read(std::string book);
32+
bool increment_read(const std::string &book);
2733
// Display's Book collection
2834
virtual void display() const override;
2935
};

librarybuilder/include/DataBaseConnection.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77
class DataBaseConnection{
88
private:
9-
std::string connectionString = "dbname=movie_book_database user=postgres host=localhost password=password port=5432";
9+
std::string connectionString;
1010
public:
1111
pqxx::connection* conn;
1212

13+
DataBaseConnection();
1314
void set_connection();
1415
void disconnect();
15-
pqxx::result query(std::string strSQL);
16-
std::string load_sql_query(std::string sql_file_path);
16+
pqxx::result query(const std::string &strSQL);
17+
std::string load_sql_query(const std::string &sql_file_path);
1718

1819
};
1920

librarybuilder/include/Media.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ class Media{
1212
int user_rating;
1313
public:
1414
// Constructors
15-
Media(std::string title, int times_consumed=def_times_consumed, int user_rating=def_user_rating);
15+
Media(const std::string &title, int times_consumed=def_times_consumed, int user_rating=def_user_rating);
1616

1717
// Operator Overloading
1818
bool operator==(const Media &rhs) const;
1919
bool operator<(const Media &rhs) const;
2020
bool operator>(const Media &rhs) const;
2121

2222
// Getters and Setters
23-
std::string get_title() const;
23+
const std::string &get_title() const;
2424
int get_times_consumed() const;
2525
int get_user_rating() const;
26-
void set_title(std::string title);
26+
void set_title(const std::string &title);
2727
void set_times_consumed(int times_consumed);
2828
void set_user_rating(int rating);
2929

librarybuilder/include/MediaCollection.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ class MediaCollection{
77
std::string name;
88
public:
99
// Constructor
10-
MediaCollection(std::string name);
10+
MediaCollection(const std::string &name);
1111
// Destructor
1212
virtual ~MediaCollection(){}
1313

1414
// Getters and Setters
1515
std::string get_name() const;
16-
void set_name(std::string name);
16+
void set_name(const std::string &name);
1717

1818
virtual void display() const = 0;
1919

0 commit comments

Comments
 (0)