Compare commits
3 commits
2812f582a1
...
300c883fdc
Author | SHA1 | Date | |
---|---|---|---|
300c883fdc | |||
5eef98074e | |||
c946bf6924 |
7 changed files with 54 additions and 23 deletions
|
@ -1,17 +1,36 @@
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
Database::Database(const std::string& dbname) : db_(nullptr)
|
Database::Database(const std::string& dbname)
|
||||||
{
|
{
|
||||||
dbname_ = dbname;
|
dbname_ = dbname;
|
||||||
const int errCode = sqlite3_open(dbname_.c_str(), &db_);
|
init();
|
||||||
if (errCode) {
|
}
|
||||||
throw std::runtime_error("Could not open database file.");
|
|
||||||
|
Database::Database()
|
||||||
|
{
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
#if defined(__linux__)
|
||||||
|
fs::path dbpath = fs::path(std::getenv("HOME")) / ".local/share/kima2-cpp";
|
||||||
|
#elif defined(__WIN64) || defined(__WIN32)
|
||||||
|
fs::path dbpath = fs::path(std::getenv("LOCALAPPDATA") / "/kima2-cpp";
|
||||||
|
#else
|
||||||
|
throw std::runtime_error("Platform not supported.");
|
||||||
|
#endif
|
||||||
|
if (!fs::exists(dbpath)) {
|
||||||
|
try {
|
||||||
|
fs::create_directories(dbpath);
|
||||||
|
} catch (fs::filesystem_error& err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sqlite3_db_config(db_, SQLITE_DBCONFIG_ENABLE_FKEY);
|
dbpath /= "kima2.db";
|
||||||
|
dbname_ = dbpath.string();
|
||||||
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
Database::~Database() { sqlite3_close(db_); }
|
Database::~Database() { sqlite3_close(db_); }
|
||||||
|
@ -82,6 +101,12 @@ void Database::createNew()
|
||||||
|
|
||||||
void Database::init()
|
void Database::init()
|
||||||
{
|
{
|
||||||
|
const int errCode = sqlite3_open(dbname_.c_str(), &db_);
|
||||||
|
if (errCode) {
|
||||||
|
throw std::runtime_error("Could not open database file.");
|
||||||
|
}
|
||||||
|
sqlite3_db_config(db_, SQLITE_DBCONFIG_ENABLE_FKEY);
|
||||||
|
|
||||||
int version = getVersion();
|
int version = getVersion();
|
||||||
|
|
||||||
switch (version) {
|
switch (version) {
|
||||||
|
@ -253,7 +278,7 @@ unsigned int Database::storeSellers(std::vector<std::unique_ptr<Seller>>& seller
|
||||||
|
|
||||||
endTransaction();
|
endTransaction();
|
||||||
|
|
||||||
// Everything went fine, so we can now update our objects
|
// Everything went fine, so we can now update our objects
|
||||||
sellers.erase(std::remove_if(sellers.begin(), sellers.end(),
|
sellers.erase(std::remove_if(sellers.begin(), sellers.end(),
|
||||||
[](const std::unique_ptr<Seller>& seller) {
|
[](const std::unique_ptr<Seller>& seller) {
|
||||||
return (seller->getState() == Seller::State::DELETE);
|
return (seller->getState() == Seller::State::DELETE);
|
||||||
|
|
|
@ -10,17 +10,18 @@
|
||||||
class Database
|
class Database
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Database(const std::string& dbname);
|
explicit Database(const std::string& dbname);
|
||||||
|
Database();
|
||||||
~Database();
|
~Database();
|
||||||
Database(const Database&) = delete;
|
Database(const Database&) = delete;
|
||||||
Database& operator=(const Database&) = delete;
|
Database& operator=(const Database&) = delete;
|
||||||
void exec(const std::string& sql);
|
void exec(const std::string& sql);
|
||||||
void init();
|
|
||||||
unsigned int storeSellers(std::vector<std::unique_ptr<Seller>>& sellers);
|
unsigned int storeSellers(std::vector<std::unique_ptr<Seller>>& sellers);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
sqlite3* db_;
|
sqlite3* db_{nullptr};
|
||||||
std::string dbname_;
|
std::string dbname_;
|
||||||
|
void init();
|
||||||
void beginTransaction();
|
void beginTransaction();
|
||||||
void endTransaction();
|
void endTransaction();
|
||||||
void createNew();
|
void createNew();
|
||||||
|
|
|
@ -12,10 +12,9 @@ Marketplace::Marketplace()
|
||||||
|
|
||||||
void Marketplace::storeToDb()
|
void Marketplace::storeToDb()
|
||||||
{
|
{
|
||||||
const std::string DB_PATH{"/tmp/kima2.db"};
|
//const std::string DB_PATH{"/tmp/kima2.db"};
|
||||||
|
|
||||||
Database db(DB_PATH);
|
Database db;
|
||||||
db.init();
|
|
||||||
db.storeSellers(sellers_);
|
db.storeSellers(sellers_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,4 +18,4 @@ set(GUI_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(kima2 ${GUI_SOURCES})
|
add_executable(kima2 ${GUI_SOURCES})
|
||||||
target_link_libraries(kima2 core Qt5::Widgets)
|
target_link_libraries(kima2 core Qt5::Widgets stdc++fs)
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
//Q_INIT_RESOURCE(application);
|
// Q_INIT_RESOURCE(application);
|
||||||
|
|
||||||
QApplication kimaApp{argc, argv};
|
QApplication kimaApp{argc, argv};
|
||||||
|
|
||||||
|
QCoreApplication::setOrganizationName("RustySoft");
|
||||||
|
QCoreApplication::setOrganizationDomain("rustysoft.de");
|
||||||
|
QCoreApplication::setApplicationName("KIMA2");
|
||||||
|
|
||||||
auto mainWin = std::make_unique<MainWindow>();
|
auto mainWin = std::make_unique<MainWindow>();
|
||||||
mainWin->show();
|
mainWin->show();
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,19 @@
|
||||||
|
|
||||||
#include "sellerdialog.h"
|
#include "sellerdialog.h"
|
||||||
|
|
||||||
|
constexpr int STATUSBAR_TIMEOUT = 5000;
|
||||||
|
|
||||||
MainWindow::MainWindow()
|
MainWindow::MainWindow()
|
||||||
{
|
{
|
||||||
ui_.setupUi(this);
|
ui_.setupUi(this);
|
||||||
|
|
||||||
connect(ui_.actionQuit, &QAction::triggered, qApp, QApplication::quit);
|
connect(ui_.actionQuit, &QAction::triggered, qApp, QApplication::quit);
|
||||||
connect(ui_.actionEditSeller, &QAction::triggered, this, &MainWindow::on_actionEditSeller_triggered);
|
connect(ui_.actionEditSeller, &QAction::triggered, this,
|
||||||
|
&MainWindow::on_actionEditSeller_triggered);
|
||||||
|
|
||||||
marketplace_ = std::make_unique<Marketplace>();
|
marketplace_ = std::make_unique<Marketplace>();
|
||||||
|
marketplace_->loadFromDb();
|
||||||
|
statusBar()->showMessage("Gespeicherte Daten wurden geladen.", STATUSBAR_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionEditSeller_triggered()
|
void MainWindow::on_actionEditSeller_triggered()
|
||||||
|
@ -18,7 +23,11 @@ void MainWindow::on_actionEditSeller_triggered()
|
||||||
int retCode = dialog->exec();
|
int retCode = dialog->exec();
|
||||||
if (retCode == QDialog::Accepted) {
|
if (retCode == QDialog::Accepted) {
|
||||||
marketplace_->storeToDb();
|
marketplace_->storeToDb();
|
||||||
|
statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten gespeichert.",
|
||||||
|
STATUSBAR_TIMEOUT);
|
||||||
} else {
|
} else {
|
||||||
marketplace_->loadFromDb();
|
marketplace_->loadFromDb();
|
||||||
|
statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten <b>verworfen</b>.",
|
||||||
|
STATUSBAR_TIMEOUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,14 +9,12 @@
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(create_database)
|
BOOST_AUTO_TEST_CASE(create_database)
|
||||||
{
|
{
|
||||||
Database db(":memory:");
|
BOOST_CHECK_NO_THROW(Database db(":memory:"));
|
||||||
BOOST_CHECK_NO_THROW(db.init());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(store_seller_fail)
|
BOOST_AUTO_TEST_CASE(store_seller_fail)
|
||||||
{
|
{
|
||||||
Database db(":memory:");
|
Database db(":memory:");
|
||||||
db.init();
|
|
||||||
std::vector<std::unique_ptr<Seller>> sellers;
|
std::vector<std::unique_ptr<Seller>> sellers;
|
||||||
sellers.push_back(std::make_unique<Seller>());
|
sellers.push_back(std::make_unique<Seller>());
|
||||||
sellers.push_back(std::make_unique<Seller>());
|
sellers.push_back(std::make_unique<Seller>());
|
||||||
|
@ -25,7 +23,6 @@ BOOST_AUTO_TEST_CASE(store_seller_fail)
|
||||||
BOOST_AUTO_TEST_CASE(store_sellers_succ)
|
BOOST_AUTO_TEST_CASE(store_sellers_succ)
|
||||||
{
|
{
|
||||||
Database db(":memory:");
|
Database db(":memory:");
|
||||||
db.init();
|
|
||||||
std::vector<std::unique_ptr<Seller>> sellers;
|
std::vector<std::unique_ptr<Seller>> sellers;
|
||||||
auto a = std::make_unique<Seller>();
|
auto a = std::make_unique<Seller>();
|
||||||
a->createUuid();
|
a->createUuid();
|
||||||
|
@ -47,7 +44,6 @@ BOOST_AUTO_TEST_CASE(store_sellers_succ)
|
||||||
BOOST_AUTO_TEST_CASE(seller_states)
|
BOOST_AUTO_TEST_CASE(seller_states)
|
||||||
{
|
{
|
||||||
Database db(":memory:");
|
Database db(":memory:");
|
||||||
db.init();
|
|
||||||
std::vector<std::unique_ptr<Seller>> sellers;
|
std::vector<std::unique_ptr<Seller>> sellers;
|
||||||
auto a = std::make_unique<Seller>();
|
auto a = std::make_unique<Seller>();
|
||||||
a->setSellerNo(3);
|
a->setSellerNo(3);
|
||||||
|
|
Loading…
Reference in a new issue