mirror of
https://github.com/yusing/godoxy.git
synced 2026-02-24 01:35:00 +01:00
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package v1
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
apitypes "github.com/yusing/goutils/apitypes"
|
|
"github.com/yusing/goutils/events"
|
|
"github.com/yusing/goutils/http/httpheaders"
|
|
"github.com/yusing/goutils/http/websocket"
|
|
)
|
|
|
|
// @x-id "events"
|
|
// @BasePath /api/v1
|
|
// @Summary Get events history
|
|
// @Tags v1
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {array} events.Event
|
|
// @Failure 403 {object} apitypes.ErrorResponse "Forbidden: unauthorized"
|
|
// @Failure 500 {object} apitypes.ErrorResponse "Internal Server Error: internal error"
|
|
// @Router /events [get]
|
|
func Events(c *gin.Context) {
|
|
if !httpheaders.IsWebsocket(c.Request.Header) {
|
|
c.JSON(http.StatusOK, events.Global.Get())
|
|
return
|
|
}
|
|
|
|
manager, err := websocket.NewManagerWithUpgrade(c)
|
|
if err != nil {
|
|
c.Error(apitypes.InternalServerError(err, "failed to upgrade to websocket"))
|
|
return
|
|
}
|
|
defer manager.Close()
|
|
|
|
writer := manager.NewWriter(websocket.TextMessage)
|
|
err = events.Global.ListenJSON(c.Request.Context(), writer)
|
|
if err != nil && !errors.Is(err, context.Canceled) {
|
|
c.Error(apitypes.InternalServerError(err, "failed to listen to events"))
|
|
return
|
|
}
|
|
}
|