package logic import ( "context" "gorm.io/gorm" "chainmaker.org/chainmaker/ida/registration-service/internal/code" "chainmaker.org/chainmaker/ida/registration-service/internal/model" "chainmaker.org/chainmaker/ida/registration-service/internal/svc" "chainmaker.org/chainmaker/ida/registration-service/registration" "github.com/zeromicro/go-zero/core/logx" ) // UpdateAPILogic - type UpdateAPILogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } // NewUpdateAPILogic - func NewUpdateAPILogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateAPILogic { return &UpdateAPILogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // UpdateAPI // 7. 修改数据API信息接口 func (l *UpdateAPILogic) UpdateAPI(in *registration.UpdateAPIReq) (*registration.UpdateAPIResp, error) { // 1. 参数校验 if in.AssetId == 0 || in.Url == "" || in.Method == "" { // 记录日志 l.Logger.Errorf("requestId: [%s], check params error", in.RequestId) return ®istration.UpdateAPIResp{ Code: int32(code.ErrParams), Msg: code.ErrParams.String(), }, nil } // 2. 准备DB DB := l.svcCtx.GDB.WithContext(l.ctx) // 4. 查询资产是否存在 if err := DB.Where("id = ? ", in.AssetId).First(&model.Asset{}).Error; err != nil { // 记录日志 l.Logger.Errorf("requestId: [%s], get asset error: %s", in.RequestId, err) return ®istration.UpdateAPIResp{ Code: int32(code.ErrInvalidAssetId), Msg: code.ErrInvalidAssetId.String(), }, nil } // 3. 查询API信息是否存在,如果存在则修改,如果不存在则添加 assetAPI := &model.AssetApi{} if err := DB.Where("asset_id = ?", in.AssetId).First(assetAPI).Error; err == nil || err == gorm.ErrRecordNotFound { assetAPI.Url = in.Url assetAPI.Params = in.Params assetAPI.Method = in.Method assetAPI.Response = in.Response assetAPI.RespType = in.RespType if err = DB.Where("asset_id = ?", in.AssetId).Save(assetAPI).Error; err != nil { // 记录日志 l.Logger.Errorf("requestId: [%s], update asset api error: %s", in.RequestId, err.Error()) return ®istration.UpdateAPIResp{ Code: int32(code.ErrDB), Msg: code.ErrDB.String(), }, nil } } else { // 记录日志 l.Logger.Errorf("requestId: [%s], query api info error: %s", in.RequestId, err.Error()) return ®istration.UpdateAPIResp{ Code: int32(code.ErrInvalidAssetId), Msg: code.ErrInvalidAssetId.String(), }, nil } return ®istration.UpdateAPIResp{ Code: int32(code.Success), }, nil }