From 6d74bb52954156d6324d27455712e0d008ab938a Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Tue, 30 Apr 2024 21:14:27 +0500 Subject: feat: Channel model --- src/schemas/channel.hpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/schemas/channel.hpp (limited to 'src/schemas') diff --git a/src/schemas/channel.hpp b/src/schemas/channel.hpp new file mode 100644 index 0000000..2e92a5e --- /dev/null +++ b/src/schemas/channel.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bot::schemas { + class Channel { + public: + Channel(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)); + } + } + + ~Channel() = 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