~singpolyma/biboumi

ref: 7f2127a7ea4c49fc1fbcd6cd6fb13e0265f4d841 biboumi/src/database/database.hpp -rw-r--r-- 2.5 KiB
7f2127a7 — louiz’ Add the archive ID to messages when they are sent to users 6 years ago
                                                                                
81f8f45b louiz’
88ae2599 Florent Le Coz
8ec823be louiz’
88ae2599 Florent Le Coz
8ec823be louiz’
88ae2599 Florent Le Coz
af420738 louiz’
88ae2599 Florent Le Coz
4c1b9abe louiz’
88ae2599 Florent Le Coz
6776b827 louiz’
88ae2599 Florent Le Coz
421c960d Florent Le Coz
6776b827 louiz’
d1626c92 louiz’
1a09c965 louiz’
7f2127a7 louiz’
8ec823be louiz’
88ae2599 Florent Le Coz
4c1b9abe louiz’
88ae2599 Florent Le Coz
8ec823be louiz’
88ae2599 Florent Le Coz
81f8f45b louiz’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once


#include <biboumi.h>
#ifdef USE_DATABASE

#include "biboudb.hpp"

#include <memory>

#include <litesql.hpp>
#include <chrono>

class Iid;

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

  Database(const Database&) = delete;
  Database(Database&&) = delete;
  Database& operator=(const Database&) = delete;
  Database& operator=(Database&&) = delete;

  static void set_verbose(const bool val);

  template<typename PersistentType>
  static size_t count()
  {
    return litesql::select<PersistentType>(*Database::db).count();
  }
  /**
   * Return the object from the db. Create it beforehand (with all default
   * values) if it is not already present.
   */
  static db::GlobalOptions get_global_options(const std::string& owner);
  static db::IrcServerOptions get_irc_server_options(const std::string& owner,
                                                     const std::string& server);
  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);
  static db::IrcChannelOptions get_irc_channel_options_with_server_and_global_default(const std::string& owner,
                                                                                      const std::string& server,
                                                                                      const std::string& channel);
  static std::vector<db::MucLogLine> get_muc_logs(const std::string& owner, const std::string& chan_name, const std::string& server,
                                                  int limit=-1, const std::string& start="", const std::string& end="");
  static std::string store_muc_message(const std::string& owner, const Iid& iid,
                                time_point date, const std::string& body, const std::string& nick);

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


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