Skip to content
Next Next commit
add variables_details
  • Loading branch information
mirkoCrobu committed Nov 6, 2025
commit c8dfbff0840113aa522170b466f86815fb7ba8b1
52 changes: 38 additions & 14 deletions internal/orchestrator/bricks/bricks.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,20 @@ func (s *Service) AppBrickInstancesList(a *app.ArduinoApp) (AppBrickInstancesRes
if !found {
return AppBrickInstancesResult{}, fmt.Errorf("brick not found with id %s", brickInstance.ID)
}

instanceVariables := getBrickInstanceVariableDetails(brick, brickInstance.Variables)

res.BrickInstances[i] = BrickInstance{
ID: brick.ID,
Name: brick.Name,
Author: "Arduino", // TODO: for now we only support our bricks
Category: brick.Category,
Status: "installed",
ModelID: brickInstance.Model, // TODO: in case is not set by the user, should we return the default model?
Variables: brickInstance.Variables, // TODO: do we want to show also the default value of not explicitly set variables?
ID: brick.ID,
Name: brick.Name,
Author: "Arduino", // TODO: for now we only support our bricks
Category: brick.Category,
Status: "installed",
ModelID: brickInstance.Model, // TODO: in case is not set by the user, should we return the default model?
Variables: brickInstance.Variables, // TODO: do we want to show also the default value of not explicitly set variables?
VariablesDetails: instanceVariables,
}

}
return res, nil
}
Expand All @@ -111,21 +116,40 @@ func (s *Service) AppBrickInstanceDetails(a *app.ArduinoApp, brickID string) (Br
// Add/Update the variables with the ones from the app descriptor
maps.Copy(variables, a.Descriptor.Bricks[brickIndex].Variables)

instanceVariables := getBrickInstanceVariableDetails(brick, a.Descriptor.Bricks[brickIndex].Variables)

modelID := a.Descriptor.Bricks[brickIndex].Model
if modelID == "" {
modelID = brick.ModelName
}

return BrickInstance{
ID: brickID,
Name: brick.Name,
Author: "Arduino", // TODO: for now we only support our bricks
Category: brick.Category,
Status: "installed", // For now every Arduino brick are installed
Variables: variables,
ModelID: modelID,
ID: brickID,
Name: brick.Name,
Author: "Arduino", // TODO: for now we only support our bricks
Category: brick.Category,
Status: "installed", // For now every Arduino brick are installed
Variables: variables,
VariablesDetails: instanceVariables,
ModelID: modelID,
}, nil
}
func getBrickInstanceVariableDetails(
brick *bricksindex.Brick,
brickInstanceVariables map[string]string,
) []BrickInstanceVariable {
variableDetails := make([]BrickInstanceVariable, 0, len(brick.Variables))
for _, v := range brick.Variables {
value := brickInstanceVariables[v.Name]
variableDetails = append(variableDetails, BrickInstanceVariable{
Name: v.Name,
Value: value,
Description: v.Description,
Required: v.IsRequired(),
})
}
return variableDetails
}

func (s *Service) BricksDetails(id string, idProvider *app.IDProvider,
cfg config.Configuration) (BrickDetailsResult, error) {
Expand Down
22 changes: 15 additions & 7 deletions internal/orchestrator/bricks/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,21 @@ type AppBrickInstancesResult struct {
}

type BrickInstance struct {
ID string `json:"id"`
Name string `json:"name"`
Author string `json:"author"`
Category string `json:"category"`
Status string `json:"status"`
Variables map[string]string `json:"variables,omitempty"`
ModelID string `json:"model,omitempty"`
ID string `json:"id"`
Name string `json:"name"`
Author string `json:"author"`
Category string `json:"category"`
Status string `json:"status"`
Variables map[string]string `json:"variables,omitempty"`
VariablesDetails []BrickInstanceVariable `json:"variables_details,omitempty"`
ModelID string `json:"model,omitempty"`
}

type BrickInstanceVariable struct {
Name string `json:"name"`
Value string `json:"value"`
Description string `json:"description"`
Required bool `json:"required"`
}

type BrickVariable struct {
Expand Down