1
+
2
+
1
3
from fastapi import FastAPI , Depends , HTTPException
2
4
from sqlalchemy .orm import Session
3
5
from database import engine , Base , get_db
8
10
from celery_config import celery_app
9
11
from tasks import send_scheduled_email
10
12
from datetime import datetime , timedelta
11
- from datetime import datetime
12
13
import pytz
13
14
14
15
app = FastAPI ()
15
16
16
17
Base .metadata .create_all (bind = engine )
17
18
18
- # @app.post("/schedule-email/", response_model=EmailSchedule)
19
- # def schedule_email(email_schedule: EmailScheduleCreate, db: Session = Depends(get_db)):
20
- # db_email_schedule = crud.create_email_schedule(db, email_schedule)
21
- # delay = (email_schedule.schedule_time - datetime.utcnow()).total_seconds()
22
- # celery_app.send_task("tasks.send_scheduled_email", args=[db_email_schedule.id], countdown=delay)
23
- # return db_email_schedule
24
19
25
- @app .post ("/schedule-email/" )
26
- def schedule_email (email_schedule : EmailSchedule ):
27
- # Assign a unique id to the email schedule
28
- email_schedule .id = len (scheduled_emails ) + 1
29
20
30
- schedule_time = email_schedule .schedule_time .astimezone (pytz .UTC )
31
- current_time = datetime .utcnow ().replace (tzinfo = pytz .UTC )
21
+ from fastapi import FastAPI , Depends , HTTPException
22
+ from sqlalchemy .orm import Session
23
+ from database import engine , Base , get_db
24
+ from schemas import EmailScheduleCreate , EmailSchedule , DeleteResponse
25
+ from models import EmailSchedule as EmailScheduleModel
26
+ import crud
27
+ from celery import Celery
28
+ from celery_config import celery_app
29
+ from tasks import send_scheduled_email
30
+ from datetime import datetime , timedelta
31
+ import pytz
32
+
33
+ app = FastAPI ()
34
+
35
+ Base .metadata .create_all (bind = engine )
36
+
37
+ @app .post ("/schedule-email/" , response_model = EmailSchedule )
38
+ def schedule_email (email_schedule : EmailScheduleCreate , db : Session = Depends (get_db )):
39
+ schedule_time = email_schedule .schedule_time .replace (tzinfo = pytz .UTC )
40
+ current_time = datetime .now (pytz .UTC )
32
41
delay = (schedule_time - current_time ).total_seconds ()
33
42
34
- task_id = None
35
43
if delay > 0 :
44
+ db_email_schedule = crud .create_email_schedule (db , email_schedule )
45
+
36
46
if email_schedule .recurring :
37
- task_id = schedule_recurring_email .apply_async ((email_schedule .dict (),), eta = schedule_time )
47
+ # Handle recurring emails (you'll need to implement this)
48
+ pass
38
49
else :
39
- task_id = send_email .apply_async ((email_schedule . dict () ,), countdown = delay )
50
+ send_scheduled_email .apply_async ((db_email_schedule . id ,), countdown = delay )
40
51
41
- if task_id :
42
- scheduled_emails [email_schedule .id ] = email_schedule .dict ()
43
- scheduled_emails [email_schedule .id ]["task_id" ] = task_id .id
44
-
45
- return email_schedule .dict ()
52
+ return db_email_schedule
53
+ else :
54
+ raise HTTPException (status_code = 400 , detail = "Schedule time must be in the future" )
46
55
47
56
@app .get ("/scheduled-emails/" , response_model = list [EmailSchedule ])
48
57
def read_email_schedules (skip : int = 0 , limit : int = 100 , db : Session = Depends (get_db )):
@@ -56,10 +65,9 @@ def read_email_schedule(id: int, db: Session = Depends(get_db)):
56
65
raise HTTPException (status_code = 404 , detail = "Email schedule not found" )
57
66
return db_email_schedule
58
67
59
- @app .delete ("/scheduled-emails/{id}" , response_model = EmailSchedule )
68
+ @app .delete ("/scheduled-emails/{id}" , response_model = DeleteResponse )
60
69
def delete_email_schedule (id : int , db : Session = Depends (get_db )):
61
70
success = crud .delete_email_schedule (db , id )
62
71
if not success :
63
72
raise HTTPException (status_code = 404 , detail = "Email schedule not found" )
64
- return {"detail" : "Email schedule deleted successfully" }
65
-
73
+ return DeleteResponse (detail = "Email schedule deleted successfully" )
0 commit comments