New user ┌─┐ ,.-^^-._ ,.-^^-._ ║"│ |-.____.-| |-.____.-| └┬┘ | | | | ┌┼┐ | | | | │ ┌───┐ ┌───┐ ┌───────────┐ | | | | ┌┴┐ │Bot│ │Api│ │Course1 API│ '-.____.-' '-.____.-' User └─┬─┘ └─┬─┘ └─────┬─────┘ Postgres Redis │ message ('/start') │ │ │ │ │ │───────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ Welcome message │ │ │ │ │ │ Email input prompt │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ message ('email') │ │ │ │ │ │───────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ Name input prompt │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ message ('name') │ │ │ │ │ │───────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ insert into user_data │ │ │ │ │─────────────────────────────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ Menu │ │ │ │ │ │ [Change name] │ │ │ │ │ │ [Course1] │ │ │ │ │ │ [Course2] │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ button (Course1) │ │ │ │ │ │───────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │message │ │ │ │ │ │('starting lesson pls wait...') │ │ │ │ │ │<───────────────────────────────│ │ │ │ │ │ │ │ │ │ │ │ │POST ${API_URI}/service/start │ │ │ │ │ │{'email': 'email', │ │ │ │ │ │'course': 'Course1'} │ │ │ │ │ │─────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ POST │ │ │ │ │ │ *create environment* │ │ │ │ │ │────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │ {'env info': 'env info'} │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ │ │ │ insert into course1_user │ │ │ │ │──────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ First lesson │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ │ Task attempt │ │ │ │ │────────────────────────────────────────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ │ │ │POST ${API_URI}/course1/callback │ │ │ │ │ │{Task attempt data} │ │ │ │ │ │<────────────────────────────────│ │ │ │ │ │ │ │ │ │ │ │ update course1_user │ │ │ │ │──────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ │ POST /? │ │ │ │ │ │ *next/retry/grades* │ │ │ │ │ │<─────────────────────────────│ │ │ │ │ │ │ │ │ │ │ message (next/retry/grades) │ │ │ │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ │ │ │ │ │ │ │ │ │ │ │ OK │ │ │ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─>│ │ │ User ┌─┴─┐ ┌─┴─┐ ┌─────┴─────┐ Postgres Redis ┌─┐ │Bot│ │Api│ │Course1 API│ ,.-^^-._ ,.-^^-._ ║"│ └───┘ └───┘ └───────────┘ |-.____.-| |-.____.-| └┬┘ | | | | ┌┼┐ | | | | │ | | | | ┌┴┐ '-.____.-' '-.____.-'