feat: update dependencies and add MinIO integration

- Updated `async-channel` to version 2.5.0 and added new dependencies in `Cargo.lock`.
- Introduced `minio` crate for file upload functionality.
- Added `career_status` field to user-related DTOs and schemas.
- Implemented file upload endpoint in `users_controller.rs` with multipart support.
- Created `MinioService` for handling file uploads to MinIO.
- Updated user seeding and test cases to accommodate new `career_status` field.
- Refactored permissions guard to return user details.
This commit is contained in:
MythEclipse
2025-08-14 13:16:39 +07:00
parent f6232832af
commit 5f51dd281d
16 changed files with 770 additions and 17 deletions
@@ -1,5 +1,5 @@
use super::PermissionsEnum;
use crate::{AppState, AuthRepository, common_response, extract_email, extract_email_async};
use crate::{AppState, AuthRepository, common_response, extract_email, extract_email_async, UsersDetailQueryDto};
use axum::{
http::{HeaderMap, StatusCode},
response::Response,
@@ -9,7 +9,7 @@ pub async fn permissions_guard(
headers: &HeaderMap,
state: AppState,
required_permissions: Vec<PermissionsEnum>,
) -> Result<(), Response> {
) -> Result<UsersDetailQueryDto, Response> {
let auth_repo = AuthRepository::new(&state);
// Try synchronous email extraction first (for internal JWT tokens)
@@ -38,9 +38,8 @@ pub async fn permissions_guard(
"User session expired or not found",
)
})?;
let role = raw_user.role;
let role_permissions: Vec<String> =
role.permissions.into_iter().map(|perm| perm.name).collect();
raw_user.role.permissions.iter().map(|perm| perm.name.clone()).collect();
for required in &required_permissions {
let required_str = required.to_string();
@@ -52,5 +51,5 @@ pub async fn permissions_guard(
));
}
}
Ok(())
Ok(raw_user)
}