File indexing completed on 2024-05-12 17:24:09
0001 #pragma once 0002 0003 #include <tuple> 0004 #include <threadeddatabase.h> 0005 #include <QCoroTask> 0006 0007 namespace DB 0008 { 0009 0010 struct Plant 0011 { 0012 using Id = int; 0013 using ColumnTypes = std::tuple<int, QString, QString, QString, int, QString, int, int, int, int, int>; 0014 0015 Plant::Id plant_id; 0016 QString name; 0017 QString species; 0018 QString img_url; 0019 int water_intervall; 0020 QString location; 0021 int date_of_birth; 0022 int parent_id; 0023 int last_watered; 0024 int last_health_date; 0025 int current_health; 0026 }; 0027 0028 struct HealthEvent 0029 { 0030 using ColumnTypes = std::tuple<int, int>; 0031 explicit HealthEvent(int health_date, int health); 0032 int health_date; 0033 int health; 0034 }; 0035 0036 } 0037 0038 class Database : public QObject 0039 { 0040 Q_OBJECT 0041 public: 0042 Database(); 0043 0044 QCoro::Task<DB::Plant::Id> addPlant(const QString &name, const QString &species, const QString &imgUrl, const int waterIntervall, const QString location, const int dateOfBirth, const int lastWatered, const int healthDate, const int health); 0045 void editPlant(const DB::Plant::Id plantId, const QString &name, const QString &species, const QString &imgUrl, const int waterIntervall, const QString location, const int dateOfBirth); 0046 void deletePlant(const DB::Plant::Id plantId); 0047 QFuture<std::vector<DB::Plant>> plants(); 0048 QFuture<std::optional<DB::Plant>> plant(int plant_id); 0049 QFuture<std::vector<SingleValue<int>>> waterEvents(int plantId); 0050 QFuture<std::vector<DB::HealthEvent>> healthEvents(int plantId); 0051 void waterPlant(const int plantId, const int waterDate); 0052 void addHealthEvent(const int plantId, const int healthDate, const int health); 0053 QFuture<std::optional<SingleValue<int>>> getLastHealthDate(const int plantId); 0054 // void replaceLastHealthEvent(const int plantId, const int waterDate, const int health); 0055 static Database & instance(); 0056 0057 Q_SIGNALS: 0058 void plantChanged(const DB::Plant::Id plantId); 0059 0060 0061 private: 0062 std::unique_ptr<ThreadedDatabase> m_database; 0063 0064 };