userver: samples/ydb_topic_writer_service/src/write_handler.cpp
Loading...
Searching...
No Matches
samples/ydb_topic_writer_service/src/write_handler.cpp
#include "write_handler.hpp"
namespace samples::ydb_topic_writer {
namespace {
constexpr std::string_view kWriterName = "messages";
} // namespace
WriteHandler::WriteHandler(const components::ComponentConfig& config, const components::ComponentContext& context)
writer_manager_{context.FindComponent<ydb::TopicWriterComponent>().GetTopicWriterManager()},
writer_(writer_manager_.GetTopicWriter(kWriterName))
{}
std::string WriteHandler::HandleRequest(server::http::HttpRequest& request, server::request::RequestContext&) const {
request.GetHttpResponse().SetContentType(http::content_type::kTextPlain);
const auto result = writer_.WriteMessage(request.RequestBody(), {});
switch (result.GetStatus()) {
return "Message was written to topic\n";
request.SetResponseStatus(server::http::HttpStatus::kTooManyRequests);
return "Topic writer queue is full\n";
request.SetResponseStatus(server::http::HttpStatus::kInternalServerError);
return "Failed to write message to topic\n";
}
request.SetResponseStatus(server::http::HttpStatus::kInternalServerError);
return "Unexpected topic writer status\n";
}
} // namespace samples::ydb_topic_writer