From c7d93fd7c54145fa248e87930124fbc10367845d Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Tue, 30 Apr 2024 21:39:16 +0500 Subject: feat: User model --- src/schemas/user.hpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/schemas/user.hpp (limited to 'src') 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 +#include +#include +#include +#include +#include +#include +#include + +namespace bot::schemas { + class User { + public: + User(const pqxx::row &row) { + this->id = row[0].as(); + this->alias_id = row[1].as(); + this->alias_name = row[2].as(); + + std::tm tm = {}; + std::stringstream ss(row[3].as()); + + 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()); + + 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 & + 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 opted_out_at; + }; +} -- cgit v1.2.3