Last minute fixes

This commit is contained in:
StNicolay 2024-08-09 20:42:27 +03:00
parent 194210ec89
commit a420c80765
Signed by: StNicolay
GPG Key ID: 9693D04DCD962B0D
7 changed files with 45 additions and 16 deletions

View File

@ -1,3 +1 @@
INSERT INTO folders(parent_folder_id, owner_id, folder_name)
SELECT $1, owner_id, $2 FROM folders WHERE parent_folder_id = $1
RETURNING folder_id
INSERT INTO folders(parent_folder_id, owner_id, folder_name, folder_id) VALUES ($1, $2, $3, $4)

View File

@ -8,7 +8,7 @@ WITH
user_id = $1
)
SELECT
folder_id
folder_id, owner_id, folder_name, created_at
FROM
folders
WHERE

View File

@ -89,10 +89,24 @@ pub async fn name_exists(parent_folder_id: Uuid, name: &str, pool: &Pool) -> sql
/// Creates a folder in the database. Do not use this function to create the ROOT folder
pub async fn insert(parent_folder_id: Uuid, folder_name: &str, pool: &Pool) -> sqlx::Result<Uuid> {
sqlx::query_file!("sql/create_folder.sql", parent_folder_id, folder_name)
.fetch_one(pool)
.await
.map(|record| record.folder_id)
let folder_id = Uuid::now_v7();
let owner_id = get_by_id(parent_folder_id, pool)
.await?
.ok_or(sqlx::Error::RowNotFound)?
.owner_id;
let result = sqlx::query_file!(
"sql/create_folder.sql",
parent_folder_id,
owner_id,
folder_name,
folder_id
)
.execute(pool)
.await?;
if result.rows_affected() == 0 {
return Err(sqlx::Error::RowNotFound);
}
Ok(folder_id)
}
pub fn delete(folder_id: Uuid, pool: &Pool) -> impl Stream<Item = sqlx::Result<Uuid>> + '_ {

View File

@ -1,5 +1,7 @@
use std::{borrow::Cow, collections::HashMap};
use db::folder::FolderWithoutParentId;
use crate::prelude::*;
#[derive(sqlx::Type, Debug, Serialize, Deserialize)]
@ -135,10 +137,16 @@ pub async fn delete_for_folder(folder_id: Uuid, user_id: i32, pool: &Pool) -> sq
.map(|_| ())
}
pub async fn get_top_level_permitted_folders(user_id: i32, pool: &Pool) -> sqlx::Result<Vec<Uuid>> {
sqlx::query_file!("sql/get_top_level_folder.sql", user_id)
.fetch(pool)
.map_ok(|record| record.folder_id)
.try_collect()
.await
pub async fn get_top_level_permitted_folders(
user_id: i32,
pool: &Pool,
) -> sqlx::Result<Vec<FolderWithoutParentId>> {
sqlx::query_file_as!(
FolderWithoutParentId,
"sql/get_top_level_folder.sql",
user_id
)
.fetch(pool)
.try_collect()
.await
}

View File

@ -8,7 +8,7 @@ pub async fn create_user(
pool: &Pool,
) -> sqlx::Result<Option<i32>> {
let Some(record) = sqlx::query!(
"INSERT INTO users(username, email, hashed_password) VALUES ($1, $2, $3) RETURNING user_id",
"INSERT INTO users(username, email, hashed_password) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING RETURNING user_id",
user_name,
user_email,
hashed_password

View File

@ -1,9 +1,11 @@
use db::folder::FolderWithoutParentId;
use crate::prelude::*;
pub async fn get_top_level(
State(pool): State<Pool>,
claims: Claims,
) -> GeneralResult<Json<Vec<Uuid>>> {
) -> GeneralResult<Json<Vec<FolderWithoutParentId>>> {
let folders = db::permissions::get_top_level_permitted_folders(claims.user_id, &pool)
.await
.handle_internal("Error reading from the database")?;

View File

@ -26,6 +26,13 @@ pub async fn set(
.await
.can_manage_guard()?;
if params.user_id == claims.user_id {
return Err(GeneralError::message(
StatusCode::BAD_REQUEST,
"Cannot set your own permissions",
));
}
let folder_info = db::folder::get_by_id(params.folder_id, &pool)
.await
.handle_internal("Error getting folder info")?