chore(infra): add gRPC layer, update protobufs, remove immediate module
- Add gRPC service modules: auth, channel, channel settings, member, permission - Update protobuf definitions and generated code - Remove immediate/ real-time module (superseded by IM service) - Update etcd discovery and registration - Update cache, error, config, and build infrastructure - Add ADR documentation - Update OpenAPI spec
This commit is contained in:
@@ -14,9 +14,6 @@ pub enum AppError {
|
||||
#[error("redis error: {0}")]
|
||||
Redis(#[from] redis::RedisError),
|
||||
|
||||
#[error("r2d2 error: {0}")]
|
||||
R2d2(#[from] r2d2::Error),
|
||||
|
||||
#[error("json error: {0}")]
|
||||
Json(#[from] serde_json::Error),
|
||||
|
||||
@@ -131,6 +128,7 @@ impl actix_web::ResponseError for AppError {
|
||||
| AppError::InvalidEmailCode
|
||||
| AppError::RsaDecodeError
|
||||
| AppError::RsaGenerationError => StatusCode::BAD_REQUEST,
|
||||
AppError::Database(e) => db_error_status_code(e),
|
||||
AppError::PasswordHashError(_) => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
}
|
||||
@@ -139,6 +137,7 @@ impl actix_web::ResponseError for AppError {
|
||||
fn error_response(&self) -> HttpResponse {
|
||||
let status = self.status_code();
|
||||
let message = if status == actix_web::http::StatusCode::INTERNAL_SERVER_ERROR {
|
||||
tracing::error!(?self, "internal server error");
|
||||
"internal server error".to_string()
|
||||
} else {
|
||||
self.to_string()
|
||||
@@ -146,3 +145,25 @@ impl actix_web::ResponseError for AppError {
|
||||
HttpResponse::build(status).json(serde_json::json!({ "error": message }))
|
||||
}
|
||||
}
|
||||
|
||||
fn db_error_status_code(e: &sqlx::Error) -> actix_web::http::StatusCode {
|
||||
use actix_web::http::StatusCode;
|
||||
match e {
|
||||
sqlx::Error::Database(db_err) => {
|
||||
match db_err.code().as_ref().map(|c| c.as_ref()) {
|
||||
// unique_violation
|
||||
Some("23505") => StatusCode::CONFLICT,
|
||||
// foreign_key_violation
|
||||
Some("23503") => StatusCode::CONFLICT,
|
||||
// check_violation
|
||||
Some("23514") => StatusCode::BAD_REQUEST,
|
||||
// not_null_violation
|
||||
Some("23502") => StatusCode::BAD_REQUEST,
|
||||
// exclusion_violation
|
||||
Some("23P01") => StatusCode::CONFLICT,
|
||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
}
|
||||
}
|
||||
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user