package handlers import ( "net/http" "github.com/labstack/echo/v5" "trankilou.fr/lassistanoque/backend/internal/domain" "trankilou.fr/lassistanoque/backend/internal/service/auth" "trankilou.fr/lassistanoque/backend/internal/service/provider" ) func NewModelGroup(prefix string, e *echo.Group, service *provider.Service, middlewares ...echo.MiddlewareFunc) *echo.Group { modelHandler := &ModelHandler{ providerService: service, } model := e.Group(prefix, middlewares...) model.GET("/providerTypes", modelHandler.ListProviderTypes) model.GET("/:space", modelHandler.ListProviders) model.POST("/:space/avalable-models", modelHandler.ListAvailableModels) model.GET("/:space/:provider", modelHandler.GetProvider) model.PUT("/:space", modelHandler.UpdateProvider) model.POST("/:space", modelHandler.CreateProvider) model.DELETE("/:space/:provider", modelHandler.DeleteProvider) return model } type ModelHandler struct { providerService *provider.Service } func (h *ModelHandler) ListProviderTypes(c *echo.Context) error { return c.JSON(http.StatusOK, h.providerService.ListProviderTypes()) } func (h *ModelHandler) ListProviders(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") providers, err := h.providerService.ListProviders(userID, teamID) if err != nil { c.Logger().Error("error listing providers: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error listing providers") } return c.JSON(http.StatusOK, providers) } func (h *ModelHandler) GetProvider(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") providerID := c.Param("provider") provider, err := h.providerService.GetProvider(userID, teamID, providerID) if err != nil { c.Logger().Error("error getting provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error getting provider") } return c.JSON(http.StatusOK, provider) } func (h *ModelHandler) CreateProvider(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") var provider domain.Provider err := c.Bind(&provider) if err != nil { c.Logger().Error("error binding provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error binding provider") } provider.TeamID = teamID updprovider, err := h.providerService.CreateProvider(userID, &provider) if err != nil { c.Logger().Error("error creating provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error creating provider") } return c.JSON(http.StatusOK, updprovider) } func (h *ModelHandler) UpdateProvider(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") var provider domain.Provider err := c.Bind(&provider) if err != nil { c.Logger().Error("error binding provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error binding provider") } provider.TeamID = teamID updprovider, err := h.providerService.UpdateProvider(userID, &provider) if err != nil { c.Logger().Error("error updating provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error creating provider") } return c.JSON(http.StatusOK, updprovider) } func (h *ModelHandler) DeleteProvider(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") providerID := c.Param("provider") err := h.providerService.DeleteProvider(userID, teamID, providerID) if err != nil { c.Logger().Error("error creating provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error creating provider") } return c.JSON(http.StatusOK, providerID) } func (h *ModelHandler) ListAvailableModels(c *echo.Context) error { teamID := c.Param("space") var provider domain.Provider err := c.Bind(&provider) if err != nil { c.Logger().Error("error binding provider: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error binding provider") } provider.TeamID = teamID list, err := h.providerService.ListAvailableModels(c.Request().Context(), &provider) if err != nil { c.Logger().Error("error listing models: %s", err) return echo.NewHTTPError(http.StatusBadRequest, "error creating provider") } return c.JSON(http.StatusOK, list) }