backend: fix and fix

This commit is contained in:
L-Nafaryus 2024-09-20 23:16:41 +05:00
parent dcdfcec05f
commit 8b1ffb202e
Signed by: L-Nafaryus
GPG Key ID: 553C97999B363D38
6 changed files with 49 additions and 26 deletions

View File

@ -16,6 +16,7 @@ from materia.models.directory import (
Directory,
DirectoryLink,
DirectoryInfo,
DirectoryContent,
DirectoryPath,
DirectoryRename,
DirectoryCopyMove,

View File

@ -59,11 +59,11 @@ class Directory(Base):
if self.directories:
for directory in self.directories:
directory.remove(session, config)
await directory.remove(session, config)
if self.files:
for file in self.files:
file.remove(session, config)
await file.remove(session, config)
repository_path = await self.repository.real_path(session, config)
directory_path = await self.real_path(session, config)
@ -284,6 +284,12 @@ class DirectoryInfo(BaseModel):
used: Optional[int] = None
class DirectoryContent(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
files: list["FileInfo"]
directories: list["DirectoryInfo"]
class DirectoryPath(BaseModel):
path: Path
@ -301,4 +307,4 @@ class DirectoryCopyMove(BaseModel):
from materia.models.repository import Repository
from materia.models.file import File
from materia.models.file import File, FileInfo

View File

@ -216,10 +216,12 @@ class File(Base):
await session.flush()
return self
def info(self) -> Optional["FileInfo"]:
# if self.is_public:
return FileInfo.model_validate(self)
# return None
async def info(self, session: SessionContext) -> Optional["FileInfo"]:
info = FileInfo.model_validate(self)
relative_path = await self.relative_path(session)
info.path = Path("/").joinpath(relative_path) if relative_path else None
return info
def convert_bytes(size: int):
@ -252,6 +254,8 @@ class FileInfo(BaseModel):
is_public: bool
size: int
path: Optional[Path] = None
class FilePath(BaseModel):
path: Path

View File

@ -139,9 +139,6 @@ class User(Base):
def info(self) -> "UserInfo":
user_info = UserInfo.model_validate(self)
if user_info.is_email_private:
user_info.email = None
return user_info
async def edit_avatar(

View File

@ -4,6 +4,7 @@ from materia.models import (
User,
Directory,
DirectoryInfo,
DirectoryContent,
DirectoryPath,
DirectoryRename,
DirectoryCopyMove,
@ -171,3 +172,27 @@ async def copy(
await directory.copy(target_directory, session, ctx.config, force=data.force)
await session.commit()
@router.get("/directory/content", response_model=DirectoryContent)
async def content(
path: Path,
repository: Repository = Depends(middleware.repository),
ctx: middleware.Context = Depends(),
):
async with ctx.database.session() as session:
directory = await validate_current_directory(
path, repository, session, ctx.config
)
session.add(directory)
await session.refresh(directory, attribute_names=["directories"])
await session.refresh(directory, attribute_names=["files"])
content = DirectoryContent(
files=[await _file.info(session) for _file in directory.files],
directories=[
await _directory.info(session) for _directory in directory.directories
],
)
return content

View File

@ -63,21 +63,11 @@ async def content(
await session.refresh(repository, attribute_names=["directories"])
await session.refresh(repository, attribute_names=["files"])
content = RepositoryContent(
files=list(
map(
lambda file: FileInfo.model_validate(file),
filter(lambda file: file.path is None, repository.files),
)
),
directories=list(
map(
lambda directory: DirectoryInfo.model_validate(directory),
filter(
lambda directory: directory.path is None, repository.directories
),
)
),
)
content = RepositoryContent(
files=[await _file.info(session) for _file in repository.files],
directories=[
await _directory.info(session) for _directory in repository.directories
],
)
return content