Skip to content

Commit fc8a3cd

Browse files
committed
Remove content from list resources api by default
1 parent ca29673 commit fc8a3cd

File tree

5 files changed

+28
-5
lines changed

5 files changed

+28
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Magic Box Backend
1+
# OmniBox Backend
22

33
## Thought
44

backend/api/entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ResourceCreateRequest(BaseAPIModel):
2828

2929

3030
class BaseDBModel(BaseAPIModel):
31-
created_at: Optional[datetime]
31+
created_at: Optional[datetime] = Field(default=None)
3232
updated_at: Optional[datetime] = Field(default=None)
3333
deleted_at: Optional[datetime] = Field(default=None)
3434

backend/api/resources.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from fastapi import Depends, APIRouter, Query
44
from sqlalchemy import select
55
from sqlalchemy.ext.asyncio import AsyncSession
6+
from sqlalchemy.orm import load_only
67

78
from backend.api.depends import get_session, _get_user, _get_resource, _get_namespace_by_name, get_trace_info
89
from backend.api.entity import Resource, ResourceType, SpaceType, ResourceCreateRequest, IDResponse
@@ -65,6 +66,7 @@ async def get_resources(
6566
resource_type: ResourceType | None = Query(alias="resourceType", default=None),
6667
parent_id: str | None = Query(alias="parentId", default=None),
6768
tag: str | None = None,
69+
return_content: bool | None = Query(alias="returnContent", default=False),
6870
user: db.User = Depends(_get_user),
6971
namespace_orm: db.Namespace = Depends(_get_namespace_by_name),
7072
session: AsyncSession = Depends(get_session)
@@ -99,12 +101,31 @@ async def get_resources(
99101
if tag:
100102
tags = tag.split(",")
101103
query = query.where(db.Resource.tags.overlap(tags))
104+
if not return_content:
105+
query = query.options(load_only(
106+
db.Resource.resource_id,
107+
db.Resource.user_id,
108+
db.Resource.name,
109+
db.Resource.resource_type,
110+
db.Resource.namespace_id,
111+
db.Resource.space_type,
112+
db.Resource.parent_id,
113+
db.Resource.tags,
114+
db.Resource.child_count,
115+
db.Resource.attrs,
116+
db.Resource.created_at,
117+
db.Resource.updated_at,
118+
db.Resource.deleted_at
119+
))
120+
query = query.order_by(db.Resource.created_at.desc())
102121

103122
result = await session.execute(query)
104123
resource_list: List[Resource] = []
105124
for resource in result.scalars():
125+
if not return_content:
126+
resource.content = None # Set value to prevent lazy load by sqlalchemy
106127
resource_list.append(Resource.model_validate(resource))
107-
return sorted(resource_list, key=lambda x: x.created_at, reverse=True)
128+
return resource_list
108129

109130

110131
@router_resources.get("/{resource_id}", response_model=Resource, response_model_exclude_none=True)

backend/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
class DBConfig(BaseModel):
55
url: str = Field(examples=["postgresql+asyncpg://{username}:{password}@{host}:{port}/{db_name}"])
66

7+
78
class WizardConfig(BaseModel):
89
base_url: str
910

11+
1012
class Config(BaseModel):
1113
db: DBConfig
1214
wizard: WizardConfig
1315

1416

15-
ENV_PREFIX: str = "MBB"
17+
ENV_PREFIX: str = "OBB"

backend/db/entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ class Resource(Base):
8484
name: Mapped[str | None] = mapped_column(String, index=True, nullable=True)
8585
resource_type: Mapped[ResourceType] = mapped_column(Enum("doc", "link", "file", "folder", name="resource_type"))
8686
namespace_id: Mapped[str] = mapped_column(String(length=22), nullable=False)
87+
space_type: Mapped[SpaceType] = mapped_column(Enum("private", "teamspace", name="space_type"))
8788
parent_id: Mapped[str | None] = mapped_column(String(length=22), nullable=True)
8889
tags: Mapped[List[str] | None] = mapped_column(JSON, nullable=True)
89-
space_type: Mapped[SpaceType] = mapped_column(Enum("private", "teamspace", name="space_type"))
9090
content: Mapped[str | None] = mapped_column(Text, nullable=True)
9191
child_count: Mapped[int] = mapped_column(nullable=False, default=0)
9292
attrs: Mapped[dict] = mapped_column(JSON, nullable=True)

0 commit comments

Comments
 (0)