68
68
# create and use as many Drives as you want!
69
69
profile_images = deta .Drive ("profile-images" )
70
70
71
+ # Create a dictionary to store scheduler instances for each user
72
+ user_schedulers = {}
73
+
71
74
72
75
@router .post (
73
76
"/user/logout" ,
@@ -162,7 +165,47 @@ async def update_personal_information(
162
165
An endpoint for updating users personel info.
163
166
"""
164
167
try :
168
+ from src .main import (
169
+ code_app ,
170
+ )
171
+
165
172
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 ()
166
209
return {
167
210
"status_code" : 200 ,
168
211
"message" : "Your personal information has been updated successfully!" ,
@@ -185,35 +228,69 @@ async def update_language(
185
228
session : AIOSession = Depends (dependencies .get_db_transactional_session ),
186
229
) -> Dict [str , Any ]:
187
230
"""
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.
189
232
"""
190
233
try :
191
234
from src .main import (
192
235
code_app ,
193
236
)
194
237
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
+ )
196
257
user_info = users_schemas .PersonalInfo (
197
258
full_name = current_user .full_name ,
198
259
bio = current_user .bio ,
199
- programming_language = request_body .language ,
260
+ programming_language = language ,
261
+ schedule = schedule ,
200
262
)
201
263
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 ),
208
271
)
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
+
217
294
scheduler .start ()
218
295
return {
219
296
"status_code" : 200 ,
0 commit comments