20#ifndef ORES_DQ_CORE_SERVICE_PUBLICATION_SERVICE_HPP
21#define ORES_DQ_CORE_SERVICE_PUBLICATION_SERVICE_HPP
26#include <boost/uuid/uuid.hpp>
27#include "ores.logging/make_logger.hpp"
28#include "ores.database/domain/context.hpp"
29#include "ores.dq.api/domain/artefact_type.hpp"
30#include "ores.dq.api/domain/dataset.hpp"
31#include "ores.dq.api/domain/publication.hpp"
32#include "ores.dq.api/domain/publication_mode.hpp"
33#include "ores.dq.api/domain/publication_result.hpp"
34#include "ores.dq.core/repository/dataset_repository.hpp"
35#include "ores.dq.core/repository/dataset_dependency_repository.hpp"
36#include "ores.dq.core/repository/publication_repository.hpp"
37#include "ores.dq.core/repository/artefact_type_repository.hpp"
39namespace ores::dq::service {
41struct bundle_dataset_result {
42 std::string dataset_code;
43 std::string dataset_name;
45 std::string error_message;
46 std::uint64_t records_inserted = 0;
47 std::uint64_t records_updated = 0;
48 std::uint64_t records_skipped = 0;
49 std::uint64_t records_deleted = 0;
52struct publish_bundle_result {
54 std::string error_message;
55 std::uint32_t datasets_processed = 0;
56 std::uint32_t datasets_succeeded = 0;
57 std::uint32_t datasets_failed = 0;
58 std::uint32_t datasets_skipped = 0;
59 std::uint64_t total_records_inserted = 0;
60 std::uint64_t total_records_updated = 0;
61 std::uint64_t total_records_skipped = 0;
62 std::uint64_t total_records_deleted = 0;
63 std::vector<bundle_dataset_result> dataset_results;
80 inline static std::string_view logger_name =
81 "ores.dq.service.publication_service";
83 [[nodiscard]]
static auto& lg() {
85 static auto instance = make_logger(logger_name);
114 std::vector<domain::publication_result>
publish(
115 const std::vector<boost::uuids::uuid>& dataset_ids,
116 domain::publication_mode mode,
117 const std::string& published_by,
118 bool resolve_dependencies =
true);
136 const std::string& bundle_code,
137 domain::publication_mode mode,
138 const std::string& published_by,
140 const std::string& params_json =
"");
153 const std::vector<boost::uuids::uuid>& dataset_ids);
162 const boost::uuids::uuid& dataset_id);
171 std::uint32_t limit = 100);
180 std::map<std::string, domain::artefact_type> build_artefact_type_cache(
181 const std::vector<domain::dataset>& datasets);
196 domain::publication_mode mode,
197 const std::string& published_by,
198 const std::map<std::string, domain::artefact_type>& artefact_type_cache);
207 void record_publication(
209 domain::publication_mode mode,
210 const std::string& published_by);
223 domain::publication_mode mode,
224 const std::string& published_by);
Implements logging infrastructure for ORE Studio.
Definition boost_severity.hpp:28
Context for the operations on a postgres database.
Definition context.hpp:47
Maps artefact type codes to their population functions and tables.
Definition artefact_type.hpp:39
Represents a data quality dataset with lineage tracking.
Definition dataset.hpp:37
Result of publishing a single dataset to a target table.
Definition publication_result.hpp:35
Reads artefact_types from data storage.
Definition artefact_type_repository.hpp:39
Reads dataset dependencies from data storage.
Definition dataset_dependency_repository.hpp:35
Reads and writes datasets to data storage.
Definition dataset_repository.hpp:36
Repository for reading and writing publication audit records.
Definition publication_repository.hpp:37
Service for publishing datasets to production tables.
Definition publication_service.hpp:78
publish_bundle_result publish_bundle(const std::string &bundle_code, domain::publication_mode mode, const std::string &published_by, bool atomic=true, const std::string ¶ms_json="")
Publishes all datasets in a bundle.
Definition publication_service.cpp:426
std::vector< domain::publication > get_publication_history(const boost::uuids::uuid &dataset_id)
Gets the publication history for a dataset.
Definition publication_service.cpp:229
std::vector< domain::publication > get_recent_publications(std::uint32_t limit=100)
Gets recent publication history across all datasets.
Definition publication_service.cpp:238
std::vector< domain::publication_result > publish(const std::vector< boost::uuids::uuid > &dataset_ids, domain::publication_mode mode, const std::string &published_by, bool resolve_dependencies=true)
Publishes one or more datasets to production tables.
Definition publication_service.cpp:45
std::vector< domain::dataset > resolve_publication_order(const std::vector< boost::uuids::uuid > &dataset_ids)
Resolves the publication order for datasets.
Definition publication_service.cpp:117