Skip to content

Commit 487853b

Browse files
committed
folders
1 parent 10b827e commit 487853b

File tree

4 files changed

+131
-0
lines changed

4 files changed

+131
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from fastapi import APIRouter
2+
from app.api.v1.web.drive.folders import api as folders_router
3+
4+
5+
api_router = APIRouter()
6+
7+
api_router.prefix = "/drive"
8+
9+
api_router.include_router(folders_router.router, tags=["Drive: Folders"])
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from fastapi import APIRouter,Depends
2+
from app.api.v1.web.drive.folders.schema import CreateFolder, RenameFolder, MoveFolder, DeleteFolders
3+
from app.api.v1.web.auth.schema import UserDetails
4+
from app.framework.permission_services.service import get_current_user
5+
from app.api.v1.web.drive.folders.services import create_folder,delete_folders,rename_folder, move_folders
6+
7+
FOLDER_URL ="/folder"
8+
router = APIRouter()
9+
10+
@router.post(FOLDER_URL+"/create")
11+
async def create_folder_api(payload: CreateFolder, user: UserDetails = Depends(get_current_user)):
12+
return await create_folder(user, payload.model_dump())
13+
14+
15+
@router.delete(FOLDER_URL+"/delete")
16+
async def delete_folder_api(payload: DeleteFolders, user: UserDetails = Depends(get_current_user)):
17+
return await delete_folders(user, payload.model_dump())
18+
19+
20+
@router.post(FOLDER_URL+"/rename")
21+
async def rename_folder_api(payload: RenameFolder, user: UserDetails = Depends(get_current_user)):
22+
return await rename_folder(user, payload.model_dump())
23+
24+
25+
@router.post(FOLDER_URL+"/move")
26+
async def move_folder_api(payload: MoveFolder, user: UserDetails = Depends(get_current_user)):
27+
return await move_folders(user, payload.model_dump())
28+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from pydantic import BaseModel, Field
2+
from typing import Optional, List
3+
from datetime import datetime
4+
5+
class CreateFolder(BaseModel):
6+
name: str
7+
parent_id: str
8+
9+
class RenameFolder(BaseModel):
10+
name: str
11+
folder_id: str
12+
parent_id: Optional[str] = None
13+
14+
class MoveFolder(BaseModel):
15+
folder_ids: List[str]
16+
parent_id: str
17+
18+
class DeleteFolders(BaseModel):
19+
folder_ids: List[str]
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
from app.framework.mongo_db import base_manager as db_manager
3+
from app.managers.collection_names import FILES, FOLDERS
4+
from app.utils.utils import response_helper, create_uuid, create_timestamp
5+
from app.utils.i8ns import translate
6+
7+
async def create_folder(user, payload):
8+
db = user.get("db")
9+
folder_id = create_uuid()
10+
query={
11+
"created_by": user.get("user_id"),
12+
"lower_name": payload.get("name").strip().lower(),
13+
}
14+
if payload.get("parent_id"):
15+
query["parent_id"] = payload.get("parent_id")
16+
folder = db_manager.find_one(db, FOLDERS, query)
17+
if folder:
18+
return response_helper(400, translate("drive.folders.already_exists"))
19+
20+
folder = {
21+
"doc_id": folder_id,
22+
"name": payload.get("name"),
23+
"parent_id": payload.get("parent_id"),
24+
"created_by": user.get("user_id"),
25+
"lower_name": payload.get("name").strip().lower(),
26+
"created_at": create_timestamp(),
27+
28+
}
29+
db_manager.insert_one(db, FOLDERS, folder)
30+
return response_helper(200, translate("drive.folders.created"))
31+
32+
33+
async def delete_folders(user, payload):
34+
db = user.get("db")
35+
folder_ids = payload.get("folder_ids")
36+
user_id = user.get("user_id")
37+
db_manager.update_many(db, FOLDERS, {"doc_id": {"$in":folder_ids}, "created_by": user_id}, {"$set": {"access": False,"delete_by":user_id, "deleted_at": create_timestamp()}})
38+
return response_helper(200, translate("drive.folders.deleted"))
39+
40+
41+
async def rename_folder(user, payload):
42+
db = user.get("db")
43+
name = payload.get("name").strip()
44+
folder_id = payload.get("folder_id")
45+
lower_name= name.lower()
46+
query={"created_by": user.get("user_id"), "lower_name": lower_name}
47+
48+
if payload.get("parent_id"):
49+
query["parent_id"] = payload.get("parent_id")
50+
folder = db_manager.find_one(db, FOLDERS, query)
51+
52+
if folder:
53+
return response_helper(400, translate("drive.folders.already_exists"))
54+
55+
db_manager.update_one(db, FOLDERS, {"doc_id": folder_id, "created_by": user.get("user_id")}, {"$set": {"name": name, "lower_name": lower_name}})
56+
return response_helper(200, translate("drive.folders.renamed"))
57+
58+
59+
async def move_folders(user, payload):
60+
db = user.get("db")
61+
folder_ids = payload.get("folder_ids")
62+
parent_id = payload.get("parent_id")
63+
query={"created_by": user.get("user_id"), "doc_id": {"$in":folder_ids}}
64+
folders = db_manager.find(db, FOLDERS, query)
65+
folders_moved=[]
66+
for item in folders:
67+
individual_query={"created_by": user.get("user_id"), "parent_id": parent_id, "lower_name": item.get("lower_name")}
68+
if not db_manager.find_one(db, FOLDERS, individual_query):
69+
db_manager.update_one(db, FOLDERS, {"doc_id": item.get("doc_id")}, {"$set": {"parent_id": parent_id}})
70+
folders_moved.append(item.get("name"))
71+
72+
73+
db_manager.update_many(db, FOLDERS, {"doc_id": {"$in":folder_ids}, "created_by": user.get("user_id")}, {"$set": {"parent_id": parent_id}})
74+
return response_helper(200, translate("drive.folders.moved"), folders_moved=folders_moved)
75+

0 commit comments

Comments
 (0)