|
|
package fiber
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
_ "github.com/go-sql-driver/mysql" // для связи с mysql
|
|
|
"github.com/jmoiron/sqlx"
|
|
|
"os"
|
|
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
"github.com/gofiber/fiber/v2/middleware/compress"
|
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
|
|
"github.com/gofiber/fiber/v2/middleware/favicon"
|
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
|
)
|
|
|
|
|
|
type App struct {
|
|
|
name string
|
|
|
fiber *fiber.App
|
|
|
db *sqlx.DB
|
|
|
}
|
|
|
|
|
|
type StringHandler func(db *sqlx.DB, query string) string
|
|
|
|
|
|
func OpenDB(database string) *sqlx.DB {
|
|
|
// fmt.Printf("открываю БД nano-svelte\n")
|
|
|
db, err := sqlx.Open("mysql", "itman:X753951x@(xigmanas:3306)/"+database)
|
|
|
if err != nil {
|
|
|
fmt.Errorf("невозможно открыть базу данных %s", database)
|
|
|
os.Exit(0)
|
|
|
}
|
|
|
return db
|
|
|
}
|
|
|
|
|
|
func NewApp(name string, db *sqlx.DB) *App {
|
|
|
// инициализация fiber
|
|
|
app := fiber.New()
|
|
|
app.Use(logger.New())
|
|
|
app.Use(cors.New())
|
|
|
app.Use(favicon.New())
|
|
|
app.Use(compress.New())
|
|
|
|
|
|
app.Static("/", "app/dist/index.html")
|
|
|
app.Static("/assets", "app/dist/assets", fiber.Static{
|
|
|
Compress: true,
|
|
|
})
|
|
|
app.Static("/fonts", "app/dist/fonts", fiber.Static{
|
|
|
Compress: true,
|
|
|
})
|
|
|
|
|
|
//fmt.Printf("fiber init\n")
|
|
|
result := App{
|
|
|
name: name,
|
|
|
fiber: app,
|
|
|
db: db,
|
|
|
}
|
|
|
return &result
|
|
|
}
|
|
|
|
|
|
func (app *App) Start(port int) error {
|
|
|
err := app.fiber.Listen(fmt.Sprintf(":%d", port))
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
func (app *App) JSONRouter(name string, funcRouter StringHandler) {
|
|
|
app.fiber.Get(name, func(ctx *fiber.Ctx) error {
|
|
|
q := ctx.Query("q", "")
|
|
|
return ctx.JSON(fiber.Map{
|
|
|
"status": "ok",
|
|
|
"result": funcRouter(app.db, q),
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
func (app *App) StringRouter(name string, funcRouter StringHandler) {
|
|
|
app.fiber.Get(name, func(ctx *fiber.Ctx) error {
|
|
|
q := ctx.Query("q", "")
|
|
|
return ctx.SendString(funcRouter(app.db, q))
|
|
|
})
|
|
|
}
|