finclip-app-manager/infrastructure/db/repo/mongo/binding.go

998 lines
37 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package mongo
import (
"context"
"finclip-app-manager/domain/entity"
"finclip-app-manager/domain/entity/proto/apiproto"
"finclip-app-manager/domain/repository"
"strings"
"time"
mgo "gitlab.finogeeks.club/finclip-backend-v2/finclip-mgo"
"gitlab.finogeeks.club/finclip-backend-v2/finclip-mgo/bson"
)
var _ repository.IBindingRepo = new(BindingByMongoRepo)
type BindingByMongoRepo struct {
}
func NewBindingByMongoRepo() *BindingByMongoRepo {
return &BindingByMongoRepo{}
}
// 这张表暂时废弃
//type BundleInfoMongo struct {
// BindingId string `json:"bindingId" bson:"binding_id"`
// BundleID string `json:"bundleId" bson:"bundle_id"`
// GroupID string `json:"groupId" bson:"group_id"` //企业ID
// Remark string `json:"remark" bson:"remark"`
// SDKKey string `json:"SDKKey" bson:"sdk_key"`
// SDKID string `json:"SDKID" bson:"sdk_id"`
// IsFirstCreate string `json:"isFirstCreate" bson:"is_first_create"` //是否第一次创建
// CreatedAt int64 `json:"createdAt" bson:"created_at"`
// CreatedAccount string `json:"createdAccount" bson:"created_account"`
// CreatedBy string `json:"createdBy" bson:"created_by"`
//}
// BundleInfoData 驼峰换下划线给BindingMongo使用
type BundleInfoData struct {
BundleID string `json:"bundle_id" bson:"bundle_id"`
Remark string `json:"remark" bson:"remark"`
SDKKey string `json:"sdk_key" bson:"sdk_key"`
SDKID string `json:"sdk_id" bson:"sdk_id"`
IsFirstCreate bool `json:"is_first_create" bson:"is_first_create"` //是否第一次创建
CreatedAt int64 `json:"created_at" bson:"created_at"`
CreatedAccount string `json:"created_account" bson:"created_account"`
CreatedBy string `json:"created_by" bson:"created_by"`
IsForbidden int `json:"is_forbidden" bson:"is_forbidden"`
IsReview int `json:"is_review" bson:"is_review"`
}
type AppInfo struct {
AppID string `json:"appId" bson:"appId"`
AssociatedAt int64 `json:"associatedAt" bson:"associatedAt"`
AssociatedBy string `json:"associatedBy" bson:"associatedBy"`
}
type BindingMongo struct {
BindingID string `json:"bindingId" bson:"binding_id"` //应用的id
Name string `json:"name" bson:"name"` //应用名称
BundleInfos []BundleInfoData `json:"bundleInfos" bson:"bundle_infos"` //bundle ids
CreatedInfoBy string `json:"createdInfoBy" bson:"created_info_by"`
CreatedInfoAt int64 `json:"createdInfoAt" bson:"created_info_at"`
CreatedInfoAccount string `json:"createdInfoAccount" bson:"created_info_account"`
GroupID string `json:"groupId" bson:"group_id"` //企业ID
GroupName string `json:"groupName" bson:"group_name"` //企业名称(为了查询)
CooperateStatusValue string `json:"cooperateStatusValue" bson:"cooperate_status_value"`
CooperateStatusReason string `json:"cooperateStatusReason" bson:"cooperate_status_reason"`
CooperateStatusLastUpdated int64 `json:"cooperateStatusLastUpdated" bson:"cooperate_status_last_updated"`
CooperateStatusModifiedBy string `json:"cooperateStatusModifiedBy" bson:"cooperate_status_modified_by"`
CooperateValidStatusReason string `json:"cooperateValidStatusReason" bson:"cooperate_valid_status_reson"`
CooperateValidStatusLastUpdated int64 `json:"cooperateValidStatusLastUpdated" bson:"cooperate_valid_status_last_updated"`
CooperateValidStatusModifiedBy string `json:"cooperateValidStatusModifiedBy" bson:"cooperate_valid_status_modified_by"`
CooperateInvalidStatusReason string `json:"cooperateInvalidStatusReason" bson:"cooperate_invalid_status_reson"`
CooperateInvalidStatusLastUpdated int64 `json:"cooperateInvalidStatusLastUpdated" bson:"cooperate_invalid_status_last_updated"`
CooperateInvalidStatusModifiedBy string `json:"cooperateInvalidStatusModifiedBy" bson:"cooperate_invalid_status_modified_by"`
AppInfos []AppInfo `json:"appInfos" bson:"app_infos"` //appid 的信息
Owner string `json:"owner" bson:"owner"` //所属企业
Expire int64 `json:"expire" bson:"expire"`
ApiServer string `json:"apiServer" bson:"api_server"` //子域名
PlatForm int `json:"platform" bson:"platform"` //来源平台
AutoBind int `json:"autoBind" bson:"auto_bind"` //自动关联小程序
HiddenBundle int `json:"hiddenBundle" bson:"hidden_bundle"` //隐藏bundle信息
FromBindingID string `json:"fromBindingId" bson:"from_binding_id"` //来源ID
}
func (b BindingByMongoRepo) GetInfo(ctx context.Context, bindingId string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"binding_id": bindingId}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetByGroupIdAndName(ctx context.Context, groupId string, name string, isAdmin bool) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
filter := bson.M{}
if isAdmin {
filter["group_id"] = groupId
filter["name"] = name
filter["platform"] = entity.BINGING_PLATFORM_OPER
} else {
filter["group_id"] = groupId
filter["name"] = name
filter["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}
}
err := bindingTable.GetOne(ctx, filter, &bindingMongo)
if err != nil {
return nil, err
}
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bindingTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, &bundleInfoMongos)
//if err != nil {
// return nil, err
//}
//
//result := convertBindingMongoToBinding(bindingMongo, bundleInfoMongos)
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetByApiServer(ctx context.Context, apiServer string) (entity.Binding, error) {
bindingMongo := BindingMongo{}
res := entity.Binding{}
err := bindingTable.GetOne(ctx, bson.M{"api_server": apiServer}, &bindingMongo)
if err != nil {
return res, err
}
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bindingTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, &bundleInfoMongos)
//if err != nil {
// return nil, err
//}
//
//result := convertBindingMongoToBinding(bindingMongo, bundleInfoMongos)
result := convertBindingMongoToBinding(bindingMongo)
return result, err
}
func (b BindingByMongoRepo) GetInfoByParams(ctx context.Context, sdkKey, organId, appId string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
filters := []bson.M{}
filters = append(filters, bson.M{"bundle_infos": bson.M{"$elemMatch": bson.M{"sdk_key": sdkKey}}}) //bson.M{"bundleInfos.SDKKey": bson.M{"$in": []string{sdkKey}}}
if appId != "" {
filters = append(filters, bson.M{"app_infos": bson.M{"$elemMatch": bson.M{"appId": appId}}})
}
if organId != "" {
filters = append(filters, bson.M{"group_id": organId})
}
filter := bson.M{"$and": filters}
err := bindingTable.GetOne(ctx, filter, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetInfoBySdkKeyOrganId(ctx context.Context, organId, sdkKey string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"group_id": organId, "bundle_infos.sdk_key": sdkKey}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetAllSdkKey(ctx context.Context, organId string) ([]string, error) {
bindingMongos := make([]BindingMongo, 0)
_, err := bindingTable.GetAll(ctx, bson.M{"group_id": organId}, []string{}, &bindingMongos)
if err != nil {
return nil, err
}
result := make([]string, 0)
for _, v := range bindingMongos {
//result := make([]string, 0)
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bundleInfoTable.GetAll(ctx, bson.M{"binding_id": v.BindingID}, []string{}, bundleInfoMongos)
//if err != nil {
// return nil, err
//}
for _, bundleInfo := range v.BundleInfos {
result = append(result, bundleInfo.SDKKey)
}
}
return result, err
}
func (b BindingByMongoRepo) GetBindListBySdkKey(ctx context.Context, sdkKey string) ([]entity.Binding, error) {
bindingMongos := make([]BindingMongo, 0)
_, err := bindingTable.GetAll(ctx, bson.M{"bundle_infos.sdk_key": sdkKey}, []string{"created_info_at"}, &bindingMongos)
if err != nil {
return nil, err
}
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bundleInfoTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, bundleInfoMongos)
//if err != nil {
// return nil, err
//}
//bindings = append(bindings, convertBindingMongoToBinding(bindingMongo, bundleInfoMongos))
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, err
}
func (b BindingByMongoRepo) SdkKeyExi(ctx context.Context, sdkKey string) (bool, error) {
if _, ok := entity.SdkExiCache.Get(sdkKey); ok {
return true, nil
}
count, err := bindingTable.Count(ctx, bson.M{"bundle_infos.sdk_key": sdkKey})
if err != nil {
return false, err
}
if count > 0 {
entity.SdkExiCache.Set(sdkKey, true, -1)
return true, err
}
return false, err
}
func (b BindingByMongoRepo) Insert(ctx context.Context, bind *entity.Binding) error {
err := bindingTable.Insert(ctx, convertBindingToBindingMongo(bind))
if err != nil {
return err
}
//for _, v := range bind.BundleInfos {
// err = bundleInfoTable.Insert(ctx, convertBundleInfoToBundleInfoMongo(bind.BindingID, bind.GroupID, v))
//}
return err
}
func (b BindingByMongoRepo) Count(ctx context.Context) (int, error) {
return bindingTable.Count(ctx, bson.M{})
}
func (b BindingByMongoRepo) GetCountByStatus(ctx context.Context, status string, platform int) (int, error) {
filter := bson.M{}
filter["cooperate_status_value"] = "Valid"
/*switch platform {
case entity.BINGING_PLATFORM_OPER:
filter["platform"] = entity.BINGING_PLATFORM_OPER
filter["fromBindingId"] = ""
case entity.BINGING_PLATFORM_ORGAN:
filter["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}
default:
filter["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_OPER, "fromBindingId": ""}, {"$or": []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}}}
}*/
filter["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_OPER, "group_id": ""}, {"$or": []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}}}
return bindingTable.Count(ctx, filter)
}
func (b BindingByMongoRepo) GetBundleIdNum(ctx context.Context) (int, error) {
//校验bundingId的数量
pipSelect := []bson.M{
{"$match": bson.M{"bundle_infos": bson.M{"$elemMatch": bson.M{"is_forbidden": 0}}}},
{"$unwind": "$bundleInfos"},
{"$group": bson.M{"_id": nil, "total": bson.M{"$sum": 1}}},
}
bundleIdTotal, err := bindingTable.AggregateCount(ctx, pipSelect)
if err != nil && !b.NotFound(err) {
log.Errorf("GetBundleIdNum err:", err.Error())
return 0, err
}
if b.NotFound(err) {
bundleIdTotal = 0
return 0, nil
}
return bundleIdTotal, nil
}
func (b BindingByMongoRepo) GetBundleIdLimitHand(ctx context.Context, groupId string) (int, error) {
//校验bundingId的数量
pipSelect := []bson.M{
//{"$match": bson.M{"group_id": groupId}},
{"$match": bson.M{"group_id": groupId, "bundle_infos": bson.M{"$elemMatch": bson.M{"is_forbidden": 0}}}},
{"$unwind": "$bundle_infos"},
{"$group": bson.M{"_id": nil, "total": bson.M{"$sum": 1}}},
}
bundleIdTotal, err := bindingTable.AggregateCount(ctx, pipSelect)
if err != nil && !b.NotFound(err) {
return 0, err
}
if b.NotFound(err) {
bundleIdTotal = 0
return 0, nil
}
return bundleIdTotal, nil
}
func (b BindingByMongoRepo) GetBundleLimit(ctx context.Context) (int, error) {
//return bundleTable.Count(ctx, bson.M{})
return bundleTable.Count(ctx, bson.M{"is_forbidden": 0})
}
func (b BindingByMongoRepo) GetBindingByBindingId(ctx context.Context, bindingId string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"binding_id": bindingId}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetBindingByGroupIdAndBindingId(ctx context.Context, groupId string, bindingId string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"group_id": groupId, "binding_id": bindingId}, &bindingMongo)
if err != nil {
return nil, err
}
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bindingTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, &bundleInfoMongos)
//if err != nil {
// return nil, err
//}
//
//result := convertBindingMongoToBinding(bindingMongo, bundleInfoMongos)
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetBindingByGroupIdAndSdkKey(ctx context.Context, groupId string, sdkKey string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"group_id": groupId, "bundle_infos.sdk_key": sdkKey}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) UpdateBundleInfosByGroupIdAndBindId(ctx context.Context, groupId string, bindingId string, infos []entity.BundleInfo) error {
bundleInfoDatas := make([]BundleInfoData, 0)
for _, v := range infos {
bundleInfoData := BundleInfoData{
BundleID: v.BundleID,
Remark: v.Remark,
SDKKey: v.SDKKey,
SDKID: v.SDKID,
IsFirstCreate: v.IsFirstCreate,
CreatedAt: v.CreatedAt,
CreatedAccount: v.CreatedAccount,
CreatedBy: v.CreatedBy,
IsForbidden: v.IsForbidden,
}
bundleInfoDatas = append(bundleInfoDatas, bundleInfoData)
}
return bindingTable.UpdateOne(ctx, bson.M{"group_id": groupId, "binding_id": bindingId}, bson.M{"$set": bson.M{"bundle_infos": bundleInfoDatas}})
}
func (b BindingByMongoRepo) AppendBundles(ctx context.Context, bindingId, groupId string, bundles []entity.BundleInfo) error {
bindingInfo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"binding_id": bindingId}, &bindingInfo)
if err != nil {
return err
}
bundleInfoDatas := make([]BundleInfoData, 0)
bundleInfoDatas = append(bundleInfoDatas, bindingInfo.BundleInfos...)
for _, v := range bundles {
bundleInfoData := BundleInfoData{
BundleID: v.BundleID,
Remark: v.Remark,
SDKKey: v.SDKKey,
SDKID: v.SDKID,
IsFirstCreate: v.IsFirstCreate,
CreatedAt: v.CreatedAt,
CreatedAccount: v.CreatedAccount,
CreatedBy: v.CreatedBy,
IsForbidden: v.IsForbidden,
}
bundleInfoDatas = append(bundleInfoDatas, bundleInfoData)
}
return bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": bson.M{"bundle_infos": bundleInfoDatas}})
}
func (b BindingByMongoRepo) UpdateBundleIsView(ctx context.Context, reviews []apiproto.BundleReviewItem, isReview int) error {
return nil
}
func (b BindingByMongoRepo) ListReviewBundle(ctx context.Context, pageSize int, pageNo int, searchText string, isReview int) (int64, []entity.ReviewBundleInfo, error) {
return 0, nil, nil
}
func (b BindingByMongoRepo) CheckReviewBySdkKey(ctx context.Context, sdkKey string) bool {
return false
}
func (b BindingByMongoRepo) GetReviewBindBySdkKey(ctx context.Context, sdkKey string) (*entity.ReviewBundleInfo, error) {
return nil, nil
}
func (b BindingByMongoRepo) UpdateBundles(ctx context.Context, bindingId, groupId string, bundles []entity.BundleInfo) error {
bundleInfoDatas := make([]BundleInfoData, 0)
for _, v := range bundles {
bundleInfoData := BundleInfoData{
BundleID: v.BundleID,
Remark: v.Remark,
SDKKey: v.SDKKey,
SDKID: v.SDKID,
IsFirstCreate: v.IsFirstCreate,
CreatedAt: v.CreatedAt,
CreatedAccount: v.CreatedAccount,
CreatedBy: v.CreatedBy,
IsForbidden: v.IsForbidden,
IsReview: v.IsReview,
}
bundleInfoDatas = append(bundleInfoDatas, bundleInfoData)
}
return bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": bson.M{"bundle_infos": bundleInfoDatas}})
}
func (b BindingByMongoRepo) GetByBindIdList(ctx context.Context, ids []string) ([]entity.Binding, error) {
bindingMongos := make([]BindingMongo, 0)
_, err := bindingTable.GetAll(ctx, bson.M{"binding_id": bson.M{"$in": ids}}, []string{}, &bindingMongos)
if err != nil {
return nil, err
}
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bundleInfoTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, bundleInfoMongos)
//if err != nil {
// return nil, err
//}
//
//bindings = append(bindings, convertBindingMongoToBinding(bindingMongo, bundleInfoMongos))
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, err
}
func (b BindingByMongoRepo) GetBindListByGroupId(ctx context.Context, groupId string, pageSize int, pageNo int) ([]entity.Binding, int, error) {
bindingMongos := make([]BindingMongo, 0)
filter := bson.M{"group_id": groupId}
filter["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}
total, err := bindingTable.GetSome(ctx, filter, []string{"-created_info_at"}, pageSize, pageNo, &bindingMongos)
if err != nil {
return make([]entity.Binding, 0), 0, err
}
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
//bundleInfoMongos := make([]BundleInfoMongo, 0)
//_, err = bundleInfoTable.GetAll(ctx, bson.M{"binding_id": bindingMongo.BindingID}, []string{}, bundleInfoMongos)
//if err != nil {
// return make([]entity.Binding, 0), 0, err
//}
//
//bindings = append(bindings, convertBindingMongoToBinding(bindingMongo, bundleInfoMongos))
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, total, err
}
func (b BindingByMongoRepo) UpdateRelatedBindingCooperate(ctx context.Context, bindingId string, status entity.Status, specificStatus entity.SpecificStatus, cooperate bool) error {
if cooperate {
return bindingTable.UpdateAll(ctx, bson.M{"from_binding_id": bindingId, "platform": entity.BINGING_PLATFORM_OPER},
bson.M{"$set": bson.M{"cooperate_status_value": status.Value, "cooperate_status_last_updated": status.LastUpdated, "cooperate_status_modified_by": status.ModifiedBy,
"cooperate_valid_status_last_updated": specificStatus.LastUpdated, "cooperate_valid_status_modified_by": specificStatus.ModifiedBy}})
} else {
return bindingTable.UpdateAll(ctx, bson.M{"from_binding_id": bindingId, "platform": entity.BINGING_PLATFORM_OPER},
bson.M{"$set": bson.M{"cooperate_status_value": status.Value, "cooperate_status_last_updated": status.LastUpdated, "cooperate_status_modified_by": status.ModifiedBy,
"cooperate_invalid_status_last_updated": specificStatus.LastUpdated, "cooperate_invalid_status_modified_by": specificStatus.ModifiedBy}})
}
}
func (b BindingByMongoRepo) AppendApps(ctx context.Context, bindingId string, apps []entity.AppInfo) error {
bindingInfo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"binding_id": bindingId}, &bindingInfo)
if err != nil {
return err
}
appsInfo := make([]AppInfo, 0)
appsInfo = append(appsInfo, bindingInfo.AppInfos...)
for _, v := range apps {
app := AppInfo{
AppID: v.AppID,
AssociatedAt: v.AssociatedAt,
AssociatedBy: v.AssociatedBy,
}
appsInfo = append(appsInfo, app)
}
return bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": bson.M{"app_infos": appsInfo}})
}
func (b BindingByMongoRepo) RemoveApps(ctx context.Context, bindingId string, appIds []string) error {
rmAppsMap := make(map[string]bool)
for _, appId := range appIds {
rmAppsMap[appId] = true
}
bindingInfo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"binding_id": bindingId}, &bindingInfo)
if err != nil {
return err
}
appsInfo := make([]AppInfo, 0)
for _, app := range bindingInfo.AppInfos {
if _, ok := rmAppsMap[app.AppID]; !ok {
appsInfo = append(appsInfo, app)
}
}
return bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": bson.M{"app_infos": appsInfo}})
}
func (b BindingByMongoRepo) UpdateByBindId(ctx context.Context, bindingId string, bind *entity.Binding) error {
err := bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, convertBindingToBindingMongo(bind))
if err != nil {
return err
}
//for _, v := range bind.BundleInfos {
// err = bundleInfoTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, convertBundleInfoToBundleInfoMongo(bind.BindingID, bind.GroupID, v))
//}
return err
}
func (b BindingByMongoRepo) UpdateBindingInfo(ctx context.Context, bindingId string, info map[string]interface{}, platform int) error {
if platform == entity.BINGING_PLATFORM_OPER {
err := bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": info})
if err != nil {
return err
}
return bindingTable.UpdateAll(ctx, bson.M{"from_binding_id": bindingId}, bson.M{"$set": info})
} else {
return bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": info})
}
}
func (b BindingByMongoRepo) UpdateBindingGroupName(ctx context.Context, groupId, groupName string) error {
return nil
}
func (b BindingByMongoRepo) UpdateExpire(ctx context.Context, bindingId string, expire int64) error {
err := bindingTable.UpdateOne(ctx, bson.M{"binding_id": bindingId}, bson.M{"$set": bson.M{"expire": expire}})
if err != nil {
return err
}
return nil
}
func (b BindingByMongoRepo) BundleIdCount(ctx context.Context, groupId string) (int, error) {
var pipSelect []bson.M
if groupId == "" {
pipSelect = []bson.M{
{"$match": bson.M{"bundle_infos": bson.M{"$elemMatch": bson.M{"is_forbidden": 0}}}},
{"$unwind": "$bundleInfos"},
{"$group": bson.M{"_id": nil, "total": bson.M{"$sum": 1}}},
}
} else {
pipSelect = []bson.M{
{"$match": bson.M{"groupId": groupId, "bundle_infos": bson.M{"$elemMatch": bson.M{"is_forbidden": 0}}}},
{"$unwind": "$bundleInfos"},
{"$group": bson.M{"_id": nil, "total": bson.M{"$sum": 1}}},
}
}
bundleIdTotal, err := bindingTable.AggregateCount(ctx, pipSelect)
if err != nil && !b.NotFound(err) {
log.Errorf("updateLicenseValid get bundle id count err:%s", err.Error())
return 0, err
}
if b.NotFound(err) {
bundleIdTotal = 0
return 0, nil
}
return bundleIdTotal, nil
}
func (b BindingByMongoRepo) GetBundleByGroupIdAndBundleId(ctx context.Context, groupId string, bundleId string) (*entity.Binding, error) {
//bundleInfoMongo := BundleInfoMongo{}
//err := bundleInfoTable.GetOne(ctx, bson.M{"group_id": groupId, "bundle_id": bundleId}, &bundleInfoMongo)
//if err != nil {
// return nil, err
//}
//
//return convertBundleInfoMongoToBundleInfo(bundleInfoMongo), err
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"group_id": groupId, "bundle_infos.bundle_id": bson.M{"$in": []string{bundleId}}}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetbundlesByBundleId(ctx context.Context, bundleId string) (*entity.Binding, error) {
//bundleInfoMongo := BundleInfoMongo{}
//err := bundleInfoTable.GetOne(ctx, bson.M{"bundle_id": bundleId}, &bundleInfoMongo)
//if err != nil {
// return nil, err
//}
//
//return convertBundleInfoMongoToBundleInfo(bundleInfoMongo), err
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"bundle_infos.bundle_id": bson.M{"$in": []string{bundleId}}}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) GetBindingsBySearch(ctx context.Context, pageSize int, pageNo int, sort string, searchText string, searchFields string, cooperateStatus string, platform int) ([]entity.Binding, int, error) {
bindingMongos := make([]BindingMongo, 0)
sortColumn := make([]string, 0)
switch sort {
case "-created":
sortColumn = append(sortColumn, "-created_info_at") //按创建时间排序
case "-expire":
sortColumn = append(sortColumn, "-expire") //按过期时间倒序排序
case "expire":
sortColumn = append(sortColumn, "expire") //按过期时间正序排序
default:
sortColumn = append(sortColumn, "-created_info_at") //按创建时间倒序排序
}
filter := []bson.M{}
if searchText != "" && searchFields != "" {
sf := bson.M{}
r := bson.RegEx{Pattern: searchText, Options: "i"}
searchFilter := make([]bson.M, 0)
for _, v := range strings.Split(searchFields, ",") {
searchFilter = append(searchFilter, bson.M{v: r})
}
sf["$or"] = searchFilter
filter = append(filter, sf)
}
if cooperateStatus != "all" {
q := bson.M{"cooperateStatus.value": cooperateStatus}
filter = append(filter, q)
}
switch platform {
case entity.BINGING_PLATFORM_OPER:
filter = append(filter, bson.M{"platform": entity.BINGING_PLATFORM_OPER, "group_id": ""})
case entity.BINGING_PLATFORM_ORGAN:
q := bson.M{}
q["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}
filter = append(filter, q)
default:
q := bson.M{}
q["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_OPER, "group_id": ""}, {"$or": []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}}}
filter = append(filter, q)
}
total, err := bindingTable.GetSome(ctx, bson.M{"$and": filter}, sortColumn, pageSize, pageNo, &bindingMongos)
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, total, err
}
func (b BindingByMongoRepo) GetBindingsByAppId(ctx context.Context, pageSize int, pageNo int, appId string) ([]entity.Binding, int, error) {
bindingMongos := make([]BindingMongo, 0)
filter := bson.M{"app_infos.appId": appId}
total, err := bindingTable.GetSome(ctx, filter, []string{"-created_info_at"}, pageSize, pageNo, &bindingMongos)
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, total, err
}
func (b BindingByMongoRepo) GetDevListBinding(ctx context.Context, pageSize int, pageNo int, sort string, searchText string, pullType string, groupId string, bindStatus string, platform int) ([]entity.Binding, int, error) {
bindingMongos := make([]BindingMongo, 0)
sortColumn := make([]string, 0)
switch sort {
case "-created":
sortColumn = append(sortColumn, "-created_info_at") //按创建时间排序
case "-expire":
sortColumn = append(sortColumn, "-expire") //按过期时间倒序排序
case "expire":
sortColumn = append(sortColumn, "expire") //按过期时间正序排序
default:
sortColumn = append(sortColumn, "-created_info_at") //按创建时间倒序排序
}
filter := []bson.M{}
filter = append(filter, bson.M{"group_id": groupId})
switch pullType {
case "recently-expire":
q := bson.M{}
beginData := time.Now().UnixNano() / 1e6
endData := time.Now().AddDate(0, 0, 30).UnixNano() / 1e6
q["expire"] = bson.M{"$gte": beginData, "$lte": endData}
filter = append(filter, q)
}
switch bindStatus {
case "Valid":
filter = append(filter, bson.M{"cooperate_status_value": "Valid"})
case "Invalid":
filter = append(filter, bson.M{"cooperate_status_value": "Invalid"})
}
if searchText != "" {
q := bson.M{}
r := bson.RegEx{Pattern: searchText, Options: "i"}
q["$or"] = []bson.M{{"name": bson.M{"$regex": r}}}
filter = append(filter, q)
}
switch platform {
case entity.BINGING_PLATFORM_OPER:
filter = append(filter, bson.M{"platform": entity.BINGING_PLATFORM_OPER})
case entity.BINGING_PLATFORM_ORGAN:
q := bson.M{}
q["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}
filter = append(filter, q)
default:
q := bson.M{}
q["$or"] = []bson.M{{"platform": entity.BINGING_PLATFORM_OPER}, {"$or": []bson.M{{"platform": entity.BINGING_PLATFORM_ORGAN}, {"platform": bson.M{"$exists": false}}}}}
filter = append(filter, q)
}
total, err := bindingTable.GetSome(ctx, bson.M{"$and": filter}, sortColumn, pageSize, pageNo, &bindingMongos)
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, total, err
}
func (b BindingByMongoRepo) GetBindingBySdkKey(ctx context.Context, sdkKey string) (*entity.Binding, error) {
bindingMongo := BindingMongo{}
err := bindingTable.GetOne(ctx, bson.M{"bundle_infos.sdk_key": sdkKey}, &bindingMongo)
if err != nil {
return nil, err
}
result := convertBindingMongoToBinding(bindingMongo)
return &result, err
}
func (b BindingByMongoRepo) ListAutoBindAppBinding(ctx context.Context, groupId string) ([]string, error) {
bindingMongos := make([]BindingMongo, 0)
_, err := bindingTable.GetAll(ctx, bson.M{"auto_bind": 1, "platform": entity.BINGING_PLATFORM_OPER, "group_id": groupId}, []string{}, &bindingMongos)
if err != nil {
return nil, err
}
result := []string{}
for _, binding := range bindingMongos {
result = append(result, binding.BindingID)
}
return result, nil
}
func (b BindingByMongoRepo) ListCopyOperBinding(ctx context.Context, bindingId string) ([]string, []entity.Binding, error) {
bindingMongos := make([]BindingMongo, 0)
_, err := bindingTable.GetAll(ctx, bson.M{"platform": entity.BINGING_PLATFORM_OPER, "from_binding_id": bindingId}, []string{}, &bindingMongos)
if err != nil {
return nil, nil, err
}
result := []string{}
bindings := make([]entity.Binding, 0)
for _, binding := range bindingMongos {
result = append(result, binding.BindingID)
bindings = append(bindings, convertBindingMongoToBinding(binding))
}
return result, bindings, nil
}
func (b BindingByMongoRepo) ListBindings(ctx context.Context, groupId string, searchText string, pageNo int, pageSize int) ([]entity.Binding, int, error) {
bindingMongos := make([]BindingMongo, 0)
sortColumn := make([]string, 0)
sortColumn = append(sortColumn, "-created_info_at") //按创建时间排序
filter := bson.M{}
if groupId != "" {
filter["group_id"] = groupId
}
if searchText != "" {
r := bson.RegEx{Pattern: searchText, Options: "i"}
filter["$or"] = []bson.M{{"name": r}, {"group_name": r}, {"bundle_infos.bundle_id": r}}
}
total, err := bindingTable.GetSome(ctx, filter, sortColumn, pageSize, pageNo, &bindingMongos)
bindings := make([]entity.Binding, 0)
for _, bindingMongo := range bindingMongos {
bindings = append(bindings, convertBindingMongoToBinding(bindingMongo))
}
return bindings, total, err
}
func (b BindingByMongoRepo) GetAllAssBinds(ctx context.Context, appId string) ([]entity.Binding, error) {
bindings := make([]BindingMongo, 0)
err := bindingTable.OnlyGetAll(ctx, bson.M{"app_infos.appId": appId}, []string{}, &bindings)
if err != nil {
return nil, err
}
result := make([]entity.Binding, 0)
for _, bindingMongo := range bindings {
result = append(result, convertBindingMongoToBinding(bindingMongo))
}
return result, nil
}
func (b BindingByMongoRepo) NotFound(err error) bool {
return err == mgo.ErrNotFound
}
func (b BindingByMongoRepo) UpdateBundleIdIsForbidden(ctx context.Context, bundleId string) error {
return bindingTable.UpdateAll(ctx, bson.M{"bundle_infos": bson.M{"$elemMatch": bson.M{"bundle_id": bundleId}}}, bson.M{"$set": bson.M{"is_forbidden": 1}})
}
func (b BindingByMongoRepo) UpdateBundleIdPlatform(ctx context.Context, bundleId, platform string) error {
return bindingTable.UpdateAll(ctx, bson.M{"bundle_infos": bson.M{"$elemMatch": bson.M{"bundle_id": bundleId}}}, bson.M{"$set": bson.M{"remark": platform}})
}
func (b BindingByMongoRepo) UpdateBundleBindingId(ctx context.Context, bundleId, bindingId, toBindingId string) error {
return nil
}
func convertBindingMongoToBinding(bindingMongo BindingMongo) entity.Binding {
result := entity.Binding{}
bundleInfos := make([]entity.BundleInfo, 0)
for _, v := range bindingMongo.BundleInfos {
bundleInfo := entity.BundleInfo{
BundleID: v.BundleID,
Remark: v.Remark,
SDKKey: v.SDKKey,
SDKID: v.SDKID,
IsFirstCreate: v.IsFirstCreate,
CreatedAt: v.CreatedAt,
CreatedAccount: v.CreatedAccount,
CreatedBy: v.CreatedBy,
IsForbidden: v.IsForbidden,
IsReview: v.IsReview,
}
bundleInfos = append(bundleInfos, bundleInfo)
}
appInfos := make([]entity.AppInfo, 0)
for _, v := range bindingMongo.AppInfos {
item := entity.AppInfo{
AppID: v.AppID,
AssociatedAt: v.AssociatedAt,
AssociatedBy: v.AssociatedBy,
}
appInfos = append(appInfos, item)
}
createInfo := entity.CreatedInfo{
CreatedBy: bindingMongo.CreatedInfoBy,
CreatedAt: bindingMongo.CreatedInfoAt,
}
cooperateStatus := entity.Status{
Value: bindingMongo.CooperateStatusValue,
Reason: bindingMongo.CooperateStatusReason,
LastUpdated: bindingMongo.CooperateStatusLastUpdated,
ModifiedBy: bindingMongo.CooperateStatusModifiedBy,
}
cooperateValidStatus := entity.SpecificStatus{
Reason: bindingMongo.CooperateValidStatusReason,
LastUpdated: bindingMongo.CooperateValidStatusLastUpdated,
ModifiedBy: bindingMongo.CooperateValidStatusModifiedBy,
}
cooperateInvalidStatus := entity.SpecificStatus{
Reason: bindingMongo.CooperateInvalidStatusReason,
LastUpdated: bindingMongo.CooperateInvalidStatusLastUpdated,
ModifiedBy: bindingMongo.CooperateInvalidStatusModifiedBy,
}
//var appInfos []entity.AppInfo
//json.Unmarshal([]byte(bindingMongo.AppInfos), &appInfos)
result.BindingID = bindingMongo.BindingID
result.Name = bindingMongo.Name
result.BundleInfos = bundleInfos
result.CreatedInfo = createInfo
result.GroupID = bindingMongo.GroupID
result.GroupName = bindingMongo.GroupName
result.CooperateStatus = cooperateStatus
result.CooperateValidStatus = cooperateValidStatus
result.CooperateInvalidStatus = cooperateInvalidStatus
result.AppInfos = appInfos
result.Owner = bindingMongo.Owner
result.Expire = bindingMongo.Expire
result.ApiServer = bindingMongo.ApiServer
result.PlatForm = bindingMongo.PlatForm
result.AutoBind = bindingMongo.AutoBind
result.HiddenBundle = bindingMongo.HiddenBundle
result.FromBindingID = bindingMongo.FromBindingID
return result
}
func convertBindingToBindingMongo(binding *entity.Binding) BindingMongo {
result := BindingMongo{}
bundleInfos := make([]BundleInfoData, 0)
for _, v := range binding.BundleInfos {
bundleInfo := BundleInfoData{
BundleID: v.BundleID,
Remark: v.Remark,
SDKKey: v.SDKKey,
SDKID: v.SDKID,
IsFirstCreate: v.IsFirstCreate,
CreatedAt: v.CreatedAt,
CreatedAccount: v.CreatedAccount,
CreatedBy: v.CreatedBy,
IsForbidden: v.IsForbidden,
IsReview: v.IsReview,
}
bundleInfos = append(bundleInfos, bundleInfo)
}
result.BindingID = binding.BindingID
result.Name = binding.Name
result.BundleInfos = bundleInfos
result.CreatedInfoBy = binding.CreatedInfo.CreatedBy
result.CreatedInfoAt = binding.CreatedInfo.CreatedAt
result.CreatedInfoAccount = binding.CreatedInfo.CreatedAccount
result.GroupID = binding.GroupID
result.GroupName = binding.GroupName
result.CooperateStatusValue = binding.CooperateStatus.Value
result.CooperateStatusReason = binding.CooperateStatus.Reason
result.CooperateStatusLastUpdated = binding.CooperateStatus.LastUpdated
result.CooperateStatusModifiedBy = binding.CooperateStatus.ModifiedBy
result.CooperateValidStatusReason = binding.CooperateValidStatus.Reason
result.CooperateValidStatusLastUpdated = binding.CooperateValidStatus.LastUpdated
result.CooperateValidStatusModifiedBy = binding.CooperateValidStatus.ModifiedBy
result.CooperateInvalidStatusReason = binding.CooperateInvalidStatus.Reason
result.CooperateInvalidStatusLastUpdated = binding.CooperateInvalidStatus.LastUpdated
result.CooperateInvalidStatusModifiedBy = binding.CooperateInvalidStatus.ModifiedBy
appInfos := make([]AppInfo, 0)
for _, v := range binding.AppInfos {
item := AppInfo{
AppID: v.AppID,
AssociatedAt: v.AssociatedAt,
AssociatedBy: v.AssociatedBy,
}
appInfos = append(appInfos, item)
}
//result.AppInfos = utility.InterfaceToJsonString(binding.AppInfos)
result.AppInfos = appInfos
result.Owner = binding.Owner
result.Expire = binding.Expire
result.ApiServer = binding.ApiServer
result.PlatForm = binding.PlatForm
result.AutoBind = binding.AutoBind
result.HiddenBundle = binding.HiddenBundle
result.FromBindingID = binding.FromBindingID
return result
}