micron 0.1.0

Build web apps fast. Repeat.
Documentation
use std::sync::Arc;

use axum::extract::Path;
use axum::response::IntoResponse;
use axum::routing::get;
use axum::Extension;

use crate::db::Database;
use crate::Result;
use crate::{Image, User, UserId};

use super::extract;
use super::{DbExt, Router};

pub fn router() -> Router {
    Router::new()
        .route("/avatar", get(my_avatar))
        .route("/avatar/:user_id", get(avatar))
}

pub async fn my_avatar(user: extract::User, Extension(db): DbExt) -> Result<impl IntoResponse> {
    let image = db.get::<Image>(user.avatar)?;
    Ok((
        axum::response::AppendHeaders([(axum::http::header::CONTENT_TYPE, "image/png")]),
        image.bytes,
    ))
}

pub async fn avatar(
    Path(user_id): Path<UserId>,
    Extension(db): DbExt,
) -> Result<impl IntoResponse> {
    let user = db.get::<User>(user_id)?;
    let image = db.get::<Image>(user.avatar)?;
    Ok((
        axum::response::AppendHeaders([(axum::http::header::CONTENT_TYPE, "image/png")]),
        image.bytes,
    ))
}