adding the model discovery 24/13524/2
authorrajdeep11 <rajdeep.sin@samsung.com>
Tue, 8 Oct 2024 14:36:25 +0000 (20:06 +0530)
committerrajdeep11 <rajdeep.sin@samsung.com>
Wed, 9 Oct 2024 05:03:11 +0000 (10:33 +0530)
Change-Id: I7763f1d2283766f89cdddc8e72fbc1c605692dda
Signed-off-by: rajdeep11 <rajdeep.sin@samsung.com>
apis/mmes_apis.go
db/iDB.go
db/modelInfoRepository.go

index 995bef2..afbe154 100644 (file)
@@ -21,6 +21,7 @@ import (
        "io"
        "net/http"
        "os"
+       "fmt"
 
        "gerrit.o-ran-sc.org/r/aiml-fw/awmf/modelmgmtservice/core"
        "gerrit.o-ran-sc.org/r/aiml-fw/awmf/modelmgmtservice/db"
@@ -107,42 +108,101 @@ func (m *MmeApiHandler) RegisterModel(cont *gin.Context) {
 This API retrieves model info list managed in modelmgmtservice
 */
 func (m *MmeApiHandler) GetModelInfo(cont *gin.Context) {
-       logging.INFO("List all model API")
-
-       models, err := m.iDB.GetAll()
-       if err != nil {
-               logging.ERROR("error:", err)
-               cont.JSON(http.StatusInternalServerError, gin.H{
-                       "code":    http.StatusInternalServerError,
-                       "message": err.Error(),
-               })
-               return
-       }
 
-       cont.JSON(http.StatusOK, models)
-       // bucketList, err := m.dbmgr.ListBucket(os.Getenv("INFO_FILE_POSTFIX"))
-       // if err != nil {
-       //      statusCode := http.StatusInternalServerError
-       //      logging.ERROR("Error occurred, send status code: ", statusCode)
-       //      cont.JSON(statusCode, gin.H{
-       //              "code":    statusCode,
-       //              "message": "Unexpected Error in server, you can't get model information list",
-       //      })
-       //      return
-       // }
+       logging.INFO("Get model info ")
+       queryParams := cont.Request.URL.Query()
+       //to check only modelName and modelVersion can be passed.
+       allowedParams := map[string]bool{
+               "modelName": true,
+               "modelVersion": true,
+       }
 
-       // modelInfoListResp := []models.ModelInfoResponse{}
-       // for _, bucket := range bucketList {
-       //      modelInfoListResp = append(modelInfoListResp, models.ModelInfoResponse{
-       //              Name: bucket.Name,
-       //              Data: string(bucket.Object),
-       //      })
-       // }
+       for key := range queryParams {
+               if !allowedParams[key] {
+                       cont.JSON(http.StatusBadRequest, gin.H{
+                               "error": "Only modelName and modelVersion are allowed",
+                       })
+                       return
+               }
+       }
 
-       // cont.JSON(http.StatusOK, gin.H{
-       //      "code":    http.StatusOK,
-       //      "message": modelInfoListResp,
-       // })
+       modelName:= cont.Query("modelName")
+       modelVersion:= cont.Query("modelVersion")
+
+       if modelName == "" {
+               //return all modelinfo stored 
+
+               models, err := m.iDB.GetAll()
+               if err != nil {
+                       logging.ERROR("error:", err)
+                       cont.JSON(http.StatusInternalServerError, gin.H{
+                               "code":    http.StatusInternalServerError,
+                               "message": err.Error(),
+                       })
+                       return
+               }
+               cont.JSON(http.StatusOK, models)
+               return
+       } else {
+               if modelVersion == "" {
+                       // get all modelInfo by model name
+                       modelInfos, err:= m.iDB.GetModelInfoByName(modelName)
+                       if err != nil {
+                               statusCode := http.StatusInternalServerError
+                               logging.ERROR("Error occurred, send status code: ", statusCode)
+                               cont.JSON(statusCode, gin.H{
+                                       "code":    statusCode,
+                                       "message": "Unexpected Error in server, you can't get model information list",
+                               })
+                               return
+                       }
+                       //to check record not found
+                       if len(modelInfos)==0{
+                               statusCode := http.StatusNotFound
+                               errMessage := fmt.Sprintf("Record not found with modelName: %s", modelName)
+                               logging.ERROR("Record not found, send status code: ", statusCode)
+                               cont.JSON(statusCode, gin.H{
+                                       "code":    statusCode,
+                                       "message": errMessage,
+                               })
+                               return
+                       }
+
+                       cont.JSON(http.StatusOK, gin.H{
+                               "modelinfoList":modelInfos,
+                       })
+                       return
+
+               } else
+               {
+                       // get all modelInfo by model name and version
+                       modelInfo, err:= m.iDB.GetModelInfoByNameAndVer(modelName, modelVersion)
+                       if err != nil {
+                               statusCode := http.StatusInternalServerError
+                               logging.ERROR("Error occurred, send status code: ", statusCode)
+                               cont.JSON(statusCode, gin.H{
+                                       "code":    statusCode,
+                                       "message": "Unexpected Error in server, you can't get model information list",
+                               })
+                               return
+                       }
+                       if modelInfo.Id == ""{
+                               statusCode := http.StatusNotFound
+                               errMessage := fmt.Sprintf("Record not found with modelName: %s and modelVersion: %s", modelName, modelVersion)
+                               logging.ERROR("Record not found, send status code: ", statusCode)
+                               cont.JSON(statusCode, gin.H{
+                                       "code":    statusCode,
+                                       "message": errMessage,
+                               })
+                               return
+                       }
+
+                       cont.JSON(http.StatusOK, gin.H{
+                               "modelinfo":modelInfo,
+                       })
+                       return
+               }
+       }
 }
 
 /*
index a237a69..969c634 100644 (file)
--- a/db/iDB.go
+++ b/db/iDB.go
@@ -25,6 +25,8 @@ type IDB interface {
        Create(modelInfo models.ModelInfo) error
        GetByID(id string) (*models.ModelInfo, error)
        GetAll() ([]models.ModelInfo, error)
+       GetModelInfoByName(modelName string)([]models.ModelInfo, error)
+       GetModelInfoByNameAndVer(modelName string, modelVersion string)(*models.ModelInfo, error)
        Update(modelInfo models.ModelInfo) error
        Delete(id string) error
 }
index 5ac9fdd..e277253 100644 (file)
@@ -65,3 +65,20 @@ func (repo *ModelInfoRepository) Delete(id string) error {
        }
        return nil
 }
+func (repo *ModelInfoRepository) GetModelInfoByName(modelName string)([]models.ModelInfo, error){
+       var modelInfos []models.ModelInfo
+       result := repo.db.Where("model_name = ?", modelName).Find(&modelInfos)
+       if result.Error != nil {
+               return nil, result.Error
+       }
+       return modelInfos, nil
+}
+
+func (repo *ModelInfoRepository) GetModelInfoByNameAndVer(modelName string, modelVersion string)(*models.ModelInfo, error){
+       var modelInfo models.ModelInfo
+       result := repo.db.Where("model_name = ? AND model_version = ?", modelName, modelVersion).Find(&modelInfo)
+       if result.Error != nil {
+               return nil, result.Error
+       }
+       return &modelInfo, nil
+}
\ No newline at end of file