-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.lua
More file actions
94 lines (76 loc) · 4.36 KB
/
app.lua
File metadata and controls
94 lines (76 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
local lapis = require("lapis")
local app = lapis.Application()
-- Set views prefix for page widgets
app.views_prefix = "controllers.pages"
-- Set custom layout for entire application
app.layout = require("controllers.pages.components.layout")
-- Load middleware
local auth = require("middleware.authentication")
local api_auth = require("middleware.api_auth")
local locale_middleware = require("middleware.locale")
-- Load controllers
local home_controller = require("controllers.pages.home.controller")
local login_page_controller = require("controllers.pages.login.controller")
local auth_controller = require("controllers.auth.controller")
local media_page_controller = require("controllers.pages.media.controller")
local translation_controller = require("controllers.pages.translation.controller")
local media_upload_api = require("controllers.media.api.upload")
local media_delete_api = require("controllers.media.api.delete")
local users_controller = require("controllers.api_v1.users_controller")
local media_controller = require("controllers.api_v1.media_controller")
local system_controller = require("controllers.api_v1.system_controller")
local i18n_controller = require("controllers.api_v1.i18n_controller")
local i18n_admin_controller = require("controllers.api_v1.i18n_admin_controller")
-- ==================== Locale Middleware ====================
-- Always enable locale detection (lightweight)
app:before_filter(locale_middleware.middleware)
-- ==================== CSRF Token Generation ====================
-- Generate CSRF token for requests that need forms (GET) or error pages
app:before_filter(function(self)
if not self.csrf_token then
local lapis_csrf = require("lapis.csrf")
self.csrf_token = lapis_csrf.generate_token(self)
end
end)
-- ==================== Route Registration ====================
-- Core application routes
app:get("home", "/", home_controller.home)
app:get("login", "/login", login_page_controller.login)
app:post("login", "/login", auth_controller.login_submit)
app:get("logout", "/logout", auth_controller.logout)
-- Media page
app:get("media", "/media", media_page_controller.media)
-- Translation demo page
app:get("translation", "/translation", translation_controller.translation)
-- Media API routes (admin-only)
app:post("media_upload_api", "/admin/media/upload", media_upload_api.handle_upload)
app:post("media_delete_single", "/admin/media/delete/:id", media_delete_api.delete)
app:post("media_delete_batch", "/admin/media/delete", media_delete_api.delete)
-- ==================== API v1 Routes ====================
-- User API
app:get("api_v1_users", "/api/v1/users", users_controller.list)
app:post("api_v1_users", "/api/v1/users", users_controller.create)
app:get("api_v1_user", "/api/v1/users/:id", users_controller.get)
app:put("api_v1_user", "/api/v1/users/:id", users_controller.update)
app:delete("api_v1_user", "/api/v1/users/:id", users_controller.delete)
-- Current user API
app:get("api_v1_me", "/api/v1/me", users_controller.me)
app:post("api_v1_refresh_token", "/api/v1/me/refresh-token", users_controller.refresh_token)
-- Media API
app:get("api_v1_media", "/api/v1/media", media_controller.list)
app:get("api_v1_media_item", "/api/v1/media/:id", media_controller.get)
-- System API
app:get("api_v1_health", "/api/v1/health", system_controller.health)
app:get("api_v1_stats", "/api/v1/stats", system_controller.stats)
-- i18n API (Public)
app:get("api_v1_i18n_locales", "/api/v1/i18n/locales", i18n_controller.get_locales)
app:get("api_v1_i18n_translations", "/api/v1/i18n/translations/:locale", i18n_controller.get_translations)
app:get("api_v1_i18n_current", "/api/v1/i18n/current", i18n_controller.get_current)
app:post("api_v1_i18n_set_locale", "/api/v1/i18n/locale", i18n_controller.set_locale)
-- i18n Admin API
app:get("api_v1_i18n_admin_translations", "/api/v1/i18n/admin/translations", i18n_admin_controller.admin_list_translations)
app:post("api_v1_i18n_admin_translations", "/api/v1/i18n/admin/translations", i18n_admin_controller.admin_save_translation)
app:delete("api_v1_i18n_admin_translation", "/api/v1/i18n/admin/translations/:id", i18n_admin_controller.admin_delete_translation)
app:post("api_v1_i18n_admin_translation_delete", "/api/v1/i18n/admin/translations/:id/delete", i18n_admin_controller.admin_delete_translation_post)
app:post("api_v1_i18n_admin_translate", "/api/v1/i18n/admin/translate", i18n_admin_controller.admin_translate)
return app