feat!: add repo searching, only show most relevant repos first

This commit is contained in:
2026-01-16 23:29:15 -08:00
parent 68d9a0a626
commit 831259a6a6
14 changed files with 174 additions and 59 deletions

View File

@@ -2,38 +2,42 @@ use actix_web::{HttpRequest, HttpResponse, web};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{AppState, account::AccountRepository, error::Result};
use crate::{AppState, account::AccountRepository, auth::User, error::Result};
#[derive(Debug, Serialize, Deserialize)]
struct Repository {
id: u64,
name: String,
full_name: String,
description: Option<String>,
language: Option<String>,
pub struct Repository {
pub id: u64,
pub name: String,
pub full_name: String,
pub description: Option<String>,
pub language: Option<String>,
#[serde(alias = "stargazers_count")]
stars: Option<usize>,
updated_at: DateTime<Utc>,
private: bool,
pub stars: Option<usize>,
pub updated_at: DateTime<Utc>,
pub private: bool,
}
pub async fn get_repos(
app_state: web::Data<AppState>,
path: web::Path<String>,
req: web::ReqData<User>,
) -> Result<HttpResponse> {
let user_id = path.into_inner();
let user = req.into_inner();
let query = AccountRepository::new(&app_state.pool);
let token = query.get_access_token(&user_id).await?;
let token = query.get_access_token(&user.id).await?;
let response = app_state
.reqwest_client
.get("https://api.github.com/user/repos?affiliation=owner")
.get("https://api.github.com/user/repos?affiliation=owner&sort=updated&direction=desc&per_page=5")
.bearer_auth(token)
.send()
.await?;
response.error_for_status_ref()?;
let data = response.json::<Vec<Repository>>().await?;
tracing::debug!(github_response = ?data.iter().filter(|r| r.private == true).collect::<Vec<&Repository>>(), "received repos");
let data = response
.json::<Vec<Repository>>()
.await?
.into_iter()
.filter(|r| r.private == false)
.collect::<Vec<Repository>>();
Ok(HttpResponse::Ok().json(data))
}