Files
noto/include/noto/migration.hpp
T
khodowany fc0bad81c4
publish / publish (push) Successful in 26m25s
Initial public khodo snapshot
2026-09-04 19:30:11 -05:00

48 lines
1.3 KiB
C++

#pragma once
#include <expected>
#include <functional>
#include <string>
#include <vector>
#include <boost/asio/awaitable.hpp>
#include <modulus.hpp>
#include <noto/connection.hpp>
#include <noto/schema.hpp>
namespace noto {
struct migration {
std::string id{};
std::string description{};
std::string checksum{};
std::function<boost::asio::awaitable<std::expected<void, modulus::error>>(noto::connection&)> up{};
std::function<boost::asio::awaitable<std::expected<void, modulus::error>>(noto::connection&)> down{};
};
struct migration_record {
std::string id{};
std::string description{};
std::string checksum{};
std::string applied_at{};
};
struct migration_options {
noto::table_name table{{}, "_noto_schema_migrations"};
};
class migrator {
public:
migrator(noto::connection& connection, noto::migration_options options = {});
auto async_applied_migrations() -> boost::asio::awaitable<std::expected<std::vector<noto::migration_record>, modulus::error>>;
auto async_migrate(std::vector<noto::migration> migrations) -> boost::asio::awaitable<std::expected<void, modulus::error>>;
auto async_rollback(std::vector<noto::migration> migrations, std::string target_id = {}) -> boost::asio::awaitable<std::expected<void, modulus::error>>;
private:
noto::connection* connection_{};
noto::migration_options options_{};
};
}