gitdataai/libs/api/user/mod.rs
ZhenYi 8b47f677bb
Some checks are pending
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
fix(avatar): add upload API routes and fix URL path prefix
- Add /api/users/me/avatar and /api/projects/{name}/avatar multipart upload endpoints
- Fix avatar URL path: missing /avatar prefix (static.gitdata.ai/avatar/{file})
- Fix project avatar: Utc::now() → .timestamp(), missing extension, wrong return type
- Replace broken SkipNoisyPaths middleware with self-contained RequestLogger
  (actix-web 4.13 body type incompatibility with newer actix-http)
- Exclude /assets/* requests from main app logger
- Exclude /avatar/*, /blob/*, /media/*, /static/* from static server logger
- Fix TypingEvent missing sender_type field in ws_universal.rs and connection.rs
- Wire real fetch-based upload in user profile settings
- Add project avatar upload UI to project settings page
2026-04-25 23:19:22 +08:00

137 lines
4.7 KiB
Rust

pub mod access_key;
pub mod avatar;
pub mod chpc;
pub mod notification;
pub mod preferences;
pub mod profile;
pub mod projects;
pub mod repository;
pub mod ssh_key;
pub mod stars;
pub mod subscribe;
pub mod user_activity;
pub mod user_info;
use actix_web::web;
pub fn init_user_routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/users")
.route("/me/profile", web::get().to(profile::get_my_profile))
.route("/me/profile", web::patch().to(profile::update_my_profile))
.route("/me/avatar", web::post().to(avatar::upload_avatar))
.route(
"/me/preferences",
web::get().to(preferences::get_preferences),
)
.route(
"/me/preferences",
web::patch().to(preferences::update_preferences),
)
.route("/me/keys", web::post().to(ssh_key::add_ssh_key))
.route("/me/keys", web::get().to(ssh_key::list_ssh_keys))
.route("/me/keys/{key_id}", web::get().to(ssh_key::get_ssh_key))
.route(
"/me/keys/{key_id}",
web::patch().to(ssh_key::update_ssh_key),
)
.route(
"/me/keys/{key_id}",
web::delete().to(ssh_key::delete_ssh_key),
)
.route(
"/me/access-keys",
web::post().to(access_key::create_access_key),
)
.route(
"/me/access-keys",
web::get().to(access_key::list_access_keys),
)
.route(
"/me/access-keys/{access_key_id}",
web::delete().to(access_key::delete_access_key),
)
.route(
"/me/notifications/preferences",
web::get().to(notification::get_notification_preferences),
)
.route(
"/me/notifications/preferences",
web::patch().to(notification::update_notification_preferences),
)
.route(
"/me/notifications/push/vapid-key",
web::get().to(notification::get_vapid_public_key),
)
.route(
"/me/notifications/push/subscription",
web::delete().to(notification::unsubscribe_push),
)
.route(
"/me/heatmap",
web::get().to(chpc::get_my_contribution_heatmap),
)
.route(
"/me/projects",
web::get().to(projects::get_current_user_projects),
)
.route(
"/me/repos",
web::get().to(repository::get_current_user_repos),
)
// /users/{username}/...
.route(
"/{username}",
web::get().to(profile::get_profile_by_username),
)
.route("/{username}/info", web::get().to(user_info::get_user_info))
.route(
"/{username}/heatmap",
web::get().to(chpc::get_contribution_heatmap),
)
.route("/{username}/keys", web::get().to(ssh_key::list_ssh_keys))
.route("/{username}/activity", web::get().to(user_activity::get_user_activity))
.route("/{username}/stars", web::get().to(stars::get_user_stars))
.route(
"/{username}/keys/{key_id}",
web::get().to(ssh_key::get_ssh_key),
)
.route(
"/{username}/projects",
web::get().to(projects::get_user_projects),
)
.route(
"/{username}/repos",
web::get().to(repository::get_user_repos),
)
.route(
"/{username}/follow",
web::post().to(subscribe::subscribe_target),
)
.route(
"/{username}/follow",
web::delete().to(subscribe::unsubscribe_target),
)
.route(
"/{username}/follow",
web::get().to(subscribe::is_subscribed_to_target),
)
.route(
"/{username}/followers",
web::get().to(subscribe::get_subscribers),
)
.route(
"/{username}/following/count",
web::get().to(subscribe::get_subscription_count),
)
.route(
"/{username}/following",
web::get().to(subscribe::get_following_list),
)
.route(
"/{username}/followers/count",
web::get().to(subscribe::get_subscriber_count),
),
);
}