@@ -172,6 +172,27 @@ async def create_project(request: web.Request):
172172 )
173173
174174
175+ def _create_page_response (projects , request_url , total , limit , offset ) -> web .Response :
176+ page = Page [ProjectListItem ].model_validate (
177+ paginate_data (
178+ chunk = [
179+ ProjectListItem .from_domain_model (prj ).model_dump (
180+ by_alias = True , exclude_unset = True
181+ )
182+ for prj in projects
183+ ],
184+ request_url = request_url ,
185+ total = total ,
186+ limit = limit ,
187+ offset = offset ,
188+ )
189+ )
190+ return web .Response (
191+ text = page .model_dump_json (** RESPONSE_MODEL_POLICY ),
192+ content_type = MIMETYPE_APPLICATION_JSON ,
193+ )
194+
195+
175196@routes .get (f"/{ VTAG } /projects" , name = "list_projects" )
176197@login_required
177198@permission_required ("project.read" )
@@ -212,23 +233,12 @@ async def list_projects(request: web.Request):
212233 order_by = OrderBy .model_construct (** query_params .order_by .model_dump ()),
213234 )
214235
215- page = Page [ProjectListItem ].model_validate (
216- paginate_data (
217- chunk = [
218- ProjectListItem .from_domain_model (prj ).model_dump (
219- by_alias = True , exclude_unset = True
220- )
221- for prj in projects
222- ],
223- request_url = request .url ,
224- total = total_number_of_projects ,
225- limit = query_params .limit ,
226- offset = query_params .offset ,
227- )
228- )
229- return web .Response (
230- text = page .model_dump_json (** RESPONSE_MODEL_POLICY ),
231- content_type = MIMETYPE_APPLICATION_JSON ,
236+ return _create_page_response (
237+ projects = projects ,
238+ request_url = request .url ,
239+ total = total_number_of_projects ,
240+ limit = query_params .limit ,
241+ offset = query_params .offset ,
232242 )
233243
234244
@@ -259,23 +269,12 @@ async def list_projects_full_search(request: web.Request):
259269 order_by = OrderBy .model_construct (** query_params .order_by .model_dump ()),
260270 )
261271
262- page = Page [ProjectListItem ].model_validate (
263- paginate_data (
264- chunk = [
265- ProjectListItem .from_domain_model (prj ).model_dump (
266- by_alias = True , exclude_unset = True
267- )
268- for prj in projects
269- ],
270- request_url = request .url ,
271- total = total_number_of_projects ,
272- limit = query_params .limit ,
273- offset = query_params .offset ,
274- )
275- )
276- return web .Response (
277- text = page .model_dump_json (** RESPONSE_MODEL_POLICY ),
278- content_type = MIMETYPE_APPLICATION_JSON ,
272+ return _create_page_response (
273+ projects = projects ,
274+ request_url = request .url ,
275+ total = total_number_of_projects ,
276+ limit = query_params .limit ,
277+ offset = query_params .offset ,
279278 )
280279
281280
0 commit comments