Skip to content

Commit

Permalink
updated plugin list, detail get api (#3627)
Browse files Browse the repository at this point in the history
Co-authored-by: Kartik <kartik@MacBook-Pro.Dlink>
  • Loading branch information
kartik-579 and Kartik committed Jul 14, 2023
1 parent 229e3f9 commit 373e784
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 55 deletions.
145 changes: 90 additions & 55 deletions pkg/plugin/GlobalPluginService.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type GlobalVariable struct {

type GlobalPluginService interface {
GetAllGlobalVariables() ([]*GlobalVariable, error)
ListAllPlugins() ([]*PluginMetadataDto, error)
ListAllPlugins() ([]*PluginListComponentDto, error)
GetPluginDetailById(pluginId int) (*PluginDetailDto, error)
}

Expand Down Expand Up @@ -72,48 +72,27 @@ func (impl *GlobalPluginServiceImpl) GetAllGlobalVariables() ([]*GlobalVariable,
return globalVariables, nil
}

func (impl *GlobalPluginServiceImpl) ListAllPlugins() ([]*PluginMetadataDto, error) {
func (impl *GlobalPluginServiceImpl) ListAllPlugins() ([]*PluginListComponentDto, error) {
impl.logger.Infow("request received, ListAllPlugins")

var plugins []*PluginMetadataDto

var pluginDetails []*PluginListComponentDto
//getting all plugins metadata(without tags)
pluginsMetadata, err := impl.globalPluginRepository.GetMetaDataForAllPlugins()
if err != nil {
impl.logger.Errorw("error in getting plugins", "err", err)
return nil, err
}
//getting all plugin tags
pluginTags, err := impl.globalPluginRepository.GetAllPluginTags()
if err != nil && err != pg.ErrNoRows {
impl.logger.Errorw("error in getting all plugin tags", "err", err)
pluginIdTagsMap, err := impl.getPluginIdTagsMap()
if err != nil {
impl.logger.Errorw("error, getPluginIdTagsMap", "err", err)
return nil, err
}
tagIdNameMap := make(map[int]string)
for _, tag := range pluginTags {
tagIdNameMap[tag.Id] = tag.Name
}
//getting plugin-tag relations
relations, err := impl.globalPluginRepository.GetAllPluginTagRelations()
pluginIdInputVariablesMap, pluginIdOutputVariablesMap, err := impl.getPluginIdVariablesMap()
if err != nil {
impl.logger.Errorw("error in getting all plugin-tag relations", "err", err)
impl.logger.Errorw("error, getPluginIdVariablesMap", "err", err)
return nil, err
}
pluginIdTagsMap := make(map[int][]string)
for _, relation := range relations {
tag, ok := tagIdNameMap[relation.TagId]
if ok {
tags, ok2 := pluginIdTagsMap[relation.PluginId]
if ok2 {
tags = append(tags, tag)
} else {
tags = []string{tag}
}
pluginIdTagsMap[relation.PluginId] = tags
}
}
for _, pluginMetadata := range pluginsMetadata {
plugin := &PluginMetadataDto{
pluginMetadataDto := &PluginMetadataDto{
Id: pluginMetadata.Id,
Name: pluginMetadata.Name,
Type: string(pluginMetadata.Type),
Expand All @@ -122,11 +101,16 @@ func (impl *GlobalPluginServiceImpl) ListAllPlugins() ([]*PluginMetadataDto, err
}
tags, ok := pluginIdTagsMap[pluginMetadata.Id]
if ok {
plugin.Tags = tags
pluginMetadataDto.Tags = tags
}
plugins = append(plugins, plugin)
pluginDetail := &PluginListComponentDto{
PluginMetadataDto: pluginMetadataDto,
InputVariables: pluginIdInputVariablesMap[pluginMetadata.Id],
OutputVariables: pluginIdOutputVariablesMap[pluginMetadata.Id],
}
pluginDetails = append(pluginDetails, pluginDetail)
}
return plugins, nil
return pluginDetails, nil
}

func (impl *GlobalPluginServiceImpl) GetPluginDetailById(pluginId int) (*PluginDetailDto, error) {
Expand All @@ -148,39 +132,90 @@ func (impl *GlobalPluginServiceImpl) GetPluginDetailById(pluginId int) (*PluginD
pluginDetail := &PluginDetailDto{
Metadata: metadataDto,
}
pluginDetail.InputVariables, pluginDetail.OutputVariables, err = impl.getIOVariablesOfAPlugin(pluginMetadata.Id)
if err != nil {
impl.logger.Errorw("error, getIOVariablesOfAPlugin", "err", err)
return nil, err
}
return pluginDetail, nil
}

//getting exposed variables
pluginVariables, err := impl.globalPluginRepository.GetExposedVariablesByPluginId(pluginId)
func (impl *GlobalPluginServiceImpl) getPluginIdTagsMap() (map[int][]string, error) {
//getting all plugin tags
pluginTags, err := impl.globalPluginRepository.GetAllPluginTags()
if err != nil && err != pg.ErrNoRows {
impl.logger.Errorw("error in getting all plugin tags", "err", err)
return nil, err
}
tagIdNameMap := make(map[int]string)
for _, tag := range pluginTags {
tagIdNameMap[tag.Id] = tag.Name
}
//getting plugin-tag relations
relations, err := impl.globalPluginRepository.GetAllPluginTagRelations()
if err != nil {
impl.logger.Errorw("error in getting pluginVariables by pluginId", "err", err, "pluginId", pluginId)
impl.logger.Errorw("error in getting all plugin-tag relations", "err", err)
return nil, err
}
pluginIdTagsMap := make(map[int][]string)
for _, relation := range relations {
tag, ok := tagIdNameMap[relation.TagId]
if ok {
pluginIdTagsMap[relation.PluginId] = append(pluginIdTagsMap[relation.PluginId], tag)
}
}
return pluginIdTagsMap, nil
}

var inputVariablesDto []*PluginVariableDto
var outputVariablesDto []*PluginVariableDto
func (impl *GlobalPluginServiceImpl) getPluginIdVariablesMap() (map[int][]*PluginVariableDto, map[int][]*PluginVariableDto, error) {
variables, err := impl.globalPluginRepository.GetExposedVariablesForAllPlugins()
if err != nil {
impl.logger.Errorw("error in getting exposed vars for all plugins", "err", err)
return nil, nil, err
}
pluginIdInputVarsMap, pluginIdOutputVarsMap := make(map[int][]*PluginVariableDto), make(map[int][]*PluginVariableDto)
for _, variable := range variables {
variableDto := getVariableDto(variable)
if variable.VariableType == repository.PLUGIN_VARIABLE_TYPE_INPUT {
pluginIdInputVarsMap[variable.PluginMetadataId] = append(pluginIdInputVarsMap[variable.PluginMetadataId], variableDto)
} else if variable.VariableType == repository.PLUGIN_VARIABLE_TYPE_OUTPUT {
pluginIdOutputVarsMap[variable.PluginMetadataId] = append(pluginIdOutputVarsMap[variable.PluginMetadataId], variableDto)
}
}
return pluginIdInputVarsMap, pluginIdOutputVarsMap, nil
}

func (impl *GlobalPluginServiceImpl) getIOVariablesOfAPlugin(pluginId int) (inputVariablesDto, outputVariablesDto []*PluginVariableDto, err error) {
//getting exposed variables
pluginVariables, err := impl.globalPluginRepository.GetExposedVariablesByPluginId(pluginId)
if err != nil {
impl.logger.Errorw("error in getting pluginVariables by pluginId", "err", err, "pluginId", pluginId)
return nil, nil, err
}
for _, pluginVariable := range pluginVariables {
variableDto := &PluginVariableDto{
Id: pluginVariable.Id,
Name: pluginVariable.Name,
Format: pluginVariable.Format,
Description: pluginVariable.Description,
IsExposed: pluginVariable.IsExposed,
AllowEmptyValue: pluginVariable.AllowEmptyValue,
DefaultValue: pluginVariable.DefaultValue,
Value: pluginVariable.Value,
ValueType: pluginVariable.ValueType,
PreviousStepIndex: pluginVariable.PreviousStepIndex,
VariableStepIndex: pluginVariable.VariableStepIndex,
ReferenceVariableName: pluginVariable.ReferenceVariableName,
}
variableDto := getVariableDto(pluginVariable)
if pluginVariable.VariableType == repository.PLUGIN_VARIABLE_TYPE_INPUT {
inputVariablesDto = append(inputVariablesDto, variableDto)
} else if pluginVariable.VariableType == repository.PLUGIN_VARIABLE_TYPE_OUTPUT {
outputVariablesDto = append(outputVariablesDto, variableDto)
}
}
pluginDetail.InputVariables = inputVariablesDto
pluginDetail.OutputVariables = outputVariablesDto
return pluginDetail, nil
return inputVariablesDto, outputVariablesDto, nil
}

func getVariableDto(pluginVariable *repository.PluginStepVariable) *PluginVariableDto {
return &PluginVariableDto{
Id: pluginVariable.Id,
Name: pluginVariable.Name,
Format: pluginVariable.Format,
Description: pluginVariable.Description,
IsExposed: pluginVariable.IsExposed,
AllowEmptyValue: pluginVariable.AllowEmptyValue,
DefaultValue: pluginVariable.DefaultValue,
Value: pluginVariable.Value,
ValueType: pluginVariable.ValueType,
PreviousStepIndex: pluginVariable.PreviousStepIndex,
VariableStepIndex: pluginVariable.VariableStepIndex,
ReferenceVariableName: pluginVariable.ReferenceVariableName,
}
}
6 changes: 6 additions & 0 deletions pkg/plugin/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ type PluginDetailDto struct {
OutputVariables []*PluginVariableDto `json:"outputVariables"`
}

type PluginListComponentDto struct { //created new struct for backward compatibility (needed to add input and output Vars along with metadata fields)
*PluginMetadataDto
InputVariables []*PluginVariableDto `json:"inputVariables"`
OutputVariables []*PluginVariableDto `json:"outputVariables"`
}

type PluginMetadataDto struct {
Id int `json:"id"`
Name string `json:"name"`
Expand Down
17 changes: 17 additions & 0 deletions pkg/plugin/repository/GlobalPluginRepository.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ type PluginStepVariable struct {
ReferenceVariableName string `sql:"reference_variable_name"`
Deleted bool `sql:"deleted,notnull"`
sql.AuditLog
PluginMetadataId int `sql:"-"`
}

type PluginStepCondition struct {
Expand All @@ -166,6 +167,7 @@ type GlobalPluginRepository interface {
GetStepsByPluginIds(pluginIds []int) ([]*PluginStep, error)
GetExposedVariablesByPluginIdAndVariableType(pluginId int, variableType PluginStepVariableType) ([]*PluginStepVariable, error)
GetExposedVariablesByPluginId(pluginId int) ([]*PluginStepVariable, error)
GetExposedVariablesForAllPlugins() ([]*PluginStepVariable, error)
GetConditionsByStepId(stepId int) ([]*PluginStepCondition, error)
}

Expand Down Expand Up @@ -322,6 +324,21 @@ func (impl *GlobalPluginRepositoryImpl) GetExposedVariablesByPluginId(pluginId i
return pluginVariables, nil
}

func (impl *GlobalPluginRepositoryImpl) GetExposedVariablesForAllPlugins() ([]*PluginStepVariable, error) {
var pluginVariables []*PluginStepVariable
query := `SELECT psv.*, pm.id as plugin_metadata_id from plugin_step_variable psv
INNER JOIN plugin_step ps on ps.id = psv.plugin_step_id
INNER JOIN plugin_metadata pm on pm.id = ps.plugin_id
WHERE psv.deleted = ? and psv.is_exposed = ? and
ps.deleted = ? and pm.deleted = ?;`
_, err := impl.dbConnection.Query(&pluginVariables, query, false, true, false, false)
if err != nil {
impl.logger.Errorw("err in getting exposed variables for all plugins", "err", err)
return nil, err
}
return pluginVariables, nil
}

func (impl *GlobalPluginRepositoryImpl) GetConditionsByStepId(stepId int) ([]*PluginStepCondition, error) {
var conditions []*PluginStepCondition
err := impl.dbConnection.Model(&conditions).
Expand Down

0 comments on commit 373e784

Please sign in to comment.