feat: add repo importing

This commit is contained in:
2026-01-17 19:32:37 -08:00
parent 831259a6a6
commit fb62081ca8
28 changed files with 1823 additions and 116 deletions

View File

@@ -1,8 +1,10 @@
use actix_web::{HttpRequest, HttpResponse, web};
use std::collections::HashSet;
use actix_web::{HttpResponse, web};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{AppState, account::AccountRepository, auth::User, error::Result};
use crate::{AppState, auth::User, error::Result};
#[derive(Debug, Serialize, Deserialize)]
pub struct Repository {
@@ -15,6 +17,9 @@ pub struct Repository {
pub stars: Option<usize>,
pub updated_at: DateTime<Utc>,
pub private: bool,
pub default_branch: String,
#[serde(default)]
pub added: bool,
}
pub async fn get_repos(
@@ -22,8 +27,7 @@ pub async fn get_repos(
req: web::ReqData<User>,
) -> Result<HttpResponse> {
let user = req.into_inner();
let query = AccountRepository::new(&app_state.pool);
let token = query.get_access_token(&user.id).await?;
let token = app_state.user.get_access_token(&user.id).await?;
let response = app_state
.reqwest_client
@@ -32,11 +36,24 @@ pub async fn get_repos(
.send()
.await?;
response.error_for_status_ref()?;
let added_ids = app_state
.user
.get_repositories(&user.id)
.await?
.into_iter()
.map(|r| r.id.clone())
.collect::<HashSet<String>>();
tracing::debug!(added_response = ?added_ids);
let data = response
.json::<Vec<Repository>>()
.await?
.into_iter()
.filter(|r| r.private == false)
.filter_map(|mut r| {
(!r.private).then(|| {
r.added = added_ids.contains(&r.id.to_string());
r
})
})
.collect::<Vec<Repository>>();
Ok(HttpResponse::Ok().json(data))