Some checks failed
BotServer CI / build (push) Failing after 1m34s
Split 20+ files over 1000 lines into focused subdirectories for better maintainability and code organization. All changes maintain backward compatibility through re-export wrappers. Major splits: - attendance/llm_assist.rs (2074→7 modules) - basic/keywords/face_api.rs → face_api/ (7 modules) - basic/keywords/file_operations.rs → file_ops/ (8 modules) - basic/keywords/hear_talk.rs → hearing/ (6 modules) - channels/wechat.rs → wechat/ (10 modules) - channels/youtube.rs → youtube/ (5 modules) - contacts/mod.rs → contacts_api/ (6 modules) - core/bootstrap/mod.rs → bootstrap/ (5 modules) - core/shared/admin.rs → admin_*.rs (5 modules) - designer/canvas.rs → canvas_api/ (6 modules) - designer/mod.rs → designer_api/ (6 modules) - docs/handlers.rs → handlers_api/ (11 modules) - drive/mod.rs → drive_handlers.rs, drive_types.rs - learn/mod.rs → types.rs - main.rs → main_module/ (7 modules) - meet/webinar.rs → webinar_api/ (8 modules) - paper/mod.rs → (10 modules) - security/auth.rs → auth_api/ (7 modules) - security/passkey.rs → (4 modules) - sources/mod.rs → sources_api/ (5 modules) - tasks/mod.rs → task_api/ (5 modules) Stats: 38,040 deletions, 1,315 additions across 318 files Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
54 lines
2.1 KiB
Rust
54 lines
2.1 KiB
Rust
use axum::{http::StatusCode, response::IntoResponse};
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub enum WebinarError {
|
|
DatabaseConnection,
|
|
NotFound,
|
|
NotAuthorized,
|
|
CreateFailed,
|
|
UpdateFailed,
|
|
JoinFailed,
|
|
InvalidState(String),
|
|
InvalidInput(String),
|
|
FeatureDisabled(String),
|
|
RegistrationNotRequired,
|
|
RegistrationFailed,
|
|
AlreadyRegistered,
|
|
MaxParticipantsReached,
|
|
}
|
|
|
|
impl std::fmt::Display for WebinarError {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
Self::DatabaseConnection => write!(f, "Database connection failed"),
|
|
Self::NotFound => write!(f, "Webinar not found"),
|
|
Self::NotAuthorized => write!(f, "Not authorized"),
|
|
Self::CreateFailed => write!(f, "Failed to create"),
|
|
Self::UpdateFailed => write!(f, "Failed to update"),
|
|
Self::JoinFailed => write!(f, "Failed to join"),
|
|
Self::InvalidState(msg) => write!(f, "Invalid state: {msg}"),
|
|
Self::InvalidInput(msg) => write!(f, "Invalid input: {msg}"),
|
|
Self::FeatureDisabled(msg) => write!(f, "Feature disabled: {msg}"),
|
|
Self::RegistrationNotRequired => write!(f, "Registration not required"),
|
|
Self::RegistrationFailed => write!(f, "Registration failed"),
|
|
Self::AlreadyRegistered => write!(f, "Already registered"),
|
|
Self::MaxParticipantsReached => write!(f, "Maximum participants reached"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for WebinarError {}
|
|
|
|
impl IntoResponse for WebinarError {
|
|
fn into_response(self) -> axum::response::Response {
|
|
let status = match self {
|
|
Self::NotFound => StatusCode::NOT_FOUND,
|
|
Self::NotAuthorized => StatusCode::FORBIDDEN,
|
|
Self::AlreadyRegistered => StatusCode::CONFLICT,
|
|
Self::InvalidInput(_) | Self::InvalidState(_) => StatusCode::BAD_REQUEST,
|
|
Self::MaxParticipantsReached => StatusCode::SERVICE_UNAVAILABLE,
|
|
_ => StatusCode::INTERNAL_SERVER_ERROR,
|
|
};
|
|
(status, self.to_string()).into_response()
|
|
}
|
|
}
|