database.hpp 2.49 KB
Newer Older
1 2
#pragma once

3 4 5 6 7 8 9 10 11

#include <biboumi.h>
#ifdef USE_DATABASE

#include "biboudb.hpp"

#include <memory>

#include <litesql.hpp>
12 13 14
#include <chrono>

class Iid;
15 16 17 18

class Database
{
public:
19
  using time_point = std::chrono::system_clock::time_point;
20 21 22
  Database() = default;
  ~Database() = default;

louiz’'s avatar
louiz’ committed
23 24 25 26 27
  Database(const Database&) = delete;
  Database(Database&&) = delete;
  Database& operator=(const Database&) = delete;
  Database& operator=(Database&&) = delete;

28 29 30 31 32
  static void set_verbose(const bool val);

  template<typename PersistentType>
  static size_t count()
  {
33
    return litesql::select<PersistentType>(*Database::db).count();
34 35 36 37 38
  }
  /**
   * Return the object from the db. Create it beforehand (with all default
   * values) if it is not already present.
   */
39
  static db::GlobalOptions get_global_options(const std::string& owner);
40 41
  static db::IrcServerOptions get_irc_server_options(const std::string& owner,
                                                     const std::string& server);
42 43 44 45 46 47
  static db::IrcChannelOptions get_irc_channel_options(const std::string& owner,
                                                       const std::string& server,
                                                       const std::string& channel);
  static db::IrcChannelOptions get_irc_channel_options_with_server_default(const std::string& owner,
                                                                           const std::string& server,
                                                                           const std::string& channel);
48 49 50
  static db::IrcChannelOptions get_irc_channel_options_with_server_and_global_default(const std::string& owner,
                                                                                      const std::string& server,
                                                                                      const std::string& channel);
51
  static std::vector<db::MucLogLine> get_muc_logs(const std::string& owner, const std::string& chan_name, const std::string& server,
louiz’'s avatar
louiz’ committed
52
                                                  int limit=-1, const std::string& start="", const std::string& end="");
53
  static std::string store_muc_message(const std::string& owner, const Iid& iid,
54 55
                                time_point date, const std::string& body, const std::string& nick);

56
  static void close();
57 58
  static void open(const std::string& filename, const std::string& db_type="sqlite3");

59 60

private:
61
  static std::string gen_uuid();
62 63 64 65
  static std::unique_ptr<db::BibouDB> db;
};
#endif /* USE_DATABASE */

66