progress
This commit is contained in:
46
src/api.rs
46
src/api.rs
@ -1,14 +1,13 @@
|
||||
use crate::db;
|
||||
use crate::nip98::Nip98Auth;
|
||||
use crate::provisioner::Provisioner;
|
||||
use anyhow::Error;
|
||||
use lnvps_db::{LNVpsDb, Vm, VmTemplate};
|
||||
use rocket::serde::json::Json;
|
||||
use rocket::{get, post, routes, Data, Responder, Route, State};
|
||||
use rocket::{get, post, routes, Responder, Route, State};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use crate::vm::VMSpec;
|
||||
|
||||
pub fn routes() -> Vec<Route> {
|
||||
routes![v1_list_vms]
|
||||
routes![v1_list_vms, v1_list_vm_templates, v1_provision_vm]
|
||||
}
|
||||
|
||||
type ApiResult<T> = Result<Json<ApiData<T>>, ApiError>;
|
||||
@ -38,35 +37,40 @@ impl From<Error> for ApiError {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct CreateVmRequest {}
|
||||
|
||||
impl From<CreateVmRequest> for VMSpec {
|
||||
fn from(value: CreateVmRequest) -> Self {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/api/v1/vms")]
|
||||
async fn v1_list_vms(auth: Nip98Auth, provisioner: &State<Provisioner>) -> ApiResult<Vec<db::Vm>> {
|
||||
async fn v1_list_vms(auth: Nip98Auth, db: &State<Box<dyn LNVpsDb>>) -> ApiResult<Vec<Vm>> {
|
||||
let pubkey = auth.event.pubkey.to_bytes();
|
||||
let uid = provisioner.upsert_user(&pubkey).await?;
|
||||
let vms = provisioner.list_vms(uid).await?;
|
||||
let uid = db.upsert_user(&pubkey).await?;
|
||||
let vms = db.list_user_vms(uid).await?;
|
||||
ApiData::ok(vms)
|
||||
}
|
||||
|
||||
#[get("/api/v1/vm/templates")]
|
||||
async fn v1_list_vm_templates(provisioner: &State<Provisioner>) -> ApiResult<Vec<db::VmTemplate>> {
|
||||
let vms = provisioner.list_vm_templates().await?;
|
||||
async fn v1_list_vm_templates(db: &State<Box<dyn LNVpsDb>>) -> ApiResult<Vec<VmTemplate>> {
|
||||
let vms = db.list_vm_templates().await?;
|
||||
ApiData::ok(vms)
|
||||
}
|
||||
|
||||
#[post("/api/v1/vm", data = "<req>", format = "json")]
|
||||
async fn v1_provision_vm(auth: Nip98Auth, provisioner: &State<Provisioner>, req: Json<CreateVmRequest>) -> ApiResult<db::Vm> {
|
||||
async fn v1_provision_vm(
|
||||
auth: Nip98Auth,
|
||||
db: &State<Box<dyn LNVpsDb>>,
|
||||
provisioner: &State<Box<dyn Provisioner>>,
|
||||
req: Json<CreateVmRequest>,
|
||||
) -> ApiResult<Vm> {
|
||||
let pubkey = auth.event.pubkey.to_bytes();
|
||||
let uid = provisioner.upsert_user(&pubkey).await?;
|
||||
let uid = db.upsert_user(&pubkey).await?;
|
||||
|
||||
let req = req.0;
|
||||
let rsp = provisioner.provision(req.into()).await?;
|
||||
ApiData::ok(rsp)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct CreateVmRequest {}
|
||||
|
||||
impl Into<VmTemplate> for CreateVmRequest {
|
||||
fn into(self) -> VmTemplate {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user