Files
imphnen-backend-service/imphnen-dimentorin/src/articles/infrastructure/http/routes.rs
T

37 lines
1.2 KiB
Rust

use super::handlers::{
get_article_by_id, get_article_by_slug, get_article_categories,
get_articles_list, post_create_article,
};
use crate::articles::application::ArticleServiceImpl;
use crate::articles::domain::ArticleService;
use crate::articles::infrastructure::persistence::PostgresArticleRepository;
use axum::{Extension, Router, routing::{get, post}};
use imphnen_libs::AppState;
use sea_orm::DatabaseConnection;
use std::sync::Arc;
fn build_service(db: DatabaseConnection) -> Arc<dyn ArticleService> {
let repo = Arc::new(PostgresArticleRepository::new(db));
Arc::new(ArticleServiceImpl::new(repo))
}
pub fn articles_public_routes(db: DatabaseConnection) -> Router {
let service = build_service(db);
Router::new()
.route("/articles", get(get_articles_list))
.route("/articles/categories", get(get_article_categories))
.route("/articles/slug/{slug}", get(get_article_by_slug))
.route("/articles/{id}", get(get_article_by_id))
.layer(Extension(service))
}
pub fn articles_protected_routes(
db: DatabaseConnection,
state: Arc<AppState>,
) -> Router {
let service = build_service(db);
Router::new()
.route("/articles/create", post(post_create_article))
.layer(Extension(service))
.layer(Extension((*state).clone()))
}