1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
use std::sync::Arc;
use axum::{Json, extract::Path, Extension};
use solarlib::ship::{Ship, DbShip, Sha256};
use sqlx::{query_as, query};
use crate::{errors::{JsonResult, StringResult}, State};
pub async fn list(state: Extension<Arc<State>>) -> JsonResult<Json<Vec<Ship>>> {
let mut result: Vec<Ship> = Vec::new();
let mut conn = state.conn.acquire().await?;
let db_ships = query_as!(DbShip, "SELECT * FROM ships").fetch_all(&mut conn).await?;
let ships = db_ships.into_iter().map(|d| d.into()).collect::<Vec<Ship>>();
Ok(Json(ships))
}
pub async fn new(Json(new_ship): Json<Ship>, state: Extension<Arc<State>>) -> StringResult {
let mut conn = state.conn.acquire().await?;
query!("INSERT INTO ships (name, shasum, download_url, version) VALUES ($1, $2, $3, $4)", new_ship.name, new_ship.shasum.to_string(), new_ship.download_url, new_ship.version).execute(&mut conn).await?;
Ok("OK")
}
pub async fn delete(Path(shasum): Path<Sha256>, state: Extension<Arc<State>>) -> StringResult {
let mut conn = state.conn.acquire().await?;
query!("DELETE FROM ships WHERE shasum=$1", shasum.to_string()).execute(&mut conn).await?;
Ok("OK")
}
pub async fn get(Path(shasum): Path<Sha256>, state: Extension<Arc<State>>) -> JsonResult<Json<DbShip>> {
let mut conn = state.conn.acquire().await?;
let db_ship = query_as!(DbShip, "SELECT * FROM ships WHERE shasum=$1", shasum.to_string()).fetch_one(&mut conn).await?;
Ok(Json(db_ship))
}
|