99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
|
package handler
|
||
|
|
||
|
import (
|
||
|
"blackforestbytes.com/simplecloudnotifier/common/ginresp"
|
||
|
"blackforestbytes.com/simplecloudnotifier/logic"
|
||
|
"bytes"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
sqlite3 "github.com/mattn/go-sqlite3"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
type CommonHandler struct {
|
||
|
app *logic.Application
|
||
|
}
|
||
|
|
||
|
func NewCommonHandler(app *logic.Application) CommonHandler {
|
||
|
return CommonHandler{
|
||
|
app: app,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type pingResponse struct {
|
||
|
Message string `json:"message"`
|
||
|
Info pingResponseInfo `json:"info"`
|
||
|
}
|
||
|
type pingResponseInfo struct {
|
||
|
Method string `json:"method"`
|
||
|
Request string `json:"request"`
|
||
|
Headers map[string][]string `json:"headers"`
|
||
|
URI string `json:"uri"`
|
||
|
Address string `json:"addr"`
|
||
|
}
|
||
|
|
||
|
// Ping swaggerdoc
|
||
|
//
|
||
|
// @Success 200 {object} pingResponse
|
||
|
// @Failure 500 {object} ginresp.errBody
|
||
|
// @Router /ping [get]
|
||
|
// @Router /ping [post]
|
||
|
// @Router /ping [put]
|
||
|
// @Router /ping [delete]
|
||
|
// @Router /ping [patch]
|
||
|
func (h CommonHandler) Ping(g *gin.Context) ginresp.HTTPResponse {
|
||
|
buf := new(bytes.Buffer)
|
||
|
_, _ = buf.ReadFrom(g.Request.Body)
|
||
|
resuestBody := buf.String()
|
||
|
|
||
|
return ginresp.JSON(http.StatusOK, pingResponse{
|
||
|
Message: "Pong",
|
||
|
Info: pingResponseInfo{
|
||
|
Method: g.Request.Method,
|
||
|
Request: resuestBody,
|
||
|
Headers: g.Request.Header,
|
||
|
URI: g.Request.RequestURI,
|
||
|
Address: g.Request.RemoteAddr,
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// DatabaseTest swaggerdoc
|
||
|
//
|
||
|
// @Success 200 {object} handler.DatabaseTest.response
|
||
|
// @Failure 500 {object} ginresp.errBody
|
||
|
// @Router /db-test [get]
|
||
|
func (h CommonHandler) DatabaseTest(g *gin.Context) ginresp.HTTPResponse {
|
||
|
type response struct {
|
||
|
Success bool `json:"success"`
|
||
|
LibVersion string `json:"libVersion"`
|
||
|
LibVersionNumber int `json:"libVersionNumber"`
|
||
|
SourceID string `json:"sourceID"`
|
||
|
}
|
||
|
|
||
|
libVersion, libVersionNumber, sourceID := sqlite3.Version()
|
||
|
|
||
|
err := h.app.Database.Ping()
|
||
|
if err != nil {
|
||
|
return ginresp.InternalError(err)
|
||
|
}
|
||
|
|
||
|
return ginresp.JSON(http.StatusOK, response{
|
||
|
Success: true,
|
||
|
LibVersion: libVersion,
|
||
|
LibVersionNumber: libVersionNumber,
|
||
|
SourceID: sourceID,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// Health swaggerdoc
|
||
|
//
|
||
|
// @Success 200 {object} handler.Health.response
|
||
|
// @Failure 500 {object} ginresp.errBody
|
||
|
// @Router /health [get]
|
||
|
func (h CommonHandler) Health(*gin.Context) ginresp.HTTPResponse {
|
||
|
type response struct {
|
||
|
Status string `json:"status"`
|
||
|
}
|
||
|
return ginresp.JSON(http.StatusOK, response{Status: "ok"})
|
||
|
}
|