6868# create and use as many Drives as you want!
6969profile_images = deta .Drive ("profile-images" )
7070
71+ # Create a dictionary to store scheduler instances for each user
72+ user_schedulers = {}
73+
7174
7275@router .post (
7376 "/user/logout" ,
@@ -162,7 +165,47 @@ async def update_personal_information(
162165 An endpoint for updating users personel info.
163166 """
164167 try :
168+ from src .main import (
169+ code_app ,
170+ )
171+
165172 await users_crud .update_user_info (personal_info , current_user , session )
173+ schedule = personal_info .schedule
174+ language = personal_info .language
175+ email = current_user .email
176+ # Create a new scheduler for the user
177+ scheduler = BackgroundScheduler ()
178+ user_schedulers [email ] = scheduler
179+ if schedule == "Every hour" :
180+ scheduler .add_job (
181+ code_app .state .openai .send_algorithm_email ,
182+ "interval" ,
183+ hours = 1 ,
184+ args = (email , language ),
185+ )
186+ elif schedule == "Every day" :
187+ scheduler .add_job (
188+ code_app .state .openai .send_algorithm_email ,
189+ "interval" ,
190+ days = 1 ,
191+ args = (email , language ),
192+ )
193+ elif schedule == "Every week" :
194+ scheduler .add_job (
195+ code_app .state .openai .send_algorithm_email ,
196+ "interval" ,
197+ weeks = 1 ,
198+ args = (email , language ),
199+ )
200+ elif schedule == "Every month" :
201+ scheduler .add_job (
202+ code_app .state .openai .send_algorithm_email ,
203+ "interval" ,
204+ months = 1 ,
205+ args = (email , language ),
206+ )
207+
208+ scheduler .start ()
166209 return {
167210 "status_code" : 200 ,
168211 "message" : "Your personal information has been updated successfully!" ,
@@ -185,35 +228,69 @@ async def update_language(
185228 session : AIOSession = Depends (dependencies .get_db_transactional_session ),
186229) -> Dict [str , Any ]:
187230 """
188- Set the programming language for a specific user using their access token.
231+ Set the programming language and the emails schedule for a specific user using their access token.
189232 """
190233 try :
191234 from src .main import (
192235 code_app ,
193236 )
194237
195- scheduler = BackgroundScheduler ()
238+ email = current_user .email
239+ language = request_body .language
240+ schedule = request_body .schedule
241+ if email in user_schedulers :
242+ # Use the existing scheduler for the user
243+ scheduler = user_schedulers [email ]
244+ else :
245+ # Create a new scheduler for the user
246+ scheduler = BackgroundScheduler ()
247+ user_schedulers [email ] = scheduler
248+ if current_user .welcome == "not sent" :
249+ # send a welcome email in the background
250+ ensure_future (nylas_crud .send_welcome_email (email ))
251+ # send an algorithm email in the background
252+ ensure_future (
253+ code_app .state .openai .async_send_algorithm_email (
254+ email , language
255+ )
256+ )
196257 user_info = users_schemas .PersonalInfo (
197258 full_name = current_user .full_name ,
198259 bio = current_user .bio ,
199- programming_language = request_body .language ,
260+ programming_language = language ,
261+ schedule = schedule ,
200262 )
201263 await users_crud .update_user_info (user_info , current_user , session )
202- # send a welcome email in the background
203- ensure_future (nylas_crud .send_welcome_email (current_user .email ))
204- # send an algorithm email in the background
205- ensure_future (
206- code_app .state .openai .async_send_algorithm_email (
207- current_user .email , request_body .language
264+
265+ if schedule == "Every hour" :
266+ scheduler .add_job (
267+ code_app .state .openai .send_algorithm_email ,
268+ "interval" ,
269+ hours = 1 ,
270+ args = (email , language ),
208271 )
209- )
210- # send an algorithm email every 24 hours
211- scheduler .add_job (
212- code_app .state .openai .send_algorithm_email ,
213- "interval" ,
214- hours = 24 ,
215- args = (current_user .email , request_body .language ),
216- )
272+ elif schedule == "Every day" :
273+ scheduler .add_job (
274+ code_app .state .openai .send_algorithm_email ,
275+ "interval" ,
276+ days = 1 ,
277+ args = (email , language ),
278+ )
279+ elif schedule == "Every week" :
280+ scheduler .add_job (
281+ code_app .state .openai .send_algorithm_email ,
282+ "interval" ,
283+ weeks = 1 ,
284+ args = (email , language ),
285+ )
286+ elif schedule == "Every month" :
287+ scheduler .add_job (
288+ code_app .state .openai .send_algorithm_email ,
289+ "interval" ,
290+ months = 1 ,
291+ args = (email , language ),
292+ )
293+
217294 scheduler .start ()
218295 return {
219296 "status_code" : 200 ,
0 commit comments