| package main |
|
|
| import ( |
| "log" |
| "net/http" |
| "os" |
| "os/signal" |
| "path/filepath" |
| "strings" |
| "time" |
|
|
| _ "github.com/GoAdminGroup/go-admin/adapter/chi" |
| _ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql" |
|
|
| "github.com/GoAdminGroup/go-admin/engine" |
| "github.com/GoAdminGroup/go-admin/examples/datamodel" |
| "github.com/GoAdminGroup/go-admin/modules/config" |
| "github.com/GoAdminGroup/go-admin/modules/language" |
| "github.com/GoAdminGroup/go-admin/plugins/example" |
| "github.com/GoAdminGroup/go-admin/template" |
| "github.com/GoAdminGroup/go-admin/template/chartjs" |
| "github.com/GoAdminGroup/themes/adminlte" |
| "github.com/go-chi/chi" |
| ) |
|
|
| func main() { |
| r := chi.NewRouter() |
|
|
| eng := engine.Default() |
|
|
| cfg := config.Config{ |
| Env: config.EnvLocal, |
| Databases: config.DatabaseList{ |
| "default": { |
| Host: "127.0.0.1", |
| Port: "3306", |
| User: "root", |
| Pwd: "root", |
| Name: "godmin", |
| MaxIdleConns: 50, |
| MaxOpenConns: 150, |
| ConnMaxLifetime: time.Hour, |
| Driver: config.DriverMysql, |
| }, |
| }, |
| UrlPrefix: "admin", |
| Store: config.Store{ |
| Path: "./uploads", |
| Prefix: "uploads", |
| }, |
| Language: language.EN, |
| IndexUrl: "/", |
| Debug: true, |
| ColorScheme: adminlte.ColorschemeSkinBlack, |
| } |
|
|
| template.AddComp(chartjs.NewChart()) |
|
|
| |
|
|
| examplePlugin := example.NewExample() |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| if err := eng.AddConfig(&cfg). |
| AddGenerators(datamodel.Generators). |
| AddDisplayFilterXssJsFilter(). |
| |
| |
| |
| |
| |
| AddGenerator("user", datamodel.GetUserTable). |
| AddPlugins(examplePlugin). |
| Use(r); err != nil { |
| panic(err) |
| } |
|
|
| workDir, _ := os.Getwd() |
| filesDir := filepath.Join(workDir, "uploads") |
| FileServer(r, "/uploads", http.Dir(filesDir)) |
|
|
| |
|
|
| eng.HTML("GET", "/admin", datamodel.GetContent) |
|
|
| go func() { |
| _ = http.ListenAndServe(":3333", r) |
| }() |
|
|
| quit := make(chan os.Signal, 1) |
| signal.Notify(quit, os.Interrupt) |
| <-quit |
| log.Print("closing database connection") |
| eng.MysqlConnection().Close() |
| } |
|
|
| |
| |
| func FileServer(r chi.Router, path string, root http.FileSystem) { |
| if strings.ContainsAny(path, "{}*") { |
| panic("FileServer does not permit URL parameters.") |
| } |
|
|
| fs := http.StripPrefix(path, http.FileServer(root)) |
|
|
| if path != "/" && path[len(path)-1] != '/' { |
| r.Get(path, http.RedirectHandler(path+"/", http.StatusMovedPermanently).ServeHTTP) |
| path += "/" |
| } |
| path += "*" |
|
|
| r.Get(path, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| fs.ServeHTTP(w, r) |
| })) |
| } |
|
|