1010 lines
34 KiB
Go
1010 lines
34 KiB
Go
|
package application
|
|||
|
|
|||
|
import (
|
|||
|
"finclip-app-manager/domain/entity"
|
|||
|
"finclip-app-manager/domain/entity/proto/apiproto"
|
|||
|
"finclip-app-manager/domain/repository"
|
|||
|
"finclip-app-manager/domain/service"
|
|||
|
"finclip-app-manager/infrastructure/config"
|
|||
|
"finclip-app-manager/infrastructure/utility"
|
|||
|
"net/http"
|
|||
|
"strconv"
|
|||
|
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
"gitlab.finogeeks.club/finclip-backend/apm"
|
|||
|
)
|
|||
|
|
|||
|
/**
|
|||
|
* @api {POST} {{URL_PREFIX}}/apps/builds [C/S][MOP]获取当前app的可审核版本
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiVersion __API_VERSION__
|
|||
|
* @apiPrivate
|
|||
|
*
|
|||
|
* @apiParam (RequestBody) {string} [developerId] 开发者id,URL_PREFIX为/api/v1/finstore时填写
|
|||
|
* @apiParam (RequestBody) {string} appId 应用id
|
|||
|
* @apiParam (RequestBody) {bool=true,false} needAutoPub=false 审核通过是否自动上架
|
|||
|
* @apiSuccessExample {json} Success-Response:
|
|||
|
{}
|
|||
|
*/
|
|||
|
|
|||
|
type GetAppBuildsReq struct {
|
|||
|
AppId string `form:"appId"`
|
|||
|
PageSize int `form:"pageSize"`
|
|||
|
PageNo int `form:"pageNo"`
|
|||
|
}
|
|||
|
|
|||
|
type GetAppBuildsRspItem struct {
|
|||
|
Id string `json:"id" bson:"id"`
|
|||
|
BuildInfoId string `json:"buildInfoId" bson:"buildInfoId"`
|
|||
|
Source string `json:"source" bson:"source"` // 该上传版本的状态: build:正常版本, trail:被设置为体验版
|
|||
|
AppID string `json:"appId" bson:"appId"`
|
|||
|
GroupID string `json:"groupId" bson:"groupId"`
|
|||
|
Created int64 `json:"created" bson:"created"` //创建该编译版本的时间
|
|||
|
UserId string `json:"userId" bson:"userId"`
|
|||
|
CreatedBy string `json:"createdBy" bson:"createdBy"` //创建人
|
|||
|
|
|||
|
CustomData entity.CustomDataInfo `json:"customData" bson:"customData"`
|
|||
|
Version string `json:"version" bson:"version"`
|
|||
|
StartParams entity.AppStartParams `json:"startParams" bson:"startParams"`
|
|||
|
Status bool `json:"status" bson:"status"`
|
|||
|
IsSecurityAuditPass int `json:"isSecurityAuditPass" bson:"isSecurityAuditPass"` //安全审核是否通过(0,未通过 1:通过)
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {GET} /api/v1/mop/finstore/dev/appInfo/builds?appId=62986ead277a0d00017b782f [C/S]获取编译开发列表
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestParam) {string} appId //小程序id
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
* {
|
|||
|
* "data": {
|
|||
|
* "appBuilds": [
|
|||
|
* {
|
|||
|
* "id": "62986ead277a0d00017b782f",
|
|||
|
* "buildInfoId": "ac8f47cf-65a9-43d8-b2ac-34fba808707a",
|
|||
|
* "source": "build",
|
|||
|
* "appId": "62986e87277a0d00017b782e",
|
|||
|
* "groupId": "628b2215062d300001e36286",
|
|||
|
* "created": 1654156973289,
|
|||
|
* "userId": "628b2215062d300001e36285",
|
|||
|
* "createdBy": "15377373355",
|
|||
|
* "customData": {
|
|||
|
* "detailDescription": "",
|
|||
|
* "sourceFile": [
|
|||
|
* {
|
|||
|
* "fileMd5": "159eed6c06432b1a4f68ced6c19a1bfe",
|
|||
|
* "name": "app.zip",
|
|||
|
* "sourceFileUrl": "/api/v1/mop/netdisk/download/62986eaa1f1afd0001c3698c",
|
|||
|
* "uploadDate": 1654156973289,
|
|||
|
* "url": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698d",
|
|||
|
* "encryptedUrl": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698e",
|
|||
|
* "encryptedFileMd5": "fad7bd98dbcabb560ca30f4c99121a42",
|
|||
|
* "encryptedFileSha256": "c9e9db06725f95a4418c83d54dda3499946b8e1c894583b6477a36cc1d796668",
|
|||
|
* "basicPackVer": "",
|
|||
|
* "Packages": [],
|
|||
|
* "EncryptPackages": []
|
|||
|
* }
|
|||
|
* ],
|
|||
|
* "versionDescription": "1.0.0",
|
|||
|
* "developer": "15377373355"
|
|||
|
* },
|
|||
|
* "version": "1.0.0",
|
|||
|
* "startParams": {
|
|||
|
* "pathAndQuery": ""
|
|||
|
* },
|
|||
|
* "status": true
|
|||
|
* }
|
|||
|
* ],
|
|||
|
* "total": 1
|
|||
|
* },
|
|||
|
* "errcode": "OK",
|
|||
|
* "error": ""
|
|||
|
* }
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
func GetAppBuilds(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := GetAppBuildsReq{}
|
|||
|
if err := c.BindQuery(&req); err != nil {
|
|||
|
log.Errorf("GetAppBuilds bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_BAD_JSON, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
pageNo := c.DefaultQuery("pageNo", "0")
|
|||
|
pageSize := c.DefaultQuery("pageSize", "20") //config.GetConfig().CodePackageNumLimit
|
|||
|
|
|||
|
pageNoInt, _ := strconv.Atoi(pageNo)
|
|||
|
pageNoInt += 1
|
|||
|
pageSizeInt, _ := strconv.Atoi(pageSize)
|
|||
|
appId := c.Query("appId")
|
|||
|
userId := utility.GetUserId(c)
|
|||
|
|
|||
|
log.Infof("GetAppBuilds req:%+v,pageNo:%d,pageSize:%d,userId:%s", req, pageNoInt, pageSizeInt, userId)
|
|||
|
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
appBuilds, total, err := svr.GetAppBuilds(traceCtx, userId, appId, pageSizeInt, pageNoInt)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetAppBuilds err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SYSTEM_CALL, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
log.Debugf("appBuilds:%+v", appBuilds)
|
|||
|
res := make([]GetAppBuildsRspItem, 0)
|
|||
|
for _, v := range appBuilds {
|
|||
|
item := GetAppBuildsRspItem{
|
|||
|
Id: v.Id,
|
|||
|
BuildInfoId: v.BuildInfoId,
|
|||
|
Source: v.Source,
|
|||
|
AppID: v.AppID,
|
|||
|
GroupID: v.GroupID,
|
|||
|
Created: v.Created,
|
|||
|
UserId: v.UserId,
|
|||
|
CreatedBy: v.CreatedBy,
|
|||
|
CustomData: entity.CustomDataInfo{
|
|||
|
VersionDescription: v.CustomData.VersionDescription,
|
|||
|
SourceFile: v.CustomData.SourceFile,
|
|||
|
Developer: v.CustomData.Developer,
|
|||
|
},
|
|||
|
Version: v.Version,
|
|||
|
|
|||
|
StartParams: entity.AppStartParams{},
|
|||
|
Status: v.Status,
|
|||
|
}
|
|||
|
if config.GetConfig().IsOpenAuditSecurity {
|
|||
|
auditInfo, err := hCaller.GetAuditDataInfoByBuildInfoId(traceCtx, v.BuildInfoId)
|
|||
|
log.Debugln("GetAuditDataInfoByBuildInfoId:%v", utility.InterfaceToJsonString(auditInfo))
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetAuditDataInfoByBuildInfoId err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SYSTEM_CALL, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
item.IsSecurityAuditPass = 0
|
|||
|
//0无,1审核中,2通过,3不通过
|
|||
|
if auditInfo.Data.Status == 2 {
|
|||
|
item.IsSecurityAuditPass = 1
|
|||
|
}
|
|||
|
//0:无 1:审批通过
|
|||
|
if auditInfo.Data.OperOpinion == 1 {
|
|||
|
item.IsSecurityAuditPass = 1
|
|||
|
}
|
|||
|
} else {
|
|||
|
item.IsSecurityAuditPass = 1
|
|||
|
}
|
|||
|
|
|||
|
res = append(res, item)
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, gin.H{"appBuilds": res, "total": total})
|
|||
|
}
|
|||
|
|
|||
|
type WechatInfoRsp struct {
|
|||
|
WechatAppSecret string `json:"wechatAppSecret" bson:"wechatAppSecret"`
|
|||
|
WechatAppId string `json:"wechatAppId" bson:"wechatAppId"`
|
|||
|
WechatPath string `json:"wechatPath" bson:"wechatPath"`
|
|||
|
WechatSize string `json:"wechatSize" bson:"wechatSize"`
|
|||
|
QrcodeUrl string `json:"qrcodeUrl" bson:"qrcodeUrl"`
|
|||
|
QrcodeDownloadUrl string `json:"qrcodeDownloadUrl" bson:"qrcodeDownloadUrl"`
|
|||
|
Updated int64 `json:"updated" bson:"updated"`
|
|||
|
ShowHint bool `json:"showHint" bson:"-"` // 是否展示提示
|
|||
|
}
|
|||
|
|
|||
|
type GetLatestAppInfoRsp struct {
|
|||
|
OnlineAppInfo interface{} `json:"onlineAppInfo"` //线上小程序详情
|
|||
|
ReviewVersion interface{} `json:"reviewVersion"` //最新审核版本信息
|
|||
|
TrialVersion interface{} `json:"trialVersion"` //最新体验版本信息
|
|||
|
ExtInfo map[string]interface{} `json:"extInfo"` //额外数据 extInfo: {trialQrcodeHasRead: true}
|
|||
|
WechatInfo interface{} `json:"wechatInfo"`
|
|||
|
WechatLoginInfo interface{} `json:"wechatLoginInfo"`
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {GET} /api/v1/mop/finstore/dev/appInfo/latest?appId=62986ead277a0d00017b782f [C/S]获取最新线上版、最新审核版本、最新体验版
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestParam) {string} appId //小程序id
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"onlineAppInfo": {
|
|||
|
"appId": "62986e87277a0d00017b782e",
|
|||
|
"name": "1",
|
|||
|
"appClass": "jinrong",
|
|||
|
"appTag": [
|
|||
|
"zhengquankaihu"
|
|||
|
],
|
|||
|
"appType": "Applet",
|
|||
|
"status": {
|
|||
|
"value": "Published",
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654157465456,
|
|||
|
"modifiedBy": "自动上架"
|
|||
|
},
|
|||
|
"publishingStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654156994088,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"unpublishingStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"publishingApprovalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654157465436,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"unpublishingApprovalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"publishedStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654157465456,
|
|||
|
"modifiedBy": "自动上架"
|
|||
|
},
|
|||
|
"unpublishedStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": "",
|
|||
|
"type": ""
|
|||
|
},
|
|||
|
"requestStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"approvalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654157465436,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"actionStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654157465456,
|
|||
|
"modifiedBy": "自动上架"
|
|||
|
},
|
|||
|
"developerId": "628b2215062d300001e36285",
|
|||
|
"groupId": "628b2215062d300001e36286",
|
|||
|
"created": 1654156994088,
|
|||
|
"createdBy": "15377373355",
|
|||
|
"customData": {
|
|||
|
"detailDescription": "",
|
|||
|
"sourceFile": [
|
|||
|
{
|
|||
|
"fileMd5": "159eed6c06432b1a4f68ced6c19a1bfe",
|
|||
|
"name": "app.zip",
|
|||
|
"sourceFileUrl": "/api/v1/mop/netdisk/download/62986eaa1f1afd0001c3698c",
|
|||
|
"uploadDate": 1654156973289,
|
|||
|
"url": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698d",
|
|||
|
"encryptedUrl": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698e",
|
|||
|
"encryptedFileMd5": "fad7bd98dbcabb560ca30f4c99121a42",
|
|||
|
"encryptedFileSha256": "c9e9db06725f95a4418c83d54dda3499946b8e1c894583b6477a36cc1d796668",
|
|||
|
"basicPackVer": "",
|
|||
|
"Packages": [],
|
|||
|
"EncryptPackages": []
|
|||
|
}
|
|||
|
],
|
|||
|
"versionDescription": "1.0.0",
|
|||
|
"developer": "15377373355"
|
|||
|
},
|
|||
|
"version": "1.0.0",
|
|||
|
"sequence": 1,
|
|||
|
"corporationId": "",
|
|||
|
"coreDescription": "123",
|
|||
|
"logo": "https://www-cdn.finclip.com/images/ic-default.png",
|
|||
|
"isRollback": false,
|
|||
|
"testInfo": {
|
|||
|
"account": "",
|
|||
|
"password": "",
|
|||
|
"description": "",
|
|||
|
"images": []
|
|||
|
},
|
|||
|
"needAutoPub": true,
|
|||
|
"inGrayRelease": false,
|
|||
|
"expire": 0,
|
|||
|
"appBuildID": "62986ead277a0d00017b782f"
|
|||
|
},
|
|||
|
"reviewVersion": {
|
|||
|
"appId": "62986e87277a0d00017b782e",
|
|||
|
"name": "1",
|
|||
|
"appClass": "jinrong",
|
|||
|
"appTag": [
|
|||
|
"zhengquankaihu"
|
|||
|
],
|
|||
|
"appType": "Applet",
|
|||
|
"status": {
|
|||
|
"value": "PublishApproved",
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654165268630,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"publishingStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654165260773,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"unpublishingStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"publishingApprovalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654165268630,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"unpublishingApprovalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"publishedStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"unpublishedStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": "",
|
|||
|
"type": ""
|
|||
|
},
|
|||
|
"requestStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 0,
|
|||
|
"modifiedBy": ""
|
|||
|
},
|
|||
|
"approvalStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654165268630,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"actionStatus": {
|
|||
|
"reason": "",
|
|||
|
"lastUpdated": 1654165260773,
|
|||
|
"modifiedBy": "15377373355"
|
|||
|
},
|
|||
|
"developerId": "628b2215062d300001e36285",
|
|||
|
"groupId": "628b2215062d300001e36286",
|
|||
|
"created": 1654165260773,
|
|||
|
"createdBy": "15377373355",
|
|||
|
"customData": {
|
|||
|
"detailDescription": "",
|
|||
|
"sourceFile": [
|
|||
|
{
|
|||
|
"fileMd5": "159eed6c06432b1a4f68ced6c19a1bfe",
|
|||
|
"name": "app.zip",
|
|||
|
"sourceFileUrl": "/api/v1/mop/netdisk/download/62986eaa1f1afd0001c3698c",
|
|||
|
"uploadDate": 1654156973289,
|
|||
|
"url": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698d",
|
|||
|
"encryptedUrl": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698e",
|
|||
|
"encryptedFileMd5": "fad7bd98dbcabb560ca30f4c99121a42",
|
|||
|
"encryptedFileSha256": "c9e9db06725f95a4418c83d54dda3499946b8e1c894583b6477a36cc1d796668",
|
|||
|
"basicPackVer": "",
|
|||
|
"Packages": [],
|
|||
|
"EncryptPackages": []
|
|||
|
}
|
|||
|
],
|
|||
|
"versionDescription": "1.0.0",
|
|||
|
"developer": "15377373355"
|
|||
|
},
|
|||
|
"version": "1.0.0",
|
|||
|
"sequence": 9,
|
|||
|
"corporationId": "",
|
|||
|
"coreDescription": "123",
|
|||
|
"logo": "https://www-cdn.finclip.com/images/ic-default.png",
|
|||
|
"isRollback": false,
|
|||
|
"testInfo": {
|
|||
|
"account": "",
|
|||
|
"password": "",
|
|||
|
"description": "",
|
|||
|
"images": []
|
|||
|
},
|
|||
|
"needAutoPub": false,
|
|||
|
"inGrayRelease": false,
|
|||
|
"expire": 0,
|
|||
|
"appBuildID": "62986ead277a0d00017b782f"
|
|||
|
},
|
|||
|
"trialVersion": {},
|
|||
|
"extInfo": {
|
|||
|
"trialQrcodeHasRead": true
|
|||
|
},
|
|||
|
"wechatInfo": {
|
|||
|
"wechatAppSecret": "",
|
|||
|
"wechatAppId": "",
|
|||
|
"wechatPath": "",
|
|||
|
"wechatSize": "",
|
|||
|
"qrcodeUrl": "",
|
|||
|
"qrcodeDownloadUrl": "",
|
|||
|
"updated": 1654157465456,
|
|||
|
"showHint": false
|
|||
|
},
|
|||
|
"wechatLoginInfo": {
|
|||
|
"wechatOriginId": "",
|
|||
|
"profileUrl": "",
|
|||
|
"phoneUrl": ""
|
|||
|
}
|
|||
|
},
|
|||
|
"errcode": "OK",
|
|||
|
"error": ""
|
|||
|
}
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
//GetLatestAppInfo 获取最新线上版、最新审核版本、最新体验版
|
|||
|
func GetLatestAppInfo(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
appID := c.Query("appId")
|
|||
|
if appID == "" {
|
|||
|
log.Errorf("GetLatestAppInfo appid empty!")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_LACK_OF_APPID, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
svr := service.NewAppService()
|
|||
|
buildInfoSvr := service.NewAppAppletInfoService()
|
|||
|
|
|||
|
developerID := c.Request.Header.Get("X-Consumer-Custom-ID")
|
|||
|
groupInfo, _ := hCaller.GetGroupInfoByUserId(traceCtx, developerID)
|
|||
|
|
|||
|
app, err := svr.GetAppInfo(traceCtx, appID)
|
|||
|
if repository.NotFound(err) {
|
|||
|
utility.MakeLocRsp(c, http.StatusNotFound, utility.FS_APP_ID_NOT_FOUND, gin.H{})
|
|||
|
return
|
|||
|
} else if groupInfo.GroupID != app.GroupID {
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_APPID_ORGANID_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
var developer string
|
|||
|
if app.CustomData.Developer != "" {
|
|||
|
developer = app.CustomData.Developer
|
|||
|
} else {
|
|||
|
developer = app.CreatedBy
|
|||
|
app.CustomData.Developer = developer
|
|||
|
}
|
|||
|
|
|||
|
rspData := GetLatestAppInfoRsp{
|
|||
|
OnlineAppInfo: gin.H{},
|
|||
|
ReviewVersion: gin.H{},
|
|||
|
TrialVersion: gin.H{},
|
|||
|
ExtInfo: gin.H{},
|
|||
|
}
|
|||
|
latestPubVer, err := svr.GetLatestPubAppVer(traceCtx, appID)
|
|||
|
if err != nil {
|
|||
|
if !repository.NotFound(err) {
|
|||
|
log.Errorf("GetLatestAppInfo GetLatestPubAppVer err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
} else {
|
|||
|
rspData.OnlineAppInfo = latestPubVer
|
|||
|
}
|
|||
|
|
|||
|
reviewVersion, err := svr.GetLatestReviewAppVer(traceCtx, appID)
|
|||
|
if err != nil {
|
|||
|
if !repository.NotFound(err) {
|
|||
|
log.Errorf("GetLatestAppInfo GetLatestReviewAppVer err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
} else {
|
|||
|
//且没有上、下架的版本
|
|||
|
if reviewVersion.Status.Value != entity.StPublished && reviewVersion.Status.Value != entity.StUnpublished {
|
|||
|
rspData.ReviewVersion = reviewVersion
|
|||
|
}
|
|||
|
}
|
|||
|
trialInfo, err := buildInfoSvr.DevGetTrialInfo(traceCtx, appID)
|
|||
|
if err != nil {
|
|||
|
log.Debugln("GetTrailInfoByAppId err:%s", err.Error())
|
|||
|
if repository.NotFound(err) {
|
|||
|
log.Debugln("GetLatestAppInfo DevGetTrialInfo err:%s", err.Error())
|
|||
|
//utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
rspData.TrialVersion = gin.H{}
|
|||
|
} else {
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
} else {
|
|||
|
if trialInfo.CustomData.Developer == "" {
|
|||
|
trialInfo.CustomData.Developer = developer
|
|||
|
}
|
|||
|
rspData.TrialVersion = trialInfo
|
|||
|
trialAppQrRedDotHasRead, err := hCaller.IsTrialHasRead(traceCtx, trialInfo.Id, developerID)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetLatestAppInfo IsTrialHasRead err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
log.Debugln("trialQrcodeHasRead :%s", trialAppQrRedDotHasRead)
|
|||
|
rspData.ExtInfo["trialQrcodeHasRead"] = trialAppQrRedDotHasRead
|
|||
|
}
|
|||
|
if trialInfo != nil {
|
|||
|
rspData.TrialVersion = trialInfo
|
|||
|
}
|
|||
|
//extInfo := make(map[string]interface{})
|
|||
|
rspData.ExtInfo["trialQrcodeHasRead"] = true
|
|||
|
if trialInfo != nil {
|
|||
|
hasRead, _ := hCaller.IsTrialHasRead(traceCtx, trialInfo.Id, utility.GetUserId(c))
|
|||
|
log.Debugln("trialQrcodeHasRead :%s", hasRead)
|
|||
|
rspData.ExtInfo["trialQrcodeHasRead"] = hasRead
|
|||
|
}
|
|||
|
//rspData.ExtInfo = extInfo
|
|||
|
wechatInfoRsp := WechatInfoRsp{}
|
|||
|
wechatInfo, err := hCaller.GetWeChatInfo(traceCtx, appID)
|
|||
|
if err == nil {
|
|||
|
wechatInfoRsp.Updated = wechatInfo.Updated
|
|||
|
wechatInfoRsp.QrcodeDownloadUrl = wechatInfo.QrcodeDownloadUrl
|
|||
|
wechatInfoRsp.QrcodeUrl = wechatInfo.QrcodeUrl
|
|||
|
wechatInfoRsp.WechatPath = wechatInfo.WechatPath
|
|||
|
wechatInfoRsp.WechatAppId = wechatInfo.WechatAppId
|
|||
|
wechatInfoRsp.WechatAppSecret = wechatInfo.WechatAppSecret
|
|||
|
wechatInfoRsp.WechatSize = wechatInfo.WechatSize
|
|||
|
if wechatInfo.Updated == 0 {
|
|||
|
wechatInfoRsp.Updated = app.PublishedStatus.LastUpdated
|
|||
|
}
|
|||
|
isShowHint, _ := hCaller.IsShowHint(traceCtx, appID, developerID)
|
|||
|
wechatInfoRsp.ShowHint = isShowHint
|
|||
|
rspData.WechatInfo = wechatInfoRsp
|
|||
|
} else {
|
|||
|
log.Errorf("GetWeChatInfo err:%s", err.Error())
|
|||
|
}
|
|||
|
wechatLoginInfo, err := hCaller.GetWeChatLoginInfo(traceCtx, appID)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetWeChatInfo err:%s", err.Error())
|
|||
|
} else {
|
|||
|
rspData.WechatLoginInfo = wechatLoginInfo
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, rspData)
|
|||
|
}
|
|||
|
|
|||
|
func GetAppAdminAccount(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
appID := c.Param("appId")
|
|||
|
svr := service.NewAppService()
|
|||
|
app, err := svr.GetAppInfo(traceCtx, appID)
|
|||
|
if err != nil {
|
|||
|
if repository.NotFound(err) {
|
|||
|
utility.MakeLocRsp(c, http.StatusNotFound, utility.FS_APP_ID_NOT_FOUND, gin.H{})
|
|||
|
} else {
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
groupInfo, err := hCaller.GetGroupInfoByGroupId(traceCtx, app.GroupID)
|
|||
|
if err != nil {
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SYSTEM_CALL, gin.H{})
|
|||
|
} else {
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, gin.H{"adminAccountId": groupInfo.AdminAccountId, "groupId": groupInfo.GroupID})
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
type UpdateTrailAppReq struct {
|
|||
|
Id string `json:"id"`
|
|||
|
AppId string `json:"appId"`
|
|||
|
Type string `json:"type"`
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {POST} /api/v1/mop/finstore/dev/trial/operate [C/S]添加体验版小程序
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestBody) {string} id //编译id
|
|||
|
* @apiParam (RequestBody) {string} appId //小程序id
|
|||
|
* @apiParam (RequestBody) {string} type //add:添加,cancel:取消
|
|||
|
* @apiParamExample {json} Request-Example:
|
|||
|
* {
|
|||
|
* "id":"61b32654659d2b00016264a9",
|
|||
|
* "appId":"61b32654659d2b00016264a8",
|
|||
|
* "type": "add"
|
|||
|
* }
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
* {
|
|||
|
* "data": {},
|
|||
|
* "errcode": "OK",
|
|||
|
* "error": ""
|
|||
|
* }
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
func UpdateTrialApp(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := UpdateTrailAppReq{}
|
|||
|
if err := c.BindJSON(&req); err != nil {
|
|||
|
log.Errorf("UpdateTrialApp bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
log.Infof("UpdateTrialApp req:%+v", req)
|
|||
|
userId := utility.GetUserId(c)
|
|||
|
if req.Id == "" || req.Type == "" || userId == "" {
|
|||
|
log.Errorf("UpdateTrialApp req:[%+v] or user id:[%s] err", req, userId)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
err := svr.UpdateTrialApp(traceCtx, userId, req.Id, req.Type, req.AppId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("UpdateTrialApp get info err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, gin.H{})
|
|||
|
return
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {POST} /api/v1/mop/finstore/dev/trial/path-query [C/S]更新体验版小程序path
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestBody) {string} traceId //编译id
|
|||
|
* @apiParam (RequestBody) {string} pathAndQuery //path
|
|||
|
* @apiParamExample {json} Request-Example:
|
|||
|
* {
|
|||
|
* "traceId":"61b32654659d2b00016264a9",
|
|||
|
* "pathAndQuery":"abc"
|
|||
|
* }
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
* {
|
|||
|
* "data": {},
|
|||
|
* "errcode": "OK",
|
|||
|
* "error": ""
|
|||
|
* }
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
func UpdateTrialAppPathAndQueryHand(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := apiproto.UpdateTrialAppPathReq{}
|
|||
|
if err := c.BindJSON(&req); err != nil {
|
|||
|
log.Errorf("UpdateTrialAppPathHand bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
log.Infof("UpdateTrialAppPathHand req:%+v", req)
|
|||
|
if req.TraceId == "" {
|
|||
|
log.Errorf("UpdateTrialAppPathHand trace id empty,req:%+v", req)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
userId := utility.GetUserId(c)
|
|||
|
if userId == "" {
|
|||
|
log.Errorf("UpdateTrialAppPathHand user id empty,req:%+v", req)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
err := svr.UpdateTrialAppPathAndQueryHand(traceCtx, userId, req.TraceId, req.PathAndQuery)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetTrialInfoById err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {GET} /api/v1/mop/finstore/dev/trial/info?appId=61b32654659d2b00016264a8 [C/S]获取小程序体验版信息
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestBody) {string} traceId //编译id
|
|||
|
* @apiParam (RequestBody) {string} pathAndQuery //path
|
|||
|
* @apiParamExample {json} Request-Example:
|
|||
|
* {
|
|||
|
* "traceId":"61b32654659d2b00016264a9",
|
|||
|
* "pathAndQuery":"abc"
|
|||
|
* }
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"qrcodeHasRead":true, //二维码是否已读
|
|||
|
"info":{
|
|||
|
"id":"id",
|
|||
|
"buildInfoId":"编译id",
|
|||
|
"source":"build", //build:正常版本, trail:被设置为体验版
|
|||
|
"appId":"61b32654659d2b00016264a8",
|
|||
|
"groupId":"企业id",
|
|||
|
"created":1660291974, //创建时间
|
|||
|
"userId":"用户id",
|
|||
|
"createdBy":"创建人",
|
|||
|
"customData": {
|
|||
|
"detailDescription": "",
|
|||
|
"sourceFile": [
|
|||
|
{
|
|||
|
"fileMd5": "159eed6c06432b1a4f68ced6c19a1bfe",
|
|||
|
"name": "app.zip",
|
|||
|
"sourceFileUrl": "/api/v1/mop/netdisk/download/62986eaa1f1afd0001c3698c",
|
|||
|
"uploadDate": 1654156973289,
|
|||
|
"url": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698d",
|
|||
|
"encryptedUrl": "/api/v1/mop/netdisk/download/62986ead1f1afd0001c3698e",
|
|||
|
"encryptedFileMd5": "fad7bd98dbcabb560ca30f4c99121a42",
|
|||
|
"encryptedFileSha256": "c9e9db06725f95a4418c83d54dda3499946b8e1c894583b6477a36cc1d796668",
|
|||
|
"basicPackVer": "",
|
|||
|
"Packages": [],
|
|||
|
"EncryptPackages": []
|
|||
|
}
|
|||
|
],
|
|||
|
"versionDescription": "1.0.0",
|
|||
|
"developer": "15377373355"
|
|||
|
},
|
|||
|
"version":"1.0.0",
|
|||
|
"startParams": {
|
|||
|
"pathAndQuery": ""
|
|||
|
},
|
|||
|
"status":true
|
|||
|
}
|
|||
|
}
|
|||
|
"errcode": "OK",
|
|||
|
"error": ""
|
|||
|
}
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
func GetTrialAppInfo(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
appId := c.Query("appId")
|
|||
|
|
|||
|
log.Infof("GetTrialAppInfo app id:%+v", appId)
|
|||
|
userId := utility.GetUserId(c)
|
|||
|
if appId == "" || userId == "" {
|
|||
|
log.Errorf("GetTrialAppInfo appId:[%s] or userId:[%s] empty, err", appId, userId)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
rspData, err := svr.GetTrialAppInfo(traceCtx, userId, appId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetTrialInfoById err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, rspData)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// GetBuildAppInfo 获取由编译列表衍生的小程序详情
|
|||
|
//目前包括临时小程序、体验版小程序
|
|||
|
func GetBuildAppInfo(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := apiproto.GetBuildAppInfoReq{}
|
|||
|
if err := c.BindJSON(&req); err != nil {
|
|||
|
log.Errorf("GetBuildAppInfo bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
sdkKey := utility.GetSdkKey(c)
|
|||
|
log.Infof("GetBuildAppInfo req:%+v,sdk key:%s", req, sdkKey)
|
|||
|
svr := service.NewAppService()
|
|||
|
appInfo, rsp := svr.GetBuildInfo(traceCtx, req, sdkKey)
|
|||
|
if appInfo == nil {
|
|||
|
rsp.MakeRsp(c, gin.H{})
|
|||
|
} else {
|
|||
|
rsp.MakeRsp(c, appInfo)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
func GetBuildInfoById(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
t := c.Query("type")
|
|||
|
codeId := c.Query("codeId")
|
|||
|
if codeId == "" {
|
|||
|
log.Errorf("GetBuildInfoById type or code id is empty,t:[%s],code id:[%s]", t, codeId)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
appInfo, err := svr.GetInfoById(traceCtx, codeId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetInfoById err:%s", err.Error())
|
|||
|
if service.NotFound(err) {
|
|||
|
utility.MakeLocRsp(c, http.StatusNotFound, utility.FS_NOT_FOUND, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, appInfo)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func GetInfoByBuildInfoId(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
buildInfoId := c.Query("buildInfoId")
|
|||
|
if buildInfoId == "" {
|
|||
|
log.Errorf("GetBuildInfoById type or code id is empty:[%s]", buildInfoId)
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
appInfo, err := svr.GetInfoByBuildInfoId(traceCtx, buildInfoId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetInfoById err:%s", err.Error())
|
|||
|
if service.NotFound(err) {
|
|||
|
utility.MakeLocRsp(c, http.StatusNotFound, utility.FS_NOT_FOUND, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_DB_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, appInfo)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func GetManageAppList(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
sdkKey := c.GetHeader(entity.SDKKEY_HEADER_KEY)
|
|||
|
userId := c.Query("userId")
|
|||
|
apiServer := c.Query("apiServer")
|
|||
|
|
|||
|
log.Infof("GetManageAppList req sdkKey:[%s],userId:[%s]", sdkKey, userId)
|
|||
|
if sdkKey == "" || userId == "" || apiServer == "" {
|
|||
|
log.Errorf("GetManageAppList type or appid is nil !")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
rspData, rsp := svr.GetManageAppList(traceCtx, userId, sdkKey, apiServer)
|
|||
|
if rspData == nil {
|
|||
|
rsp.MakeRsp(c, gin.H{})
|
|||
|
} else {
|
|||
|
rsp.MakeRsp(c, rspData)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func GetManageAppVerList(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
listType := c.Query("listType")
|
|||
|
appId := c.Query("appId")
|
|||
|
apiServer := c.Query("apiServer")
|
|||
|
log.Infof("GetManageAppVerList req appId:[%s],listType:[%s],apiServer:[%s]", appId, listType, apiServer)
|
|||
|
if listType == "" || appId == "" {
|
|||
|
log.Errorf("GetManageAppVerList type or appid is nil !")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
rspData, rsp := svr.GetManageAppVerList(traceCtx, listType, appId, apiServer)
|
|||
|
if rspData == nil {
|
|||
|
rsp.MakeRsp(c, gin.H{})
|
|||
|
} else {
|
|||
|
rsp.MakeRsp(c, rspData)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func FixDevListStatus(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
svr := service.NewAppAppletInfoService()
|
|||
|
rsp := svr.FixDevListStatus(traceCtx)
|
|||
|
|
|||
|
rsp.MakeRsp(c, gin.H{})
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
type GenOfflinePackageInfoHandReq struct {
|
|||
|
AppId string `json:"appId"`
|
|||
|
Sequence int `json:"seq"`
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @api {POST} /api/v1/mop/finstore/dev/package/offline [C/S]生成离线包下载信息
|
|||
|
* @apiGroup Finclip App Manager
|
|||
|
* @apiParam (RequestBody) {string} appId //小程序id
|
|||
|
* @apiParam (RequestBody) {int} seq //小程序序列号
|
|||
|
* @apiParamExample {json} Request-Example:
|
|||
|
* {
|
|||
|
* "appId":"61b32654659d2b00016264a8",
|
|||
|
* "seq": 1,
|
|||
|
* }
|
|||
|
* @apiSuccessExample {json} Success Status:
|
|||
|
* HTTP/1.1 200 OK
|
|||
|
* {
|
|||
|
* "data": {
|
|||
|
* "netdiskId":"61b32654659d2b00016264a9" //网盘id
|
|||
|
* },
|
|||
|
* "errcode": "OK",
|
|||
|
* "error": ""
|
|||
|
* }
|
|||
|
* @apiErrorExample Error Status:
|
|||
|
* HTTP/1.1 !=200 服务端异常
|
|||
|
*/
|
|||
|
//GenOfflinePackageInfoHand 离线包下载信息获取
|
|||
|
func GenOfflinePackageInfoHand(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
userId := utility.GetUserId(c)
|
|||
|
if userId == "" {
|
|||
|
log.Errorf("user id empty")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
req := GenOfflinePackageInfoHandReq{}
|
|||
|
if err := c.BindJSON(&req); err != nil {
|
|||
|
log.Errorf("GenOfflinePackageInfoHand bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_PARAM_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
log.Infof("GenOfflinePackageInfoHand req:%v", req)
|
|||
|
svr := service.NewAppService()
|
|||
|
fileId, err := svr.GenOfflinePackageInfo(traceCtx, req.AppId, req.Sequence, userId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("app ver service gen offline package err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SERVER_ERR, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
//todo test
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, gin.H{"netdiskId": fileId})
|
|||
|
}
|
|||
|
|
|||
|
type GetBindingIdBySdkKeyHandReq struct {
|
|||
|
SdkKey string `form:"sdkKey"`
|
|||
|
AppId string `form:"appId"`
|
|||
|
OrganId string `form:"organId"`
|
|||
|
}
|
|||
|
|
|||
|
func GetBindingIdBySdkKeyHand(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := GetBindingIdBySdkKeyHandReq{}
|
|||
|
if err := c.Bind(&req); err != nil {
|
|||
|
log.Errorf("GetBindingIdBySdkKeyHand bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_BAD_JSON, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
if req.SdkKey == "" {
|
|||
|
log.Errorf("GetBindingIdBySdkKeyHand sdk key empty")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_SDKKEY_NOT, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
log.Debugf("GetBindingIdBySdkKeyHand sdkkey=%s, appId=%s", req.SdkKey, req.AppId)
|
|||
|
|
|||
|
svr := service.NewBindingService()
|
|||
|
info, err := svr.GetBindInfoByParam(traceCtx, req.SdkKey, req.OrganId, req.AppId)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetBindingIdBySdkKeyHand bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SERVICE_UNAVAILABLE, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
rspData := gin.H{
|
|||
|
"bindingId": info.BindingID,
|
|||
|
"owner": info.Owner,
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, rspData)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func GetBindingInfoBySdkKeyHand(c *gin.Context) {
|
|||
|
traceCtx := apm.ApmClient().TraceContextFromGin(c)
|
|||
|
req := GetBindingIdBySdkKeyHandReq{}
|
|||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
log.Errorf("GetBindingInfoBySdkKeyHand ShouldBindJSON err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_BAD_JSON, make(map[string]interface{}))
|
|||
|
return
|
|||
|
}
|
|||
|
if req.SdkKey == "" {
|
|||
|
log.Errorf("GetBindingIdBySdkKeyHand sdk key empty")
|
|||
|
utility.MakeLocRsp(c, http.StatusBadRequest, utility.FS_SDKKEY_NOT, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
log.Debugf("GetBindingIdBySdkKeyHand sdkkey=%s, appId=%s", req.SdkKey)
|
|||
|
|
|||
|
svr := service.NewBindingService()
|
|||
|
info, err := svr.GetBindingBySdkKey(traceCtx, req.SdkKey)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("GetBindingIdBySdkKeyHand bind err:%s", err.Error())
|
|||
|
utility.MakeLocRsp(c, http.StatusInternalServerError, utility.FS_SERVICE_UNAVAILABLE, gin.H{})
|
|||
|
return
|
|||
|
}
|
|||
|
utility.MakeLocRsp(c, http.StatusOK, utility.OK, info)
|
|||
|
return
|
|||
|
}
|