wip: currently rewriting the project as a full stack application tangled.org/kacaii.dev/sigo
gleam
at main 129 lines 5.2 kB view raw
1//// Application router that maps HTTP requests to handler functions. 2//// 3//// This module defines the URL routing table for the application's API endpoints. 4//// It uses path-based routing to delegate requests to specific handler modules 5//// for processing. 6//// 7//// All requests are processed through the web middleware pipeline before routing. 8//// Unmatched routes return a 404 Not Found response. 9 10import app/domain/admin/admin_update_user 11import app/domain/admin/setup_first_admin 12import app/domain/brigade/delete_brigade 13import app/domain/brigade/get_all_brigades 14import app/domain/brigade/get_brigade_members 15import app/domain/brigade/register_new_brigade 16import app/domain/brigade/update_brigade_status 17import app/domain/dashboard 18import app/domain/data_analysis/analysis_occurrence_volume 19import app/domain/notification/get_notification_preferences 20import app/domain/notification/update_notification_preferences 21import app/domain/occurrence/close_occurrence 22import app/domain/occurrence/delete_occurrence 23import app/domain/occurrence/get_ocurrences_by_applicant 24import app/domain/occurrence/register_new_occurrence 25import app/domain/occurrence/reopen_occurrence 26import app/domain/role/get_role_list 27import app/domain/user/delete_user 28import app/domain/user/get_all_user_profiles 29import app/domain/user/get_crew_members 30import app/domain/user/get_user_profile 31import app/domain/user/login 32import app/domain/user/signup 33import app/domain/user/update_user_password 34import app/domain/user/update_user_profile 35import app/domain/user/update_user_status 36import app/web 37import app/web/context.{type Context} 38import wisp 39 40/// 󱂇 Main request router - matches HTTP methods and paths to appropriate handlers 41/// All routes pass through middleware first for common processing 42pub fn handle_request( 43 request request: wisp.Request, 44 ctx ctx: Context, 45) -> wisp.Response { 46 use request <- web.middleware(request:, context: ctx) 47 case wisp.path_segments(request) { 48 //  Security routes ------------------------------------------------- 49 ["user", "login"] -> login.handle_request(request:, ctx:) 50 51 ["user", "password"] -> update_user_password.handle_request(request:, ctx:) 52 53 //  Admin routes --------------------------------------------------------- 54 ["admin", "setup"] -> setup_first_admin.handle_request(request:, ctx:) 55 56 ["admin", "signup"] -> signup.handle_request(request:, ctx:) 57 58 ["admin", "users"] -> get_all_user_profiles.handle_request(request:, ctx:) 59 60 ["admin", "users", id, "update"] -> 61 admin_update_user.handle_request(request:, ctx:, id:) 62 63 ["admin", "users", id, "delete"] -> 64 delete_user.handle_request(request:, ctx:, id:) 65 66 ["admin", "users", id, "status"] -> 67 update_user_status.handle_request(request:, ctx:, id:) 68 69 ["admin", "brigade"] -> get_all_brigades.handle_request(request:, ctx:) 70 71 ["admin", "brigade", "new"] -> 72 register_new_brigade.handle_request(request:, ctx:) 73 74 ["admin", "brigade", id, "status"] -> 75 update_brigade_status.handle_request(request:, ctx:, id:) 76 77 ["admin", "brigade", id] -> 78 delete_brigade.handle_request(request:, ctx:, id:) 79 80 // 󰨇 Dashboard stats ------------------------------------------------------ 81 ["dashboard", "stats"] -> dashboard.handle_request(request:, ctx:) 82 83 // 󰕮 Data analysis routes 84 ["analysis", "occurrence"] -> 85 analysis_occurrence_volume.handle_request(request:, ctx:) 86 87 //  User data routes ----------------------------------------------------- 88 ["user", id, "occurrences"] -> 89 get_ocurrences_by_applicant.handle_request(request:, ctx:, id:) 90 91 ["user", "profile"] -> get_user_profile.handle_request(request:, ctx:) 92 93 ["user", "profile", "update"] -> 94 update_user_profile.handle_request(request:, ctx:) 95 96 ["user", id, "crew_members"] -> 97 get_crew_members.handle_request(request:, ctx:, id:) 98 99 //  Notification routes -------------------------------------------------- 100 ["user", "notification_preferences"] -> 101 get_notification_preferences.handle_request(request:, ctx:) 102 103 ["user", "notification_preferences", "update"] -> 104 update_notification_preferences.handle_request(request:, ctx:) 105 106 // 󰞏 Occurrence routes ---------------------------------------------------- 107 ["occurrence", "new"] -> 108 register_new_occurrence.handle_request(request:, ctx:) 109 110 ["occurrence", id] -> delete_occurrence.handle_request(request:, ctx:, id:) 111 112 ["occurrence", "close", id] -> 113 close_occurrence.handle_request(request:, ctx:, id:) 114 115 ["occurrence", "reopen", id] -> 116 reopen_occurrence.handle_request(request:, ctx:, id:) 117 118 // 󰢫 Brigade routes ------------------------------------------------------- 119 ["brigade", id, "members"] -> 120 get_brigade_members.handle_request(request:, ctx:, id:) 121 122 //  Role routes ---------------------------------------------------------- 123 ["user", "roles"] -> get_role_list.handle_request(request:, ctx:) 124 125 // Fallback routes --------------------------------------------------------- 126 [] -> wisp.ok() |> wisp.html_body("<h2>🌠</h2>") 127 _ -> wisp.not_found() 128 } 129}