|
3 | 3 | from fastapi import Depends, APIRouter, Query |
4 | 4 | from sqlalchemy import select |
5 | 5 | from sqlalchemy.ext.asyncio import AsyncSession |
| 6 | +from sqlalchemy.orm import load_only |
6 | 7 |
|
7 | 8 | from backend.api.depends import get_session, _get_user, _get_resource, _get_namespace_by_name, get_trace_info |
8 | 9 | from backend.api.entity import Resource, ResourceType, SpaceType, ResourceCreateRequest, IDResponse |
@@ -65,6 +66,7 @@ async def get_resources( |
65 | 66 | resource_type: ResourceType | None = Query(alias="resourceType", default=None), |
66 | 67 | parent_id: str | None = Query(alias="parentId", default=None), |
67 | 68 | tag: str | None = None, |
| 69 | + return_content: bool | None = Query(alias="returnContent", default=False), |
68 | 70 | user: db.User = Depends(_get_user), |
69 | 71 | namespace_orm: db.Namespace = Depends(_get_namespace_by_name), |
70 | 72 | session: AsyncSession = Depends(get_session) |
@@ -99,12 +101,31 @@ async def get_resources( |
99 | 101 | if tag: |
100 | 102 | tags = tag.split(",") |
101 | 103 | 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()) |
102 | 121 |
|
103 | 122 | result = await session.execute(query) |
104 | 123 | resource_list: List[Resource] = [] |
105 | 124 | for resource in result.scalars(): |
| 125 | + if not return_content: |
| 126 | + resource.content = None # Set value to prevent lazy load by sqlalchemy |
106 | 127 | resource_list.append(Resource.model_validate(resource)) |
107 | | - return sorted(resource_list, key=lambda x: x.created_at, reverse=True) |
| 128 | + return resource_list |
108 | 129 |
|
109 | 130 |
|
110 | 131 | @router_resources.get("/{resource_id}", response_model=Resource, response_model_exclude_none=True) |
|
0 commit comments