diff options
| author | ilotterytea <iltsu@alright.party> | 2024-04-30 21:39:16 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-04-30 21:39:16 +0500 |
| commit | c7d93fd7c54145fa248e87930124fbc10367845d (patch) | |
| tree | b0339da89c84dad89c66b85cc4925ddcf235d040 /src | |
| parent | dbbcaf84e9a86f0381dff83c1c1a1e32ae4856c0 (diff) | |
feat: User model
Diffstat (limited to 'src')
| -rw-r--r-- | src/schemas/user.hpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/schemas/user.hpp b/src/schemas/user.hpp new file mode 100644 index 0000000..993ed34 --- /dev/null +++ b/src/schemas/user.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include <chrono> +#include <ctime> +#include <iomanip> +#include <optional> +#include <pqxx/pqxx> +#include <sstream> +#include <stdexcept> +#include <string> + +namespace bot::schemas { + class User { + public: + User(const pqxx::row &row) { + this->id = row[0].as<int>(); + this->alias_id = row[1].as<int>(); + this->alias_name = row[2].as<std::string>(); + + std::tm tm = {}; + std::stringstream ss(row[3].as<std::string>()); + + ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); + + if (ss.fail()) { + throw std::invalid_argument("Invalid time format"); + } + + this->joined_at = + std::chrono::system_clock::from_time_t(std::mktime(&tm)); + + if (!row[4].is_null()) { + tm = {}; + ss = std::stringstream(row[4].as<std::string>()); + + ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); + + if (ss.fail()) { + throw std::invalid_argument("Invalid time format"); + } + + this->opted_out_at = + std::chrono::system_clock::from_time_t(std::mktime(&tm)); + } + } + + ~User() = default; + + const int &get_id() const { return this->id; } + const int &get_alias_id() const { return this->alias_id; } + const std::string &get_alias_name() const { return this->alias_name; } + const std::chrono::system_clock::time_point &get_joined_at() const { + return this->joined_at; + } + const std::optional<std::chrono::system_clock::time_point> & + get_opted_out_at() const { + return this->opted_out_at; + } + + private: + int id, alias_id; + std::string alias_name; + std::chrono::system_clock::time_point joined_at; + std::optional<std::chrono::system_clock::time_point> opted_out_at; + }; +} |
