-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- **feat: Add item http api framework** - **feat: Adding create-item to core** - **feat: wire api create-item to entity** - **feat: Add item adapter** - **feat: Add new item to database**
- Loading branch information
Showing
25 changed files
with
264 additions
and
30 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,14 @@ | ||
pub(crate) mod health; | ||
use std::{sync::Arc, time::Duration}; | ||
|
||
use arch_domain_api::ArchApi; | ||
use axum::Router; | ||
use tower_http::timeout::TimeoutLayer; | ||
|
||
pub(crate) mod items; | ||
|
||
pub(crate) fn get_routes(arch_api: Arc<ArchApi>) -> Router<()> { | ||
let items_routes = items::get_routes(arch_api.clone()); | ||
axum::Router::new() | ||
.nest("/items", items_routes) | ||
.layer(TimeoutLayer::new(Duration::from_secs(2))) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
use std::{sync::Arc, time::Duration}; | ||
|
||
use arch_domain_api::{ArchApi, ItemApi}; | ||
use arch_domain_models::item::NewItem; | ||
use arch_utils::arcbox::ArcBox; | ||
use axum::{ | ||
extract::{Path, State}, | ||
routing::{get, post}, | ||
Json, Router, | ||
}; | ||
use hyper::StatusCode; | ||
use serde::{Deserialize, Serialize}; | ||
use tower_http::timeout::TimeoutLayer; | ||
use uuid::Uuid; | ||
|
||
#[derive(Debug, Serialize)] | ||
struct Item { | ||
pub id: i64, | ||
pub version: i32, | ||
pub uuid: Uuid, | ||
pub text: String, | ||
} | ||
|
||
#[derive(Deserialize)] | ||
struct ItemParams { | ||
text: String, | ||
} | ||
|
||
pub(crate) fn get_routes(arch_api: Arc<ArchApi>) -> Router<()> { | ||
Router::new() | ||
.route("/:id", get(get_item)) | ||
.route("/", post(create_item)) | ||
.with_state(arch_api.item_api.clone()) | ||
.layer(TimeoutLayer::new(Duration::from_secs(2))) | ||
} | ||
|
||
#[tracing::instrument(level = "trace", skip(_id))] | ||
async fn get_item(Path(_id): Path<Uuid>) -> Result<Json<Item>, StatusCode> { | ||
Err(StatusCode::BAD_REQUEST) | ||
} | ||
|
||
#[tracing::instrument(level = "trace", skip(item_api, params))] | ||
async fn create_item(State(item_api): State<ArcBox<dyn ItemApi>>, Json(params): Json<ItemParams>) -> Result<Json<Item>, StatusCode> { | ||
let new_item = NewItem { text: params.text }; | ||
|
||
match item_api.create_item(&new_item).await { | ||
Err(_) => Err(StatusCode::BAD_REQUEST), | ||
Ok(item) => Ok(Json(item.into())), | ||
} | ||
} | ||
|
||
impl From<arch_domain_models::item::Item> for Item { | ||
fn from(value: arch_domain_models::item::Item) -> Self { | ||
Item { | ||
id: value.id, | ||
version: value.version, | ||
uuid: value.uuid, | ||
text: value.text, | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
use arch_domain_models::item::{Item, NewItem}; | ||
use sea_orm_migration::async_trait::async_trait; | ||
|
||
use crate::Error; | ||
|
||
pub(crate) mod item; | ||
|
||
#[async_trait] | ||
pub trait ItemAdapter: Send + Sync { | ||
async fn create_item(&self, new_item: &NewItem) -> Result<Item, Error>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
use std::sync::Arc; | ||
|
||
use arch_domain_models::item::{Item, NewItem}; | ||
use sea_orm::{prelude::Uuid, ActiveModelTrait, Set, TransactionTrait}; | ||
use sea_orm_migration::async_trait::async_trait; | ||
|
||
use crate::{entities::items, Error, Repository}; | ||
|
||
use super::ItemAdapter; | ||
|
||
pub(crate) struct ItemAdapterImpl { | ||
repository: Arc<Repository>, | ||
} | ||
|
||
impl ItemAdapterImpl { | ||
pub(crate) fn new(repository: Arc<Repository>) -> Self { | ||
Self { repository } | ||
} | ||
|
||
fn from_model(model: items::Model) -> Item { | ||
Item { | ||
id: model.id, | ||
version: model.version, | ||
uuid: model.uuid, | ||
text: model.text, | ||
} | ||
} | ||
} | ||
|
||
#[async_trait] | ||
impl ItemAdapter for ItemAdapterImpl { | ||
#[tracing::instrument(level = "trace", skip(self, new_item))] | ||
async fn create_item(&self, new_item: &NewItem) -> Result<Item, Error> { | ||
let new_item = items::ActiveModel { | ||
version: Set(0), | ||
uuid: Set(Uuid::new_v4()), | ||
text: Set(new_item.text.clone()), | ||
..Default::default() | ||
}; | ||
|
||
let tx = self.repository.database.begin().await?; | ||
let item = new_item.insert(&tx).await?; | ||
tx.commit().await?; | ||
|
||
Ok(ItemAdapterImpl::from_model(item)) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,8 @@ | ||
#[derive(Debug, thiserror::Error)] | ||
pub enum Error {} | ||
pub enum Error { | ||
#[error("{0}")] | ||
Message(String), | ||
|
||
#[error(transparent)] | ||
DatabaseError(#[from] arch_db::Error), | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
use arch_domain_models::item::{Item, NewItem}; | ||
use async_trait::async_trait; | ||
|
||
use crate::Error; | ||
|
||
#[async_trait] | ||
pub trait ItemApi: Send + Sync { | ||
async fn create_item(&self, new_item: &NewItem) -> Result<Item, Error>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,14 @@ | ||
mod error; | ||
mod health; | ||
pub mod item; | ||
|
||
use arch_utils::arcbox::ArcBox; | ||
|
||
pub use error::Error; | ||
pub use health::HealthApi; | ||
pub use item::ItemApi; | ||
|
||
pub struct ArchApi { | ||
pub health_api: ArcBox<dyn HealthApi>, | ||
pub item_api: ArcBox<dyn ItemApi>, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.