Compare commits

..

No commits in common. "433f48ed840f8598263c29d27cd864d9a722815e" and "f78b439a36cdbc477cedb96ff7094aa010b43042" have entirely different histories.

13 changed files with 11 additions and 1797 deletions

1665
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -11,9 +11,6 @@ axum = { version = "0.6.18", features = ["http2"] }
clap = { version = "4.3.12", features = ["env", "derive"] }
futures = "0.3.28"
libarchive = { path = "../libarchive" }
sea-orm = { version = "0.12.1", features = ["sqlx-sqlite", "runtime-tokio-rustls", "macros"] }
sea-orm-migration = "0.12.1"
serde = { version = "1.0.178", features = ["derive"] }
sha256 = "1.1.4"
tokio = { version = "1.29.1", features = ["full"] }
tokio-util = { version = "0.7.8", features = ["io"] }

View File

@ -1,19 +0,0 @@
use axum::Router;
use axum::extract::State;
use axum::routing::get;
use sea_orm::entity::EntityTrait;
use sea_orm::query::QueryOrder;
use axum::Json;
use crate::db::entities::repo;
pub fn router() -> Router<crate::Global> {
Router::new()
.route("/repos", get(get_repos))
}
async fn get_repos(State(global): State<crate::Global>) -> crate::Result<Json<Vec<repo::Model>>> {
let repos = repo::Entity::find().order_by_asc(repo::Column::Id).all(&global.db).await?;
Ok(Json(repos))
}

View File

@ -47,8 +47,6 @@ impl Cli {
pub async fn run(&self) {
self.init_tracing();
let db = crate::db::init("sqlite://test.db?mode=rwc").await.unwrap();
let config = Config {
repo_dir: self.repo_dir.clone(),
pkg_dir: self.pkg_dir.clone(),
@ -58,12 +56,10 @@ impl Cli {
let global = Global {
config,
repo_manager: Arc::new(RwLock::new(repo_manager)),
db
};
// build our application with a single route
let app = Router::new()
.nest("/api", crate::api::router())
.merge(crate::repo::router(&global))
.with_state(global)
.layer(TraceLayer::new_for_http());

View File

@ -1,5 +0,0 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.1
pub mod prelude;
pub mod repo;

View File

@ -1,3 +0,0 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.1
pub use super::repo::Entity as Repo;

View File

@ -1,18 +0,0 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.1
use sea_orm::entity::prelude::*;
use serde::Serialize;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize)]
#[sea_orm(table_name = "repo")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub name: String,
pub description: Option<String>,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -1,47 +0,0 @@
use sea_orm_migration::prelude::*;
pub struct Migration;
impl MigrationName for Migration {
fn name(&self) -> &str {
"m_20230730_000001_create_repo_tables"
}
}
#[async_trait::async_trait]
impl MigrationTrait for Migration {
// Define how to apply this migration: Create the Bakery table.
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_table(
Table::create()
.table(Repo::Table)
.col(
ColumnDef::new(Repo::Id)
.integer()
.not_null()
.auto_increment()
.primary_key(),
)
.col(ColumnDef::new(Repo::Name).string().not_null().unique_key())
.col(ColumnDef::new(Repo::Description).string())
.to_owned(),
)
.await
}
// Define how to rollback this migration: Drop the Bakery table.
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.drop_table(Table::drop().table(Repo::Table).to_owned())
.await
}
}
#[derive(Iden)]
pub enum Repo {
Table,
Id,
Name,
Description,
}

View File

@ -1,12 +0,0 @@
use sea_orm_migration::prelude::*;
pub struct Migrator;
mod m20230730_000001_create_repo_tables;
#[async_trait::async_trait]
impl MigratorTrait for Migrator {
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
vec![Box::new(m20230730_000001_create_repo_tables::Migration)]
}
}

View File

@ -1,17 +0,0 @@
mod migrator;
pub mod entities;
use migrator::Migrator;
use sea_orm::ConnectOptions;
use sea_orm::Database;
use sea_orm_migration::MigratorTrait;
pub async fn init<C: Into<ConnectOptions>>(
opt: C,
) -> Result<sea_orm::DatabaseConnection, sea_orm::DbErr> {
let db = Database::connect(opt).await?;
Migrator::refresh(&db).await?;
Ok(db)
}

View File

@ -10,7 +10,6 @@ pub type Result<T> = std::result::Result<T, ServerError>;
pub enum ServerError {
IO(io::Error),
Axum(axum::Error),
Db(sea_orm::DbErr),
}
impl fmt::Display for ServerError {
@ -18,7 +17,6 @@ impl fmt::Display for ServerError {
match self {
ServerError::IO(err) => write!(fmt, "{}", err),
ServerError::Axum(err) => write!(fmt, "{}", err),
ServerError::Db(err) => write!(fmt, "{}", err),
}
}
}
@ -30,8 +28,6 @@ impl IntoResponse for ServerError {
match self {
ServerError::IO(_) => StatusCode::INTERNAL_SERVER_ERROR.into_response(),
ServerError::Axum(_) => StatusCode::INTERNAL_SERVER_ERROR.into_response(),
ServerError::Db(sea_orm::DbErr::RecordNotFound(_)) => StatusCode::NOT_FOUND.into_response(),
ServerError::Db(_) => StatusCode::INTERNAL_SERVER_ERROR.into_response(),
}
}
}
@ -53,9 +49,3 @@ impl From<tokio::task::JoinError> for ServerError {
ServerError::IO(err.into())
}
}
impl From<sea_orm::DbErr> for ServerError {
fn from(err: sea_orm::DbErr) -> Self {
ServerError::Db(err)
}
}

View File

@ -1,15 +1,12 @@
mod cli;
mod db;
mod error;
mod repo;
mod api;
use clap::Parser;
pub use error::{Result, ServerError};
use repo::RepoGroupManager;
use std::path::PathBuf;
use std::sync::{Arc, RwLock};
use sea_orm::DatabaseConnection;
#[derive(Clone)]
pub struct Config {
@ -21,7 +18,6 @@ pub struct Config {
pub struct Global {
config: Config,
repo_manager: Arc<RwLock<RepoGroupManager>>,
db: DatabaseConnection
}
#[tokio::main]

View File

@ -26,6 +26,7 @@ pub fn router(global: &crate::Global) -> Router<crate::Global> {
delete(delete_package).get(serve_repos.clone()),
)
.fallback(serve_repos)
.with_state(global.clone())
}
async fn post_package_archive(