Skip to content

Commit

Permalink
Creating Model + Tickets endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
root authored and root committed Jan 31, 2024
1 parent bc076b4 commit 4cf7d01
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use axum::{
routing::{get, get_service},
Router,
};
use model::ModelController;
use tower_cookies::{CookieManager, CookieManagerLayer};

pub use self::error::{Error, Result};
Expand All @@ -22,14 +23,18 @@ mod model;
mod web;

#[tokio::main]
async fn main() {
async fn main() -> Result<()> {
// Initialize Model controller
let mc = ModelController::new().await?;

let cors = CorsLayer::new()
.allow_methods([Method::GET, Method::POST])
.allow_headers(vec![HeaderName::from_static("content-type")])
.allow_origin(Any);

let routes_all = Router::new()
.merge(web::routes_login::routes())
.nest("/api", web::routes_tickets::routes(mc.clone()))
.layer(cors)
.layer(middleware::map_response(main_response_mapper))
.layer(CookieManagerLayer::new())
Expand All @@ -39,6 +44,8 @@ async fn main() {
axum::serve(listener, routes_all.into_make_service())
.await
.unwrap();

Ok(())
}

async fn main_response_mapper(res: Response) -> Response {
Expand Down
1 change: 1 addition & 0 deletions src/web/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub mod routes_login;
pub mod routes_tickets;

pub const AUTH_TOKEN: &str = "auth-token";
41 changes: 41 additions & 0 deletions src/web/routes_tickets.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use axum::{
extract::{Path, State},
routing::{delete, post},
Json, Router,
};

use crate::{
model::{ModelController, Ticket, TicketForCreate},
Result,
};

async fn create_ticket(
State(mc): State<ModelController>,
Json(ticket_fc): Json<TicketForCreate>,
) -> Result<Json<Ticket>> {
let ticket = mc.create_ticket(ticket_fc).await?;

Ok(Json(ticket))
}

async fn list_tickets(State(mc): State<ModelController>) -> Result<Json<Vec<Ticket>>> {
let tickets = mc.list_tickets().await?;

Ok(Json(tickets))
}

async fn delete_ticket(
State(mc): State<ModelController>,
Path(id): Path<u64>,
) -> Result<Json<Ticket>> {
let ticket = mc.delete_ticket(id).await?;

Ok(Json(ticket))
}

pub fn routes(mc: ModelController) -> Router {
Router::new()
.route("/tickets", post(create_ticket).get(list_tickets))
.route("/tickets/:id", delete(delete_ticket))
.with_state(mc)
}
11 changes: 11 additions & 0 deletions tests/quick_dev.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,16 @@ async fn quick_dev() -> Result<()> {

req_login.await?.print().await?;

let req_create_ticket = hc.do_post(
"/api/tickets",
json!({
"title": "Ticket AAA",
}),
);

req_create_ticket.await?.print().await?;

hc.do_get("/api/tickets").await?.print().await?;

Ok(())
}

0 comments on commit 4cf7d01

Please sign in to comment.