mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-06 07:54:22 +00:00
Reorganize handlers
This commit is contained in:
@@ -9,6 +9,12 @@ import (
|
||||
)
|
||||
|
||||
func SetupRoutes(r chi.Router, db *db.DB, fs *filesystem.FileSystem, authMiddleware *auth.Middleware, sessionService *auth.SessionService) {
|
||||
|
||||
handler := &BaseHandler{
|
||||
DB: db,
|
||||
FS: fs,
|
||||
}
|
||||
|
||||
// Public routes (no authentication required)
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Post("/auth/login", Login(sessionService, db))
|
||||
@@ -19,59 +25,51 @@ func SetupRoutes(r chi.Router, db *db.DB, fs *filesystem.FileSystem, authMiddlew
|
||||
r.Group(func(r chi.Router) {
|
||||
// Apply authentication middleware to all routes in this group
|
||||
r.Use(authMiddleware.Authenticate)
|
||||
r.Use(WithHandlerContext(db))
|
||||
|
||||
// Auth routes
|
||||
r.Post("/auth/logout", Logout(sessionService))
|
||||
r.Get("/auth/me", GetCurrentUser(db))
|
||||
r.Get("/auth/me", handler.GetCurrentUser(db))
|
||||
|
||||
// Admin-only routes
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Use(authMiddleware.RequireRole("admin"))
|
||||
|
||||
// TODO: Implement
|
||||
// r.Get("/admin/users", ListUsers(db))
|
||||
// r.Post("/admin/users", CreateUser(db))
|
||||
// r.Delete("/admin/users/{userId}", DeleteUser(db))
|
||||
})
|
||||
|
||||
// User routes - protected by resource ownership
|
||||
r.Route("/users/{userId}", func(r chi.Router) {
|
||||
r.Use(authMiddleware.RequireResourceOwnership)
|
||||
// Workspace routes
|
||||
r.Route("/workspaces", func(r chi.Router) {
|
||||
r.Get("/", handler.ListWorkspaces(db))
|
||||
r.Post("/", handler.CreateWorkspace(db, fs))
|
||||
r.Get("/last", handler.GetLastWorkspace(db))
|
||||
r.Put("/last", handler.UpdateLastWorkspace(db))
|
||||
|
||||
r.Get("/", GetUser(db))
|
||||
// Single workspace routes
|
||||
r.Route("/{workspaceId}", func(r chi.Router) {
|
||||
r.Use(authMiddleware.RequireWorkspaceOwnership(db))
|
||||
|
||||
// Workspace routes
|
||||
r.Route("/workspaces", func(r chi.Router) {
|
||||
r.Get("/", ListWorkspaces(db))
|
||||
r.Post("/", CreateWorkspace(db, fs))
|
||||
r.Get("/last", GetLastWorkspace(db))
|
||||
r.Put("/last", UpdateLastWorkspace(db))
|
||||
r.Get("/", handler.GetWorkspace(db))
|
||||
r.Put("/", handler.UpdateWorkspace(db, fs))
|
||||
r.Delete("/", handler.DeleteWorkspace(db))
|
||||
|
||||
r.Route("/{workspaceId}", func(r chi.Router) {
|
||||
// Add workspace ownership check
|
||||
r.Use(authMiddleware.RequireWorkspaceOwnership(db))
|
||||
// File routes
|
||||
r.Route("/files", func(r chi.Router) {
|
||||
r.Get("/", handler.ListFiles(fs))
|
||||
r.Get("/last", handler.GetLastOpenedFile(db, fs))
|
||||
r.Put("/last", handler.UpdateLastOpenedFile(db, fs))
|
||||
r.Get("/lookup", handler.LookupFileByName(fs))
|
||||
|
||||
r.Get("/", GetWorkspace(db))
|
||||
r.Put("/", UpdateWorkspace(db, fs))
|
||||
r.Delete("/", DeleteWorkspace(db))
|
||||
r.Post("/*", handler.SaveFile(fs))
|
||||
r.Get("/*", handler.GetFileContent(fs))
|
||||
r.Delete("/*", handler.DeleteFile(fs))
|
||||
})
|
||||
|
||||
// File routes
|
||||
r.Route("/files", func(r chi.Router) {
|
||||
r.Get("/", ListFiles(fs))
|
||||
r.Get("/last", GetLastOpenedFile(db))
|
||||
r.Put("/last", UpdateLastOpenedFile(db, fs))
|
||||
r.Get("/lookup", LookupFileByName(fs))
|
||||
|
||||
r.Post("/*", SaveFile(fs))
|
||||
r.Get("/*", GetFileContent(fs))
|
||||
r.Delete("/*", DeleteFile(fs))
|
||||
})
|
||||
|
||||
// Git routes
|
||||
r.Route("/git", func(r chi.Router) {
|
||||
r.Post("/commit", StageCommitAndPush(fs))
|
||||
r.Post("/pull", PullChanges(fs))
|
||||
})
|
||||
// Git routes
|
||||
r.Route("/git", func(r chi.Router) {
|
||||
r.Post("/commit", handler.StageCommitAndPush(fs))
|
||||
r.Post("/pull", handler.PullChanges(fs))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user