Logic Flowchart

flowchart TD
  %% Main User Login Flow
  subgraph user_login["User Login Process"]
    A[User login] --> A1{Is user new?}
    A1 -->|Yes| get_new_cookie
    get_new_cookie --> A3[New celery task: scrape_course_codes]
    A3 --> WORKER_scrape_course_codes
    WORKER_scrape_course_codes --> A4[New celery task: scrape_course]
    A4 --> WORKER_scrape_course
    WORKER_scrape_course --> A5[New celery task: send_notif]
    A5 --> send_notif
  end

  %% Cookie Management Process
  subgraph get_new_cookie["Get New Cookie"]
    C1[Post request to LMS /login api] --> C2{Is response.status == 302?}
    C2 -->|Yes| D[Store cookie in DB]
    C2 -->|No| E[Wrong Username or Password]
  end

  %% Cookie Validation Process
  subgraph get_cookie["Get Cookie"]
    D1[Get cookie from db] --> D2[Send get request to /members/home]
    subgraph is_cookie_valid["Cookie Validation"]
      D2 --> D3{Is response.status == 302?}
      D3 -->|Yes| D4[Cookie is invalid]
      D3 -->|No| D5[Cookie is valid]
    end
    D4 --> get_new_cookie
  end

  %% Worker Processes
  subgraph WORKER_scrape_course_codes["WORKER_scrape_course_codes (every 12 hours)"]
    B1[Get cookie] --> get_cookie
    get_cookie --> B2[Get /members/home]
    B2 --> B3[Find course codes in the page]
    B3 --> B4[Mark as active, uncheck previously active ones]
  end

  subgraph WORKER_scrape_course["WORKER_scrape_course (every 5 minutes)"]
    E1[Get cookie] --> get_cookie
    get_cookie --> E2[Get /groups/code]
    E2 --> E3[Scrape all messages]
    E3 --> E4[Compare messages to db, create notifications, create new worker]
  end

  subgraph send_notif["send_notif (triggered by WORKER_scrape_course)"]
    F1[Get notif and env from function params] --> F2[Send notification]
  end