11import uuid
22
3- from sqlalchemy import any_ , distinct , exists , select
3+ from sqlalchemy import distinct , exists , select , update
44from sqlalchemy .orm import Query
55
66from apps .activities .db .schemas import (
77 ActivityHistorySchema ,
88 ActivityItemHistorySchema ,
9+ ActivitySchema ,
910)
1011from apps .activities .domain .response_type_config import (
1112 PerformanceTaskType ,
@@ -112,17 +113,14 @@ async def get_applet_assessment(
112113 return db_result .scalars ().first ()
113114
114115 async def get_reviewable_activities (
115- self , applet_id_versions : list [str ]
116+ self , activity_version_ids : list [str ]
116117 ) -> list [ActivityHistorySchema ]:
117- if not applet_id_versions :
118+ if not activity_version_ids :
118119 return []
119120
120121 query : Query = (
121122 select (ActivityHistorySchema )
122- .where (
123- ActivityHistorySchema .applet_id == any_ (applet_id_versions ),
124- ActivityHistorySchema .is_reviewable .is_ (True ),
125- )
123+ .where (ActivityHistorySchema .id_version .in_ (activity_version_ids ))
126124 .order_by (
127125 ActivityHistorySchema .applet_id , ActivityHistorySchema .order
128126 )
@@ -179,14 +177,13 @@ async def get_by_applet_id_for_summary(
179177 query = query .distinct (ActivityHistorySchema .id )
180178 db_result = await self ._execute (query )
181179 schemas = []
182- for activity_history_schema , is_performance in db_result .all ():
183- activity_history_schema .is_performance_task = is_performance
180+ for activity_history_schema , _ in db_result .all ():
184181 schemas .append (activity_history_schema )
185182
186183 return schemas
187184
188185 async def get_by_applet_id_version (
189- self , applet_id_version : str
186+ self , applet_id_version : str , non_performance = False
190187 ) -> ActivityHistorySchema :
191188 query : Query = select (ActivityHistorySchema )
192189 query = query .where (
@@ -195,6 +192,24 @@ async def get_by_applet_id_version(
195192 query = query .where (
196193 ActivityHistorySchema .is_reviewable == False # noqa
197194 )
195+ if non_performance :
196+ activity_types_query : Query = select (ActivityItemHistorySchema .id )
197+ activity_types_query = activity_types_query .where (
198+ ActivityItemHistorySchema .response_type .in_ (
199+ [
200+ PerformanceTaskType .FLANKER ,
201+ PerformanceTaskType .GYROSCOPE ,
202+ PerformanceTaskType .TOUCH ,
203+ PerformanceTaskType .ABTRAILS ,
204+ ResponseType .STABILITYTRACKER ,
205+ ]
206+ )
207+ )
208+ activity_types_query = activity_types_query .where (
209+ ActivityItemHistorySchema .activity_id
210+ == ActivityHistorySchema .id_version
211+ )
212+ query .where (~ exists (activity_types_query ))
198213 db_result = await self ._execute (query )
199214
200215 return db_result .scalars ().all ()
@@ -253,3 +268,36 @@ async def get_activity_id_versions_for_report(
253268 )
254269 db_result = await self ._execute (query )
255270 return db_result .scalars ().all ()
271+
272+ async def update_by_id (self , id_ , ** values ):
273+ subquery : Query = select (ActivityHistorySchema .id_version )
274+ subquery = subquery .where (ActivityHistorySchema .id == id_ )
275+ subquery = subquery .limit (1 )
276+ subquery = subquery .order_by (ActivityHistorySchema .created_at .desc ())
277+ subquery = subquery .subquery ()
278+
279+ query = update (ActivityHistorySchema )
280+ query = query .where (
281+ ActivityHistorySchema .id_version .in_ (select ([subquery ]))
282+ )
283+ query = query .values (** values )
284+ query = query .returning (ActivityHistorySchema )
285+ await self ._execute (query )
286+
287+ async def get_assessment_version_id (self , applet : uuid .UUID ) -> str :
288+ query : Query = (
289+ select (ActivityHistorySchema .id_version )
290+ .select_from (ActivitySchema )
291+ .join (
292+ ActivityHistorySchema ,
293+ ActivityHistorySchema .id == ActivitySchema .id ,
294+ )
295+ .where (
296+ ActivitySchema .applet_id == applet ,
297+ ActivitySchema .is_reviewable .is_ (True ),
298+ )
299+ .order_by (ActivityHistorySchema .created_at .desc ())
300+ .limit (1 )
301+ )
302+ db_result = await self ._execute (query )
303+ return db_result .scalars ().first ()
0 commit comments