feat!: start implementing repo listing & auth middleware
This commit is contained in:
35
api/src/endpoints/get_repos.rs
Normal file
35
api/src/endpoints/get_repos.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use actix_web::{HttpRequest, HttpResponse, web};
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{AppState, account::AccountRepository, error::Result};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct Repository {
|
||||
name: String,
|
||||
full_name: String,
|
||||
description: String,
|
||||
language: String,
|
||||
stars: usize,
|
||||
updated_at: DateTime<Utc>,
|
||||
private: bool,
|
||||
}
|
||||
|
||||
pub async fn get_repos(
|
||||
app_state: web::Data<AppState>,
|
||||
path: web::Path<String>,
|
||||
) -> Result<HttpResponse> {
|
||||
let user_id = path.into_inner();
|
||||
let query = AccountRepository::new(&app_state.pool);
|
||||
let token = query.get_access_token(&user_id).await?;
|
||||
|
||||
let response = app_state
|
||||
.reqwest_client
|
||||
.get("https://api.github.com/user/repos")
|
||||
.bearer_auth(token)
|
||||
.send()
|
||||
.await?;
|
||||
response.error_for_status_ref()?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(response.json::<Vec<Repository>>().await?))
|
||||
}
|
||||
Reference in New Issue
Block a user