feat(auth): Implement Google OAuth 2.0 integration with user creation and JWT generation

- Added Google OAuth controller and service to handle authentication via Google.
- Introduced DTOs for Google user and token responses.
- Updated AuthService and UsersService traits to support new Google OAuth functionality.
- Implemented logic to create a new user if they do not exist in the system after Google authentication.
- Enhanced existing user retrieval and JWT generation upon successful login.
- Added tests for Google OAuth flow, including login redirection and callback handling for both new and existing users.
- Updated environment configuration to include Google OAuth credentials.
This commit is contained in:
MythEclipse
2025-08-11 22:31:51 +07:00
parent c6a95c1231
commit cda950ed7e
22 changed files with 1144 additions and 104 deletions
+1
View File
@@ -8,4 +8,5 @@ axum.workspace = true
serde.workspace = true
utoipa.workspace = true
surrealdb.workspace = true
anyhow.workspace = true
thiserror.workspace = true
+15
View File
@@ -9,6 +9,10 @@ pub mod error {
pub enum Error {
#[error("database error: {0}")]
Db(String),
#[error("anyhow error: {0}")]
Anyhow(#[from] anyhow::Error),
#[error("HTTP status code error: {0}")]
StatusCode(StatusCode),
}
impl IntoResponse for Error {
@@ -18,6 +22,11 @@ pub mod error {
StatusCode::INTERNAL_SERVER_ERROR,
format!("Database error: {detail}"),
),
Error::Anyhow(detail) => (
StatusCode::INTERNAL_SERVER_ERROR,
format!("Internal server error: {detail}"),
),
Error::StatusCode(s) => (s, format!("HTTP error: {}", s)),
};
(status, Json(error_message)).into_response()
}
@@ -28,4 +37,10 @@ pub mod error {
Self::Db(error.to_string())
}
}
impl From<StatusCode> for Error {
fn from(status: StatusCode) -> Self {
Self::StatusCode(status)
}
}
}