@@ -159,6 +159,76 @@ def _volunteer_info_to_pb(volunteer: Volunteer, username: str) -> account_pb2.Ge
159159 )
160160
161161
162+ def get_reminders (context : CouchersContext , session : Session ) -> account_pb2 .GetRemindersRes :
163+ user = session .execute (select (User ).where (User .id == context .user_id )).scalar_one ()
164+
165+ # responding to reqs comes first in desc order of when they were received
166+ host_has_sent_message = select (1 ).where (
167+ Message .conversation_id == HostRequest .conversation_id , Message .author_id == HostRequest .recipient_user_id
168+ )
169+ query = select (HostRequest .conversation_id , LiteUser ).join (LiteUser , LiteUser .id == HostRequest .initiator_user_id )
170+ query = where_users_column_visible (query , context , HostRequest .initiator_user_id )
171+ query = where_moderated_content_visible (query , context , HostRequest , is_list_operation = True )
172+ pending_host_requests = session .execute (
173+ query .where (HostRequest .recipient_user_id == context .user_id )
174+ .where (HostRequest .status == HostRequestStatus .pending )
175+ .where (HostRequest .start_time > func .now ())
176+ .where (~ exists (host_has_sent_message ))
177+ .order_by (HostRequest .conversation_id .asc ())
178+ ).all ()
179+ reminders = [
180+ account_pb2 .Reminder (
181+ respond_to_host_request_reminder = account_pb2 .RespondToHostRequestReminder (
182+ host_request_id = host_request_id ,
183+ surfer_user = lite_user_to_pb (session , lite_user , context ),
184+ )
185+ )
186+ for host_request_id , lite_user in pending_host_requests
187+ ]
188+
189+ # surfer needs to confirm accepted requests
190+ confirm_query = select (HostRequest .conversation_id , LiteUser ).join (
191+ LiteUser , LiteUser .id == HostRequest .recipient_user_id
192+ )
193+ confirm_query = where_users_column_visible (confirm_query , context , HostRequest .recipient_user_id )
194+ confirm_query = where_moderated_content_visible (confirm_query , context , HostRequest , is_list_operation = True )
195+ accepted_host_requests = session .execute (
196+ confirm_query .where (HostRequest .initiator_user_id == context .user_id )
197+ .where (HostRequest .status == HostRequestStatus .accepted )
198+ .where (HostRequest .end_time > func .now ())
199+ .order_by (HostRequest .end_time .asc ())
200+ ).all ()
201+ reminders += [
202+ account_pb2 .Reminder (
203+ confirm_host_request_reminder = account_pb2 .ConfirmHostRequestReminder (
204+ host_request_id = host_request_id ,
205+ host_user = lite_user_to_pb (session , lite_user , context ),
206+ )
207+ )
208+ for host_request_id , lite_user in accepted_host_requests
209+ ]
210+
211+ # references come second, in order of deadline, desc
212+ reminders += [
213+ account_pb2 .Reminder (
214+ write_reference_reminder = account_pb2 .WriteReferenceReminder (
215+ host_request_id = host_request_id ,
216+ reference_type = reftype2api [reference_type ],
217+ other_user = lite_user_to_pb (session , lite_user , context ),
218+ )
219+ )
220+ for host_request_id , reference_type , _ , lite_user in get_pending_references_to_write (session , context )
221+ ]
222+
223+ if not has_completed_profile (session , user ):
224+ reminders .append (account_pb2 .Reminder (complete_profile_reminder = account_pb2 .CompleteProfileReminder ()))
225+
226+ if user .hosting_status in (HostingStatus .can_host , HostingStatus .maybe ) and not user .has_completed_my_home :
227+ reminders .append (account_pb2 .Reminder (complete_my_home_reminder = account_pb2 .CompleteMyHomeReminder ()))
228+
229+ return account_pb2 .GetRemindersRes (reminders = reminders )
230+
231+
162232class Account (account_pb2_grpc .AccountServicer ):
163233 def GetAccountInfo (
164234 self , request : empty_pb2 .Empty , context : CouchersContext , session : Session
@@ -747,75 +817,7 @@ def ListInviteCodes(
747817 def GetReminders (
748818 self , request : empty_pb2 .Empty , context : CouchersContext , session : Session
749819 ) -> account_pb2 .GetRemindersRes :
750- user = session .execute (select (User ).where (User .id == context .user_id )).scalar_one ()
751-
752- # responding to reqs comes first in desc order of when they were received
753- host_has_sent_message = select (1 ).where (
754- Message .conversation_id == HostRequest .conversation_id , Message .author_id == HostRequest .recipient_user_id
755- )
756- query = select (HostRequest .conversation_id , LiteUser ).join (
757- LiteUser , LiteUser .id == HostRequest .initiator_user_id
758- )
759- query = where_users_column_visible (query , context , HostRequest .initiator_user_id )
760- query = where_moderated_content_visible (query , context , HostRequest , is_list_operation = True )
761- pending_host_requests = session .execute (
762- query .where (HostRequest .recipient_user_id == context .user_id )
763- .where (HostRequest .status == HostRequestStatus .pending )
764- .where (HostRequest .start_time > func .now ())
765- .where (~ exists (host_has_sent_message ))
766- .order_by (HostRequest .conversation_id .asc ())
767- ).all ()
768- reminders = [
769- account_pb2 .Reminder (
770- respond_to_host_request_reminder = account_pb2 .RespondToHostRequestReminder (
771- host_request_id = host_request_id ,
772- surfer_user = lite_user_to_pb (session , lite_user , context ),
773- )
774- )
775- for host_request_id , lite_user in pending_host_requests
776- ]
777-
778- # surfer needs to confirm accepted requests
779- confirm_query = select (HostRequest .conversation_id , LiteUser ).join (
780- LiteUser , LiteUser .id == HostRequest .recipient_user_id
781- )
782- confirm_query = where_users_column_visible (confirm_query , context , HostRequest .recipient_user_id )
783- confirm_query = where_moderated_content_visible (confirm_query , context , HostRequest , is_list_operation = True )
784- accepted_host_requests = session .execute (
785- confirm_query .where (HostRequest .initiator_user_id == context .user_id )
786- .where (HostRequest .status == HostRequestStatus .accepted )
787- .where (HostRequest .end_time > func .now ())
788- .order_by (HostRequest .end_time .asc ())
789- ).all ()
790- reminders += [
791- account_pb2 .Reminder (
792- confirm_host_request_reminder = account_pb2 .ConfirmHostRequestReminder (
793- host_request_id = host_request_id ,
794- host_user = lite_user_to_pb (session , lite_user , context ),
795- )
796- )
797- for host_request_id , lite_user in accepted_host_requests
798- ]
799-
800- # references come second, in order of deadline, desc
801- reminders += [
802- account_pb2 .Reminder (
803- write_reference_reminder = account_pb2 .WriteReferenceReminder (
804- host_request_id = host_request_id ,
805- reference_type = reftype2api [reference_type ],
806- other_user = lite_user_to_pb (session , lite_user , context ),
807- )
808- )
809- for host_request_id , reference_type , _ , lite_user in get_pending_references_to_write (session , context )
810- ]
811-
812- if not has_completed_profile (session , user ):
813- reminders .append (account_pb2 .Reminder (complete_profile_reminder = account_pb2 .CompleteProfileReminder ()))
814-
815- if user .hosting_status in (HostingStatus .can_host , HostingStatus .maybe ) and not user .has_completed_my_home :
816- reminders .append (account_pb2 .Reminder (complete_my_home_reminder = account_pb2 .CompleteMyHomeReminder ()))
817-
818- return account_pb2 .GetRemindersRes (reminders = reminders )
820+ return get_reminders (context , session )
819821
820822 def GetMyVolunteerInfo (
821823 self , request : empty_pb2 .Empty , context : CouchersContext , session : Session
0 commit comments