diff --git a/data/device_database.go b/data/device_database.go index 940f713..3faae0a 100644 --- a/data/device_database.go +++ b/data/device_database.go @@ -122,6 +122,15 @@ func (db *DeviceDatabase) CreateIntegration(name, token string) (string, error) return id, nil } +func (db *DeviceDatabase) GetIntegration(id string) (*Integration, error) { + var integration Integration + err := db.Connection.QueryRow("SELECT id, name FROM integrations WHERE id = ?", id).Scan(&integration.ID, &integration.Name) + if err != nil { + return nil, err + } + return &integration, nil +} + func (db *DeviceDatabase) GetIntegrations() ([]Integration, error) { var integrations []Integration diff --git a/management/device_manager.go b/management/device_manager.go index 49b2d18..6059d0c 100644 --- a/management/device_manager.go +++ b/management/device_manager.go @@ -125,6 +125,14 @@ func (um *DeviceManager) CreateIntegration(name, code string) (d.Integration, er return integration, nil } +func (um *DeviceManager) GetIntegration(id string) (*d.Integration, error) { + integration, err := um.deviceDatabase.GetIntegration(id) + if err != nil { + return nil, err + } + return integration, nil +} + func (um *DeviceManager) GetIntegrations() ([]d.Integration, error) { integrations, err := um.deviceDatabase.GetIntegrations() if err != nil { diff --git a/server/device_api_handler.go b/server/device_api_handler.go index aa259ed..20a7b7f 100644 --- a/server/device_api_handler.go +++ b/server/device_api_handler.go @@ -27,6 +27,7 @@ func (r *DeviceApiHandler) Initialize(authenticator *Authenticator) { integrationsApi.GET("/register", r.handleIntegrationRegistration) integrationsApi.POST("", r.handleCreateIntegration) integrationsApi.GET("", r.handleGetIntegrations) + integrationsApi.GET("/:id", r.handleGetIntegration) } func (r *DeviceApiHandler) handleIntegrationRegistration(context echo.Context) error { @@ -65,7 +66,38 @@ func (r *DeviceApiHandler) handleCreateIntegration(context echo.Context) error { return error } - return context.JSON(200, integration) + integrationData := struct { + ID string `json:"id"` + Name string `json:"name"` + Token string `json:"token"` + }{ + ID: integration.ID, + Name: integration.Name, + Token: integration.Token, + } + + return context.JSON(200, integrationData) +} + +func (r *DeviceApiHandler) handleGetIntegration(context echo.Context) error { + id := context.Param("id") + + integration, error := r.deviceManager.GetIntegration(id) + + if error != nil { + SendError(500, context, fmt.Sprintf("Failed to get integration: %s", error)) + return error + } + + integrationData := struct { + ID string `json:"id"` + Name string `json:"name"` + }{ + ID: integration.ID, + Name: integration.Name, + } + + return context.JSON(200, integrationData) } func (r *DeviceApiHandler) handleGetIntegrations(context echo.Context) error {