Privilege --- Privilege::list_of_privileges( privilege_id ) Privilege::privileges_tree() User --- User::get_privileges User::has_privilege( privilege_id ) User::reset_password() -> create otp -> send email User::set_privilege( privilege_id ) User::track_action() -> user_id -> action : Contoller::method(args) -> timestamp Lesson: --- Lesson::create_lesson( POST ) Lesson::get_lesson( lesson_id ) Course --- Course::create_course( POST ) Course::courses_tree() Upgrades (??) --- A1 A2 : includes A1 A3 : includes A1, A2 A4 : includes A1, A2, A3 A1 100 A2 200 A3 350 A4 500 B1 100 B2 200 B3 400 B4 800 :1 -> 0% :2 -> 15% :3 -> 20% A1 -> A2 A1 -> A3 A1 -> A4 A2 -> A3 A2 -> A4 A3 -> A4 A1 < A2 < A3 < A4 B1 -> B2 B1 -> B3 B1 -> B4 B2 -> B3 B2 -> B4 B3 -> B4 A1+B1 A2+B2 A3+B3 A1+B1 -> A2+B2 A1+B1 -> A3+B3 A1+B1 -> A4+B4 A2+B2 -> A3+B3 A2+B2 -> A4+B4 A3+B3 -> A4+B4 UPGRADE PRICE = upper_priv_price - own_priv_price buy 1 item : -0% buy 2 items : -10% buy 3 items : -15%