59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package gateway
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"realtime-gateway/internal/channel"
|
|
)
|
|
|
|
type createChannelRequest struct {
|
|
Label string `json:"label"`
|
|
DeliveryMode string `json:"deliveryMode"`
|
|
TTLSeconds int `json:"ttlSeconds"`
|
|
}
|
|
|
|
func (s *Server) registerChannelRoutes(mux *http.ServeMux) {
|
|
mux.HandleFunc("/api/channel/create", s.handleCreateChannel)
|
|
mux.HandleFunc("/api/admin/channels", s.handleAdminChannels)
|
|
}
|
|
|
|
func (s *Server) handleCreateChannel(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodPost {
|
|
writeJSON(w, http.StatusMethodNotAllowed, map[string]any{
|
|
"error": "method not allowed",
|
|
})
|
|
return
|
|
}
|
|
|
|
var request createChannelRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
|
writeJSON(w, http.StatusBadRequest, map[string]any{
|
|
"error": "invalid json body",
|
|
})
|
|
return
|
|
}
|
|
|
|
created, err := s.channels.Create(channel.CreateRequest{
|
|
Label: request.Label,
|
|
DeliveryMode: request.DeliveryMode,
|
|
TTLSeconds: request.TTLSeconds,
|
|
})
|
|
if err != nil {
|
|
writeJSON(w, http.StatusInternalServerError, map[string]any{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
writeJSON(w, http.StatusOK, created)
|
|
}
|
|
|
|
func (s *Server) handleAdminChannels(w http.ResponseWriter, _ *http.Request) {
|
|
items := s.channels.List()
|
|
writeJSON(w, http.StatusOK, map[string]any{
|
|
"items": items,
|
|
"count": len(items),
|
|
})
|
|
}
|