| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "common/error.hpp"
- #include <sstream>
- namespace smartbotic::common {
- int errorCodeToHttpStatus(ErrorCode code) {
- switch (code) {
- case ErrorCode::InvalidArgument:
- case ErrorCode::ValidationError:
- case ErrorCode::QueryError:
- return 400;
- case ErrorCode::Unauthenticated:
- case ErrorCode::InvalidCredentials:
- case ErrorCode::TokenExpired:
- case ErrorCode::TokenInvalid:
- case ErrorCode::SessionExpired:
- return 401;
- case ErrorCode::PermissionDenied:
- case ErrorCode::InsufficientPermissions:
- return 403;
- case ErrorCode::NotFound:
- case ErrorCode::DocumentNotFound:
- case ErrorCode::CollectionNotFound:
- case ErrorCode::WorkflowNotFound:
- case ErrorCode::NodeNotFound:
- return 404;
- case ErrorCode::AlreadyExists:
- case ErrorCode::VersionConflict:
- return 409;
- case ErrorCode::FailedPrecondition:
- case ErrorCode::WorkflowInactive:
- return 412;
- case ErrorCode::ResourceExhausted:
- return 429;
- case ErrorCode::Timeout:
- case ErrorCode::ExecutionTimeout:
- case ErrorCode::ScriptTimeout:
- return 408;
- case ErrorCode::Unavailable:
- case ErrorCode::RunnerUnavailable:
- case ErrorCode::NoRunnersAvailable:
- case ErrorCode::CircuitBreakerOpen:
- return 503;
- case ErrorCode::Aborted:
- case ErrorCode::ExecutionCancelled:
- return 499;
- default:
- return 500;
- }
- }
- Error::Error(ErrorCode code, std::string message)
- : code_(code), message_(std::move(message)), details_(nlohmann::json::object()) {}
- Error::Error(ErrorCode code, std::string message, nlohmann::json details)
- : code_(code), message_(std::move(message)), details_(std::move(details)) {}
- nlohmann::json Error::toJson() const {
- nlohmann::json j;
- j["code"] = static_cast<int>(code_);
- j["message"] = message_;
- if (!details_.empty()) {
- j["details"] = details_;
- }
- return j;
- }
- std::string Error::toString() const {
- std::ostringstream ss;
- ss << "Error[" << static_cast<int>(code_) << "]: " << message_;
- if (!details_.empty()) {
- ss << " (" << details_.dump() << ")";
- }
- return ss.str();
- }
- Error Error::fromException(const std::exception& e) {
- return Error(ErrorCode::Internal, e.what());
- }
- SmartBoticException::SmartBoticException(Error error)
- : std::runtime_error(error.toString()), error_(std::move(error)) {}
- } // namespace smartbotic::common
|