feat(servers): implement create, delete, edit, fetch

This commit is contained in:
Paul Makles
2022-02-10 18:30:36 +00:00
parent f676071641
commit 37ffde23ce
8 changed files with 235 additions and 30 deletions

View File

@@ -1,13 +1,16 @@
use std::collections::HashMap;
use revolt_quark::{EmptyResponse, Result};
use revolt_quark::{
models::{Server, User},
Db, Error, Result, DEFAULT_PERMISSION_CHANNEL_SERVER, DEFAULT_SERVER_PERMISSION,
};
use mongodb::bson::doc;
use rocket::serde::json::{Json, Value};
use rocket::serde::json::Json;
use serde::{Deserialize, Serialize};
use ulid::Ulid;
use validator::Validate;
use crate::util::variables::MAX_SERVER_COUNT;
#[derive(Validate, Serialize, Deserialize)]
pub struct Data {
#[validate(length(min = 1, max = 32))]
@@ -19,6 +22,35 @@ pub struct Data {
}
#[post("/create", data = "<info>")]
pub async fn req(/*_idempotency: IdempotencyKey, user: User,*/ info: Json<Data>,) -> Result<Value> {
todo!()
pub async fn req(db: &Db, user: User, info: Json<Data>) -> Result<Json<Server>> {
let info = info.into_inner();
info.validate()
.map_err(|error| Error::FailedValidation { error })?;
if !user.can_acquire_server(db).await? {
return Err(Error::TooManyServers {
max: *MAX_SERVER_COUNT,
});
}
let Data {
name,
description,
nsfw,
} = info;
let server = Server {
id: Ulid::new().to_string(),
name,
description,
nsfw: nsfw.unwrap_or(false),
default_permissions: (
*DEFAULT_SERVER_PERMISSION as i32,
*DEFAULT_PERMISSION_CHANNEL_SERVER as i32,
),
..Default::default()
};
db.insert_server(&server).await?;
Ok(Json(server))
}