songchuang 分支代码上传

This commit is contained in:
songchuang 2023-03-03 16:24:19 +08:00
commit e9802ee14e
48 changed files with 11452 additions and 1436 deletions

View File

@ -18,6 +18,7 @@ func main() {
fmt.Println("第一处") fmt.Println("第一处")
config.SetProviderService(&controller.ArtistInfoUserProvider{}) config.SetProviderService(&controller.ArtistInfoUserProvider{})
config.SetProviderService(&controller.ArtistInfoArtworkProvider{}) config.SetProviderService(&controller.ArtistInfoArtworkProvider{})
config.SetProviderService(&controller.ArtistInfoArtshowProvider{})
//config.SetProviderService(&controller.ContractProvider{}) //config.SetProviderService(&controller.ContractProvider{})
//config.SetProviderService(&controller.ArtWorkProvider{}) //config.SetProviderService(&controller.ArtWorkProvider{})
//config.SetProviderService(&controller.SupplyProvider{}) //config.SetProviderService(&controller.SupplyProvider{})

View File

@ -11,6 +11,7 @@ import (
"errors" "errors"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/logic" "github.com/fonchain/fonchain-artistinfo/cmd/internal/logic"
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoArtwork" "github.com/fonchain/fonchain-artistinfo/pb/artistInfoArtwork"
emptypb "google.golang.org/protobuf/types/known/emptypb"
) )
var _ artistInfoArtwork.ArtistInfoArtworkServer = new(ArtistInfoArtworkProvider) var _ artistInfoArtwork.ArtistInfoArtworkServer = new(ArtistInfoArtworkProvider)
@ -20,7 +21,32 @@ type ArtistInfoArtworkProvider struct {
artistInfoLogic logic.ArtistInfoArtworkLogic artistInfoLogic logic.ArtistInfoArtworkLogic
} }
// 进入画作补充信息的流程
func (a ArtistInfoArtworkProvider) GenerateArtworkSupplementInfo(ctx context.Context, request *artistInfoArtwork.ArtworkUidsRequest) (*emptypb.Empty, error) {
return a.artistInfoLogic.GenerateArtworkSupplementInfo(request)
}
// 画作基本信息是否可编辑
func (a ArtistInfoArtworkProvider) CheckArtworkBaseInfoEditable(ctx context.Context, request *artistInfoArtwork.ArtworkUidRequest) (*artistInfoArtwork.CheckArtworkEditableResponse, error) {
if request.ArtworkUid == "" {
return nil, errors.New("ArtworkUid 不能为空")
}
return a.artistInfoLogic.CheckArtworkEditable(request, 2)
}
// 画作补充信息是否可编辑
func (a ArtistInfoArtworkProvider) CheckArtworkSupplementInfoEditable(ctx context.Context, request *artistInfoArtwork.ArtworkUidRequest) (*artistInfoArtwork.CheckArtworkEditableResponse, error) {
if request.ArtworkUid == "" {
return nil, errors.New("ArtworkUid 不能为空")
}
return a.artistInfoLogic.CheckArtworkEditable(request, 3)
}
// 更新画作审批状态
func (a ArtistInfoArtworkProvider) UpdateArtworkAuditStatus(ctx context.Context, request *artistInfoArtwork.UpdateArtworkAuditStatusRequest) (*artistInfoArtwork.ArtworkCommonNoParams, error) { func (a ArtistInfoArtworkProvider) UpdateArtworkAuditStatus(ctx context.Context, request *artistInfoArtwork.UpdateArtworkAuditStatusRequest) (*artistInfoArtwork.ArtworkCommonNoParams, error) {
if request.FlowIndex != 2 && request.FlowIndex != 3 {
return nil, errors.New("FlowIndex 不能为空")
}
return a.artistInfoLogic.UpdateArtworkAuditStatus(request) return a.artistInfoLogic.UpdateArtworkAuditStatus(request)
} }
@ -41,16 +67,16 @@ func (a ArtistInfoArtworkProvider) ArtworkLockAction(ctx context.Context, reques
return a.artistInfoLogic.ArtworkLockAction(request) return a.artistInfoLogic.ArtworkLockAction(request)
} }
// GetArtworkRecordUids 获取画作锁记录
func (a ArtistInfoArtworkProvider) GetArtworkLockRecords(ctx context.Context, request *artistInfoArtwork.GetArtworkLockRecordsRequest) (*artistInfoArtwork.ArtworkLockList, error) {
return a.artistInfoLogic.GetArtworkLockRecords(request)
}
// DeleteArtworkRecord 删除话走锁记录 // DeleteArtworkRecord 删除话走锁记录
func (a ArtistInfoArtworkProvider) DeleteArtworkRecord(ctx context.Context, request *artistInfoArtwork.DeleteArtworkRecordRequest) (*artistInfoArtwork.ArtworkCommonNoParams, error) { func (a ArtistInfoArtworkProvider) DeleteArtworkRecord(ctx context.Context, request *artistInfoArtwork.DeleteArtworkRecordRequest) (*artistInfoArtwork.ArtworkCommonNoParams, error) {
return a.artistInfoLogic.DeleteArtworkRecord(request) return a.artistInfoLogic.DeleteArtworkRecord(request)
} }
// GetArtworkRecordUids 获取画作锁记录
func (a ArtistInfoArtworkProvider) GetArtworkLockRecords(ctx context.Context, request *artistInfoArtwork.GetArtworkLockRecordsRequest) (*artistInfoArtwork.ArtworkLockList, error) {
return a.artistInfoLogic.GetArtworkLockRecords(request)
}
// GetArtworkLockHistoryGroup 查询画作历史记录,按照锁定时间分组 // GetArtworkLockHistoryGroup 查询画作历史记录,按照锁定时间分组
func (a ArtistInfoArtworkProvider) GetArtworkLockHistoryGroup(ctx context.Context, request *artistInfoArtwork.GetArtworkLockHistoryRequest) (*artistInfoArtwork.GetArtworkLockHistoryResponse, error) { func (a ArtistInfoArtworkProvider) GetArtworkLockHistoryGroup(ctx context.Context, request *artistInfoArtwork.GetArtworkLockHistoryRequest) (*artistInfoArtwork.GetArtworkLockHistoryResponse, error) {
return a.artistInfoLogic.GetArtworkLockHistoryGroup(request) return a.artistInfoLogic.GetArtworkLockHistoryGroup(request)

View File

@ -0,0 +1,111 @@
// Package controller -----------------------------
// @file : artshowVideo.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 10:52
// -------------------------------------------
package controller
import (
context "context"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/logic"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
emptypb "google.golang.org/protobuf/types/known/emptypb"
)
// 画展包视频
var _ artistinfoArtshow.ArtistInfoArtshowServer = new(ArtistInfoArtshowProvider)
type ArtistInfoArtshowProvider struct {
artistinfoArtshow.UnimplementedArtistInfoArtshowServer
videoLogic logic.ArtshowVideoLogic
artistIndexLogic logic.ArtshowArtistIndexLogic
artistSupplementLogic logic.ArtshowArtistSupplementLogic
}
// ----------------- 画展包-画家补充信息
func (a ArtistInfoArtshowProvider) GetArtistSupplementDetail(ctx context.Context, request *artistinfoArtshow.GetArtistSupplementDetailRequest) (*artistinfoArtshow.ArtistSupplementInfo, error) {
return a.artistSupplementLogic.GetSupplementDetail(request)
}
func (a ArtistInfoArtshowProvider) GetArtistSupplementList(ctx context.Context, request *artistinfoArtshow.GetArtistSupplementListRequest) (*artistinfoArtshow.GetArtistSupplementListResponse, error) {
return a.artistSupplementLogic.GetSupplementList(request)
}
func (a ArtistInfoArtshowProvider) CreateArtistSupplement(ctx context.Context, info *artistinfoArtshow.ArtistSupplementInfo) (*emptypb.Empty, error) {
return nil, a.artistSupplementLogic.CreateSupplement(info)
}
func (a ArtistInfoArtshowProvider) BatchCreateArtistSupplement(ctx context.Context, request *artistinfoArtshow.BatchCreateArtistSupplementRequest) (*emptypb.Empty, error) {
return nil, a.artistSupplementLogic.BatchCreateSupplement(request)
}
func (a ArtistInfoArtshowProvider) AuditArtistSupplement(ctx context.Context, request *artistinfoArtshow.AuditArtistSupplementRequest) (*emptypb.Empty, error) {
return a.artistSupplementLogic.AuditSupplement(request)
}
func (a ArtistInfoArtshowProvider) UpdateArtistSupplement(ctx context.Context, request *artistinfoArtshow.UpdateArtistSupplementRequest) (*emptypb.Empty, error) {
return a.artistSupplementLogic.UpdateSupplement(request)
}
func (a ArtistInfoArtshowProvider) DeletedArtistSupplement(ctx context.Context, request *artistinfoArtshow.DeletedArtistSupplementRequest) (*emptypb.Empty, error) {
return a.artistSupplementLogic.DeletedSupplement(request)
}
// ----------------- 画展包-画家指数
func (a ArtistInfoArtshowProvider) GetArtistIndexDetail(ctx context.Context, request *artistinfoArtshow.GetArtistIndexDetailRequest) (*artistinfoArtshow.ArtistIndexInfo, error) {
return a.artistIndexLogic.GetArtistIndexDetail(request)
}
func (a ArtistInfoArtshowProvider) GetArtistIndexList(ctx context.Context, request *artistinfoArtshow.GetArtistIndexListRequest) (*artistinfoArtshow.GetArtistIndexListResponse, error) {
return a.artistIndexLogic.GetArtistIndexList(request)
}
func (a ArtistInfoArtshowProvider) CreateArtistIndex(ctx context.Context, info *artistinfoArtshow.ArtistIndexInfo) (*emptypb.Empty, error) {
return nil, a.artistIndexLogic.CreateArtistIndex(info)
}
func (a ArtistInfoArtshowProvider) BatchCreateArtistIndex(ctx context.Context, request *artistinfoArtshow.BatchCreateArtistIndexRequest) (*emptypb.Empty, error) {
return nil, a.artistIndexLogic.BatchCreateArtistIndex(request)
}
func (a ArtistInfoArtshowProvider) AuditArtistIndex(ctx context.Context, request *artistinfoArtshow.AuditArtistIndexRequest) (*emptypb.Empty, error) {
return a.artistIndexLogic.AuditArtistIndex(request)
}
func (a ArtistInfoArtshowProvider) UpdateArtistIndex(ctx context.Context, request *artistinfoArtshow.UpdateArtistIndexRequest) (*emptypb.Empty, error) {
return a.artistIndexLogic.UpdateArtistIndex(request)
}
func (a ArtistInfoArtshowProvider) DeletedArtistIndex(ctx context.Context, request *artistinfoArtshow.DeletedArtistIndexRequest) (*emptypb.Empty, error) {
return a.artistIndexLogic.DeletedArtistIndex(request)
}
// ----------------- 画展包-视频资料
func (a ArtistInfoArtshowProvider) GetArtshowVideoDetail(ctx context.Context, request *artistinfoArtshow.GetArtshowVideoDetailRequest) (*artistinfoArtshow.ArtshowVideoInfo, error) {
return a.videoLogic.GetArtshowVideoDetail(request)
}
func (a ArtistInfoArtshowProvider) BatchCreateArtshowVideo(ctx context.Context, request *artistinfoArtshow.BatchCreateArtshowVideoRequest) (*emptypb.Empty, error) {
return nil, a.videoLogic.BatchCreateArtshowVideo(request)
}
func (a ArtistInfoArtshowProvider) CreateArtshowVideo(ctx context.Context, info *artistinfoArtshow.ArtshowVideoInfo) (*emptypb.Empty, error) {
return nil, a.videoLogic.CreateArtshowVideo(info)
}
func (a ArtistInfoArtshowProvider) GetArtshowVideoList(ctx context.Context, requst *artistinfoArtshow.GetArtshowVideoListRequst) (*artistinfoArtshow.GetArtshowVideoListResponse, error) {
return a.videoLogic.GetArtshowVideoList(requst)
}
func (a ArtistInfoArtshowProvider) AuditArtshowVideo(ctx context.Context, request *artistinfoArtshow.AuditArtshowVideoRequest) (*emptypb.Empty, error) {
return a.videoLogic.AuditArtshowVideo(request)
}
func (a ArtistInfoArtshowProvider) UpdateArtshowVideo(ctx context.Context, request *artistinfoArtshow.UpdateArtshowVideoRequest) (*emptypb.Empty, error) {
return a.videoLogic.UpdateArtshowVideo(request)
}
func (a ArtistInfoArtshowProvider) DeletedArtshowVideo(ctx context.Context, request *artistinfoArtshow.DeletedArtshowVideoRequest) (*emptypb.Empty, error) {
return a.videoLogic.DeletedArtshowVideo(request)
}

View File

@ -1,110 +1,103 @@
package controller package controller
import ( //
"context" //type SupplyProvider struct {
"fmt" // supplyinfo.UnimplementedSupplyInfoServer
// SupplyLogic *logic.Supply
"github.com/fonchain/fonchain-artistinfo/cmd/internal/logic" //}
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo" //
) //func (a *SupplyProvider) GetSupplyInfoList(ctx context.Context, req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
// fmt.Println("第一处")
type SupplyProvider struct { // if rep, err = a.SupplyLogic.GetSupplyInfoList(req); err != nil {
supplyinfo.UnimplementedSupplyInfoServer // return nil, err
SupplyLogic *logic.Supply // }
} // return rep, nil
//}
func (a *SupplyProvider) GetSupplyInfoList(ctx context.Context, req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetSupplyInfo(ctx context.Context, req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
if rep, err = a.SupplyLogic.GetSupplyInfoList(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetSupplyInfo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetSupplyInfo(ctx context.Context, req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) UpdateSupplyInfo(ctx context.Context, req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
if rep, err = a.SupplyLogic.GetSupplyInfo(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.UpdateSupplyInfo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) UpdateSupplyInfo(ctx context.Context, req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetVideoList(ctx context.Context, req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
if rep, err = a.SupplyLogic.UpdateSupplyInfo(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetVideoList(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetVideoList(ctx context.Context, req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetVideo(ctx context.Context, req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
if rep, err = a.SupplyLogic.GetVideoList(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetVideo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetVideo(ctx context.Context, req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) UpdateVideo(ctx context.Context, req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
if rep, err = a.SupplyLogic.GetVideo(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.UpdateVideo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) UpdateVideo(ctx context.Context, req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetExam(ctx context.Context, req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
if rep, err = a.SupplyLogic.UpdateVideo(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetExam(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetExam(ctx context.Context, req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetExamList(ctx context.Context, req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
if rep, err = a.SupplyLogic.GetExam(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetExamList(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetExamList(ctx context.Context, req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) UpdateExam(ctx context.Context, req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
if rep, err = a.SupplyLogic.GetExamList(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.UpdateExam(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) UpdateExam(ctx context.Context, req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetArtistInfoList(ctx context.Context, req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
if rep, err = a.SupplyLogic.UpdateExam(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetArtistInfoList(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetArtistInfoList(ctx context.Context, req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) GetArtistInfo(ctx context.Context, req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
if rep, err = a.SupplyLogic.GetArtistInfoList(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.GetArtistInfo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) GetArtistInfo(ctx context.Context, req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) { //
fmt.Println("第一处") //func (a *SupplyProvider) UpdateArtistInfo(ctx context.Context, req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
if rep, err = a.SupplyLogic.GetArtistInfo(req); err != nil { // fmt.Println("第一处")
return nil, err // if rep, err = a.SupplyLogic.UpdateArtistInfo(req); err != nil {
} // return nil, err
return rep, nil // }
} // return rep, nil
//}
func (a *SupplyProvider) UpdateArtistInfo(ctx context.Context, req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.UpdateArtistInfo(req); err != nil {
return nil, err
}
return rep, nil
}

View File

@ -14,9 +14,11 @@ import (
db "github.com/fonchain/fonchain-artistinfo/pkg/db" db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"github.com/fonchain/fonchain-artistinfo/pkg/m" "github.com/fonchain/fonchain-artistinfo/pkg/m"
"github.com/fonchain/fonchain-artistinfo/pkg/service" "github.com/fonchain/fonchain-artistinfo/pkg/service"
"github.com/fonchain/fonchain-artistinfo/pkg/util/stime"
"go.uber.org/zap" "go.uber.org/zap"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause" "gorm.io/gorm/clause"
"time"
) )
func RegisterUser(req *artistInfoUser.RegisterUserRequest) (rep *artistInfoUser.RegisterUserRespond, err error) { func RegisterUser(req *artistInfoUser.RegisterUserRequest) (rep *artistInfoUser.RegisterUserRespond, err error) {
@ -277,7 +279,7 @@ func ArtistSupplyList(req *artistInfoUser.ArtistSupplyListRequest) (rep *artistI
} }
func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLockRespond, err error) { func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLockRespond, err error) {
var tx = db.DB.Model(model.User{}) var tx = db.DB.Model(model.User{}).Begin()
switch { switch {
case req.Id != 0: case req.Id != 0:
tx = tx.Where("id = ?", req.Id) tx = tx.Where("id = ?", req.Id)
@ -290,42 +292,33 @@ func UserLock(req *artistInfoUser.UserLockRequest) (rep *artistInfoUser.UserLock
zap.L().Error("get user info err", zap.Error(err)) zap.L().Error("get user info err", zap.Error(err))
return return
} }
if err = tx.Update("is_lock", req.IsLock).Error; err != nil { var now string
if req.IsLock {
now = stime.TimeToString(time.Now(), stime.Format_Normal_YMDhms)
}
if err = tx.Update("is_lock", req.IsLock).Update("latest_lock_time", now).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err)) zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
return nil, err return nil, err
} }
rep.LockTime = now
//if !req.IsLock { if !req.IsLock {
// var vas model.ExhVideo // 解锁时与另外4个模块联动
// vas.UserId = uint(req.Id) if err = db.DB.Model(model.ArtworkLockRecord{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
// if err = db.DB.Model(&vas).Update("state", 5).Where("state = 1 or state = 2 or state = 3").Error; err != nil { return nil, err
// zap.L().Error("get user info err", zap.Error(err)) }
// err = errors.New(m.ERROR_SELECT) if err = db.DB.Model(model.ArtshowArtistSupplement{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
// return nil, err return nil, err
// } }
// var ee model.ExhExam if err = db.DB.Model(model.ArtshowArtistIndex{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
// ee.UserId = uint(req.Id) return nil, err
// if err = db.DB.Model(&ee).Update("state", 5).Where("state = 1 or state = 2 or state = 3 or state = 4").Error; err != nil { }
// zap.L().Error("get user info err", zap.Error(err)) if err = db.DB.Model(model.ArtshowVideoRecord{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
// err = errors.New(m.ERROR_SELECT) return nil, err
// return nil, err }
// } }
// var si model.SupplyInfo tx.Commit()
// si.UserId = uint(req.Id)
// if err = db.DB.Model(&si).Update("state", 5).Where("state = 1 or state = 2 or state = 3 or state = 4").Error; err != nil {
// zap.L().Error("get user info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
// var ai model.ArtistInfo
// ai.UserId = uint(req.Id)
// if err = db.DB.Model(&ai).Update("state", 5).Where("state = 1 or state = 2 or state = 3 or state = 4").Error; err != nil {
// zap.L().Error("get user info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//}
return rep, nil return rep, nil
} }
@ -386,30 +379,30 @@ func UnFinishList(req *artistInfoUser.UnFinishListRequest) (rep *artistInfoUser.
// return nil, err // return nil, err
//} //}
//rep.AccountStateList = accountStateCount //rep.AccountStateList = accountStateCount
var supplyInfo model.SupplyInfo //var supplyInfo model.SupplyInfo
var supplyInfoCount int64 //var supplyInfoCount int64
if err := db.DB.Model(&supplyInfo).Where("types = ? and user_id = ? ", "1", user.ID).Count(&supplyInfoCount).Error; err != nil { //if err := db.DB.Model(&supplyInfo).Where("types = ? and user_id = ? ", "1", user.ID).Count(&supplyInfoCount).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err)) // zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) // err = errors.New(m.ERROR_SELECT)
return nil, err // return nil, err
} //}
rep.SupplyInfoList += supplyInfoCount //rep.SupplyInfoList += supplyInfoCount
var exhVideo model.ExhVideo //var exhVideo model.ExhVideo
var exhVideoCount int64 //var exhVideoCount int64
if err := db.DB.Model(&exhVideo).Where("types = ? and user_id = ? ", "1", user.ID).Count(&exhVideoCount).Error; err != nil { //if err := db.DB.Model(&exhVideo).Where("types = ? and user_id = ? ", "1", user.ID).Count(&exhVideoCount).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err)) // zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) // err = errors.New(m.ERROR_SELECT)
return nil, err // return nil, err
} //}
rep.SupplyInfoList += exhVideoCount //rep.SupplyInfoList += exhVideoCount
var exhExam model.ExhExam //var exhExam model.ExhExam
var exhExamCount int64 //var exhExamCount int64
if err := db.DB.Model(&exhExam).Where("types = ? and user_id = ? ", "1", user.ID).Count(&exhExamCount).Error; err != nil { //if err := db.DB.Model(&exhExam).Where("types = ? and user_id = ? ", "1", user.ID).Count(&exhExamCount).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err)) // zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) // err = errors.New(m.ERROR_SELECT)
return nil, err // return nil, err
} //}
rep.SupplyInfoList += exhExamCount //rep.SupplyInfoList += exhExamCount
return rep, nil return rep, nil
} }
@ -507,6 +500,7 @@ func FindUser(req *artistInfoUser.FindUserRequest) (rep *artistInfoUser.UserInfo
HtmlType: data.Htmltype, HtmlType: data.Htmltype,
EnvType: data.Envtype, EnvType: data.Envtype,
InviteCode: data.InviteCode, InviteCode: data.InviteCode,
LatestLockTime: data.LatestLockTime,
} }
return rep, nil return rep, nil
@ -517,6 +511,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
var ( var (
datas = []model.User{} datas = []model.User{}
tx = db.DB.Model(model.User{}). tx = db.DB.Model(model.User{}).
Joins("LEFT JOIN real_name rn ON rn.id = sys_user.real_name_id").
Preload("RealNameInfo").Preload("InvitedBy.UserInfo.RealNameInfo").Where("sys_user.mgmt_artist_uid!=''") Preload("RealNameInfo").Preload("InvitedBy.UserInfo.RealNameInfo").Where("sys_user.mgmt_artist_uid!=''")
) )
if req.InvitedCode != "" { if req.InvitedCode != "" {
@ -525,8 +520,11 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
if req.MgmtArtistUid != "" { if req.MgmtArtistUid != "" {
tx = tx.Where("mgmt_artist_uid = ?", req.MgmtArtistUid) tx = tx.Where("mgmt_artist_uid = ?", req.MgmtArtistUid)
} }
if req.MgmtArtistUids != nil {
tx = tx.Where("mgmt_artist_uid in ?", req.MgmtArtistUids)
}
if req.InviterName != "" { if req.InviterName != "" {
tx = tx.Joins("LEFT JOIN real_name rn ON rn.id = sys_user.real_name_id").Clauses(clause.Like{ tx = tx.Clauses(clause.Like{
Column: "rn.name", Column: "rn.name",
Value: "%" + req.InviterName + "%", Value: "%" + req.InviterName + "%",
}) })
@ -534,6 +532,15 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
if req.IsArtist { if req.IsArtist {
tx = tx.Where("mgmt_artist_uid !='' ") tx = tx.Where("mgmt_artist_uid !='' ")
} }
if req.IsLock {
tx = tx.Where("is_lock=true")
}
if req.ArtistRealName != "" {
tx = tx.Where("").Clauses(clause.Like{
Column: "rn.name",
Value: "%" + req.ArtistRealName + "%",
})
}
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&datas).Error err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&datas).Error
if err != nil { if err != nil {
@ -588,6 +595,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
HtmlType: v.Htmltype, HtmlType: v.Htmltype,
EnvType: v.Envtype, EnvType: v.Envtype,
InviteCode: v.InviteCode, InviteCode: v.InviteCode,
LatestLockTime: v.LatestLockTime,
}) })
} }
return return
@ -596,20 +604,23 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
func GetViewUserList(req *artistInfoUser.FindUsersRequest) (resp []model.UserView, total int64, err error) { func GetViewUserList(req *artistInfoUser.FindUsersRequest) (resp []model.UserView, total int64, err error) {
resp = []model.UserView{} resp = []model.UserView{}
var ( var (
tx = db.DB.Model(model.UserView{}) tx = db.DB.Model(model.UserView{}).Order("created_at desc")
) )
if req.InvitedCode != "" { if req.InvitedCode != "" {
tx = tx.Where("invited_code = ?", req.InvitedCode) tx = tx.Where("invited_code = ?", req.InvitedCode)
} }
if req.MgmtArtistUid != "" { if req.MgmtArtistUid != "" {
tx = tx.Where("mgmt_artist_uid = ?", req.MgmtArtistUid) tx = tx.Where("mgmt_artist_uid = ?", req.MgmtArtistUid)
} else if req.MgmtArtistUids != nil {
tx = tx.Where("mgmt_artist_uid in ?", req.MgmtArtistUids)
} }
if req.InviterName != "" { if req.InviterName != "" {
tx = tx.Where("inviter_real_name = ?", req.InviterName) tx = tx.Where("inviter_real_name LIKE '%?%'", req.InviterName)
} }
if req.IsArtist { if req.IsArtist {
tx = tx.Where("mgmt_artist_uid !='' ") tx = tx.Where("mgmt_artist_uid !='' ")
} }
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&resp).Error err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&resp).Error
return return
} }

View File

@ -0,0 +1,118 @@
// Package dao -----------------------------
// @file : artistinfo_artshow_artistIndex.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/3 0:20
// -------------------------------------------
package dao
import (
"errors"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"gorm.io/gorm"
)
var ArtistinfoArtshowArtistIndex = new(artistinfoArtshowArtistIndex)
type artistinfoArtshowArtistIndex struct{}
func (a artistinfoArtshowArtistIndex) BatchCreateData(datas []model.ArtshowArtistIndex) error {
//return db.DB.Create(&datas).Error
tx := db.DB.Begin()
for _, v := range datas {
err := a.CreateData(&v, tx)
if err != nil {
return err
}
}
tx.Commit()
return nil
}
func (a artistinfoArtshowArtistIndex) CreateData(data *model.ArtshowArtistIndex, tx ...*gorm.DB) error {
var txdb *gorm.DB
if tx != nil {
txdb = tx[0]
} else {
txdb = db.DB
}
var exist = model.ArtshowArtistIndex{}
db.DB.Where("artist_uid = ? AND status = 2 AND class= ?", data.ArtistUid, data.Class).Find(&exist)
if exist.ID != 0 {
return errors.New(fmt.Sprintf("主题[%s]已存在", data.Title))
}
return txdb.Create(&data).Error
}
func (a artistinfoArtshowArtistIndex) UpdateData(data *model.ArtshowArtistIndex) error {
return db.DB.Updates(&data).Error
}
func (a artistinfoArtshowArtistIndex) DeletedData(id ...int64) (err error) {
if len(id) == 1 {
err = db.DB.Where("id = ?", id[0]).Delete(&model.ArtshowArtistIndex{}).Error
} else if len(id) > 0 {
err = db.DB.Where("id = ?", id).Delete(&model.ArtshowArtistIndex{}).Error
}
return err
}
func (a artistinfoArtshowArtistIndex) GetData(id int64) (data *model.ArtshowArtistIndex, err error) {
err = db.DB.Where("id = ?", id).First(data).Error
return
}
func (a artistinfoArtshowArtistIndex) GetDataList(req *artistinfoArtshow.GetArtistIndexListRequest) (datas []model.ArtshowArtistIndex, total int64, err error) {
datas = []model.ArtshowArtistIndex{}
var tx = db.DB.Model(model.ArtshowArtistIndex{})
if req.ArtistUid != "" {
tx = tx.Where("artist_uid = ?", req.ArtistUid)
}
if req.LockTime != "" {
tx = tx.Where("lock_time = ?", req.LockTime)
}
if req.Status != 0 {
tx = tx.Where("status = ?", req.Status)
}
if req.AuditStatus != 0 {
tx = tx.Where("audit_status = ?", req.AuditStatus)
}
//if req.AuditMark1 != "" {
// tx = tx.Where("audit_mark1 = ?", req.AuditMark1)
//}
//if req.AuditMark2 != "" {
// tx = tx.Where("audit_mark2 = ?", req.AuditMark2)
//}
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&datas).Error
return
}
func (a artistinfoArtshowArtistIndex) Audit(auditStatus model.AuditStatus, mark1, mark2 string, ids ...int64) (err error) {
tx := db.DB.Begin()
err = tx.Model(model.ArtshowArtistIndex{}).Where("id in ?", ids).Update("audit_status", auditStatus).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowArtistIndex{}).Where("id in ?", ids).Update("audit_mark1", mark1).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowArtistIndex{}).Where("id in ?", ids).Update("audit_mark2", mark2).Error
if err != nil {
return err
}
tx.Commit()
return
}
func (a artistinfoArtshowArtistIndex) GetArtistIndexDetail(in *artistinfoArtshow.GetArtistIndexDetailRequest) (rep model.ArtshowArtistIndex, err error) {
var tx = db.DB.Model(model.ArtshowArtistIndex{})
if in.Id != 0 {
tx = tx.Where("id = ?", in.Id)
}
//var data model.ArtshowArtistIndex
err = tx.First(&rep).Error
return
}

View File

@ -0,0 +1,118 @@
// Package dao -----------------------------
// @file : artistinfo_artshow_artistIndex.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/3 0:20
// -------------------------------------------
package dao
import (
"errors"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"gorm.io/gorm"
)
var ArtistSupplement = new(artistSupplement)
type artistSupplement struct{}
func (a artistSupplement) BatchCreateData(datas []model.ArtshowArtistSupplement) error {
//return db.DB.Create(&datas).Error
tx := db.DB.Begin()
for _, v := range datas {
err := a.CreateData(&v, tx)
if err != nil {
return err
}
}
tx.Commit()
return nil
}
func (a artistSupplement) CreateData(data *model.ArtshowArtistSupplement, tx ...*gorm.DB) error {
var txdb *gorm.DB
if tx != nil {
txdb = tx[0]
} else {
txdb = db.DB
}
var exist = model.ArtshowArtistSupplement{}
db.DB.Where("artist_uid = ? AND status = 2", data.ArtistUid).Find(&exist)
if exist.ID != 0 {
return errors.New(fmt.Sprintf("画家补充信息已存在"))
}
return txdb.Create(&data).Error
}
func (a artistSupplement) UpdateData(data *model.ArtshowArtistSupplement) error {
return db.DB.Updates(&data).Error
}
func (a artistSupplement) DeletedData(id ...int64) (err error) {
if len(id) == 1 {
err = db.DB.Where("id = ?", id[0]).Delete(&model.ArtshowArtistSupplement{}).Error
} else if len(id) > 0 {
err = db.DB.Where("id = ?", id).Delete(&model.ArtshowArtistSupplement{}).Error
}
return err
}
func (a artistSupplement) GetData(id int64) (data *model.ArtshowArtistSupplement, err error) {
err = db.DB.Where("id = ?", id).First(&data).Error
return
}
func (a artistSupplement) GetDataList(req *artistinfoArtshow.GetArtistSupplementListRequest) (datas []model.ArtshowArtistSupplement, total int64, err error) {
datas = []model.ArtshowArtistSupplement{}
var tx = db.DB.Model(model.ArtshowArtistSupplement{})
if req.ArtistUid != "" {
tx = tx.Where("artist_uid = ?", req.ArtistUid)
}
if req.LockTime != "" {
tx = tx.Where("lock_time = ?", req.LockTime)
}
if req.Status != 0 {
tx = tx.Where("status = ?", req.Status)
}
if req.AuditStatus != 0 {
tx = tx.Where("audit_status = ?", req.AuditStatus)
}
//if req.AuditMark1 != "" {
// tx = tx.Where("audit_mark1 = ?", req.AuditMark1)
//}
//if req.AuditMark2 != "" {
// tx = tx.Where("audit_mark2 = ?", req.AuditMark2)
//}
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&datas).Error
return
}
func (a artistSupplement) Audit(auditStatus model.AuditStatus, mark1, mark2 string, ids ...int64) (err error) {
tx := db.DB.Begin()
err = tx.Model(model.ArtshowArtistSupplement{}).Where("id in ?", ids).Update("audit_status", auditStatus).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowArtistSupplement{}).Where("id in ?", ids).Update("audit_mark1", mark1).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowArtistSupplement{}).Where("id in ?", ids).Update("audit_mark2", mark2).Error
if err != nil {
return err
}
tx.Commit()
return
}
func (a artistSupplement) GetSupplementDetail(in *artistinfoArtshow.GetArtistSupplementDetailRequest) (rep model.ArtshowArtistSupplement, err error) {
var tx = db.DB.Model(model.ArtshowArtistSupplement{})
if in.Id != 0 {
tx = tx.Where("id = ?", in.Id)
}
//var data model.ArtshowArtistSupplement
err = tx.First(&rep).Error
return
}

View File

@ -0,0 +1,134 @@
// Package dao -----------------------------
// @file : artistinfo_artshow.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 12:06
// -------------------------------------------
package dao
import (
"errors"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
var ArtistinfoArtshowVideo = new(artistinfoArtshowVideo)
type artistinfoArtshowVideo struct{}
func (a artistinfoArtshowVideo) BatchCreateData(datas []model.ArtshowVideoRecord) error {
//return db.DB.Create(&datas).Error
tx := db.DB.Begin()
for _, v := range datas {
err := a.CreateData(&v, tx)
if err != nil {
return err
}
}
tx.Commit()
return nil
}
func (a artistinfoArtshowVideo) CreateData(data *model.ArtshowVideoRecord, tx ...*gorm.DB) error {
var txdb *gorm.DB
if tx != nil {
txdb = tx[0]
} else {
txdb = db.DB
}
var exist = model.ArtshowVideoRecord{}
db.DB.Where("artist_uid = ? AND status = 2", data.ArtistUid).Find(&exist)
if exist.ID != 0 {
return errors.New("数据已存在")
}
return txdb.Create(&data).Error
}
func (a artistinfoArtshowVideo) UpdateData(data *model.ArtshowVideoRecord) error {
return db.DB.Updates(&data).Error
}
func (a artistinfoArtshowVideo) DeletedData(id ...int64) (err error) {
if len(id) == 1 {
err = db.DB.Where("id = ?", id[0]).Delete(&model.ArtshowVideoRecord{}).Error
} else if len(id) > 0 {
err = db.DB.Where("id = ?", id).Delete(&model.ArtshowVideoRecord{}).Error
}
return err
}
func (a artistinfoArtshowVideo) GetData(id int64) (data *model.ArtshowVideoRecord, err error) {
err = db.DB.Where("id = ?", id).First(data).Error
return
}
func (a artistinfoArtshowVideo) GetDataList(req *artistinfoArtshow.GetArtshowVideoListRequst) (datas []model.ArtshowVideoRecord, total int64, err error) {
datas = []model.ArtshowVideoRecord{}
var tx = db.DB.Model(model.ArtshowVideoRecord{})
if req.ArtistUid != "" {
tx = tx.Where("artist_uid = ?", req.ArtistUid)
}
if req.LockTime != "" {
tx = tx.Where("lock_time = ?", req.LockTime)
}
if req.ArtistName != "" {
tx = tx.Clauses(clause.Like{
Column: "artist_name",
Value: "%" + req.ArtistName + "%",
})
}
if req.Status != 0 {
tx = tx.Where("status = ?", req.Status)
}
//if req.VideoUrl != "" {
// tx = tx.Where("video_url = ?", req.VideoUrl)
//}
if req.AuditStatus != 0 {
tx = tx.Where("audit_status = ?", req.AuditStatus)
}
//if req.AuditMark1 != "" {
// tx = tx.Where("audit_mark1 = ?", req.AuditMark1)
//}
//if req.AuditMark2 != "" {
// tx = tx.Where("audit_mark2 = ?", req.AuditMark2)
//}
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&datas).Error
return
}
func (a artistinfoArtshowVideo) Audit(auditStatus model.AuditStatus, mark1, mark2 string, ids ...int64) (err error) {
tx := db.DB.Begin()
err = tx.Model(model.ArtshowVideoRecord{}).Where("id in ?", ids).Update("audit_status", auditStatus).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowVideoRecord{}).Where("id in ?", ids).Update("audit_mark1", mark1).Error
if err != nil {
return err
}
err = tx.Model(model.ArtshowVideoRecord{}).Where("id in ?", ids).Update("audit_mark2", mark2).Error
if err != nil {
return err
}
tx.Commit()
return
}
func (a artistinfoArtshowVideo) GetArtshowVideoDetail(in *artistinfoArtshow.GetArtshowVideoDetailRequest) (rep model.ArtshowVideoRecord, err error) {
var tx = db.DB.Model(model.ArtshowVideoRecord{})
//if in.ArtistUid != "" {
// tx = tx.Where("artist_uid =?", in.ArtistUid)
//}
//if in.LockTime != "" {
// tx = tx.Where("lock_time = ?", in.LockTime)
//}
//if in.Status != 0 {
// tx = tx.Where("status = ?", in.Status)
//}
if in.Id != 0 {
tx = tx.Where("id = ?", in.Id)
}
err = tx.First(&rep).Error
return
}

View File

@ -18,26 +18,26 @@ import (
func CreateArtworkLockRecord(in *model.ArtworkLockRecord) error { func CreateArtworkLockRecord(in *model.ArtworkLockRecord) error {
var data = model.ArtworkLockRecord{ var data = model.ArtworkLockRecord{
ArtistUid: in.ArtistUid, ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid, ArtworkUid: in.ArtworkUid,
Status: in.Status, Status: in.Status,
LockTime: in.LockTime, LockTime: in.LockTime,
AuditStatus: 1,
//AuditMark: in.AuditMark,
//AuditMark2: in.AuditMark2,
} }
return db.DB.Create(&data).Error return db.DB.Create(&data).Error
} }
func UpdateArtworkLockRecord(in *model.ArtworkLockRecord) error { func UpdateArtworkLockRecord(in *model.ArtworkLockRecord) error {
var data = model.ArtworkLockRecord{ var data = model.ArtworkLockRecord{
ArtistUid: in.ArtistUid, ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid, ArtworkUid: in.ArtworkUid,
Status: in.Status, Status: in.Status,
LockTime: in.LockTime, LockTime: in.LockTime,
AuditStatus: in.AuditStatus, BaseAuditStatus: in.BaseAuditStatus,
AuditMark: in.AuditMark, BaseAuditMark: in.BaseAuditMark,
AuditMark2: in.AuditMark2, BaseAuditMark2: in.BaseAuditMark2,
SupplementAuditStatus: in.SupplementAuditStatus,
SupplementAuditMark: in.SupplementAuditMark,
SupplementAuditMark2: in.SupplementAuditMark2,
} }
var thisData model.ArtworkLockRecord var thisData model.ArtworkLockRecord
err := db.DB.Where("artist_uid = ?", in.ArtworkUid).First(&thisData).Error err := db.DB.Where("artist_uid = ?", in.ArtworkUid).First(&thisData).Error
@ -65,7 +65,7 @@ func DeletedArtworkLockRecord(artworkUid ...string) error {
} }
} }
func BatchLockArtworks(artistUid string) error { func BatchLockArtworks(artistUid string, lockTime string) error {
var artworkUids []string var artworkUids []string
db.DB.Model(model.ArtworkLockRecord{}). db.DB.Model(model.ArtworkLockRecord{}).
Where("status = 1 AND lock_time=''").Where(" artist_uid = ?", artistUid). Where("status = 1 AND lock_time=''").Where(" artist_uid = ?", artistUid).
@ -73,9 +73,14 @@ func BatchLockArtworks(artistUid string) error {
if artworkUids == nil { if artworkUids == nil {
return nil return nil
} }
if lockTime == "" {
lockTime = stime.TimeToString(time.Now(), stime.Format_Normal_YMDhms)
}
var updateMap = map[string]any{ var updateMap = map[string]any{
"status": 2, "status": 2,
"lock_time": stime.TimeToString(time.Now(), stime.Format_Normal_YMDhms), "lock_time": lockTime,
"base_audit_status": model.AuditType_Pending, //基本数据审批
"audit_flow_index": 2, //进入基本信息审批流程
} }
return db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid in ?", artworkUids).Updates(&updateMap).Error return db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid in ?", artworkUids).Updates(&updateMap).Error
} }
@ -105,39 +110,52 @@ func GetArtworkLockDetail(artworkUid string) (data model.ArtworkLockRecord, err
err = db.DB.Where("artwork_uid = ?", artworkUid).First(&data).Error err = db.DB.Where("artwork_uid = ?", artworkUid).First(&data).Error
return return
} }
func GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (resp *artistInfoArtwork.ArtworkLockList, err error) {
func GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (resp *artistInfoArtwork.ArtworkLockList, err error) {
var ( var (
datas = []model.ArtworkLockRecord{} datas = []model.ArtworkLockRecord{}
tx = db.DB.Model(model.ArtworkLockRecord{}).Where("artist_uid = ?", req.ArtistUid).Order("lock_time desc") tx = db.DB.Model(model.ArtworkLockRecord{}).Order("lock_time desc")
) )
resp = &artistInfoArtwork.ArtworkLockList{} resp = &artistInfoArtwork.ArtworkLockList{}
if req.ArtistUid != "" {
tx = tx.Where("artist_uid = ?", req.ArtistUid)
}
switch req.QueryType { switch req.QueryType {
case artistInfoArtwork.ArtworkQueryMode_NowPreSaveArtwork: //当前暂存的画作 case artistInfoArtwork.ArtworkQueryMode_NowPreSaveArtwork: //当前暂存的画作
tx = tx.Where("status = 1") tx = tx.Where("status = 1")
case artistInfoArtwork.ArtworkQueryMode_NowLockedArtwork: //当前已锁定的画作 case artistInfoArtwork.ArtworkQueryMode_NowLockedArtwork: //当前已锁定的画作
tx = tx.Where("status = 2", req.ArtistUid) tx = tx.Where("status = 2")
case artistInfoArtwork.ArtworkQueryMode_ArtistCanSee: //画家能看到的画作(暂存和锁定) //弃用,画家看到的是暂存的画作 case artistInfoArtwork.ArtworkQueryMode_NowPreSaveAndLocked: //当前暂存和已锁定的画作(也就是用户端画作管理中的数据)
tx = tx.Where("status < 3") tx = tx.Where("status =1 OR status =2")
case artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfBase: //当前处于基本信息审批阶段的画作(包括进入其它流程的画作)
tx = tx.Where("status = 2") // AND audit_flow_index = 2
case artistInfoArtwork.ArtworkQueryMode_NowAuditFlowOfSupplementing: //当前处于补充信息审批阶段的画作
tx = tx.Where("status =2 AND audit_flow_index = 3")
case artistInfoArtwork.ArtworkQueryMode_AllUnlockArtwork: //所有已解锁的画作(历史画作) case artistInfoArtwork.ArtworkQueryMode_AllUnlockArtwork: //所有已解锁的画作(历史画作)
tx = tx.Where("status = 3 OR status = 2") tx = tx.Where("status = 3 OR status = 2")
//case artistInfoArtwork.ArtworkQueryMode_AllHistoryArtwork: //所有历史画作 //case artistInfoArtwork.ArtworkQueryMode_AllHistoryArtwork: //所有历史画作
// tx = tx.Where("status > 1") // tx = tx.Where("status > 1")
} }
if req.AuditStatus != 0 {
tx = tx.Where("audit_status = ?", req.AuditStatus)
}
err = tx.Find(&datas).Error err = tx.Find(&datas).Error
for _, v := range datas { for _, v := range datas {
resp.Data = append(resp.Data, &artistInfoArtwork.ArtistLockInfo{ resp.Data = append(resp.Data, &artistInfoArtwork.ArtistLockInfo{
ArtistUid: v.ArtistUid, ArtistUid: v.ArtistUid,
ArtworkUid: v.ArtworkUid, ArtworkUid: v.ArtworkUid,
Status: v.Status, Status: v.Status,
LockTime: v.LockTime, LockTime: v.LockTime,
AuditStatus: v.AuditStatus, BaseAuditStatus: int32(v.BaseAuditStatus),
AuditMark: v.AuditMark, BaseAuditMark: v.BaseAuditMark,
AuditMark2: v.AuditMark2, BaseAuditMark2: v.BaseAuditMark2,
CreatedAt: v.CreatedAt.Unix(), SupplementAuditStatus: int32(v.SupplementAuditStatus),
UpdatedAt: v.UpdatedAt.Unix(), SupplementAuditMark: v.SupplementAuditMark,
DeletedAt: int64(v.DeletedAt), SupplementAuditMark2: v.SupplementAuditMark2,
AuditFlowIndex: int32(v.AuditFlowIndex),
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
}) })
} }
return return
@ -152,7 +170,9 @@ func HasBeenLocked(artistUid string) bool {
return false return false
} }
func UpdateAuditStatus(artworkUid string, auditStatus int64, remark1 string, remark2 string) error { // UpdateAuditStatus 更新审批状态
// flowIndex 2=基本信息审批 3=补充信息审批
func UpdateAuditStatus(artworkUid string, auditStatus int64, remark1 string, remark2 string, flowIndex int64) error {
var thisData model.ArtworkLockRecord var thisData model.ArtworkLockRecord
err := db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid = ?", artworkUid).First(&thisData).Error err := db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid = ?", artworkUid).First(&thisData).Error
if err != nil { if err != nil {
@ -162,8 +182,39 @@ func UpdateAuditStatus(artworkUid string, auditStatus int64, remark1 string, rem
return err return err
} }
} }
thisData.AuditStatus = auditStatus switch flowIndex {
thisData.AuditMark = remark1 case 2:
thisData.AuditMark2 = remark2 thisData.BaseAuditStatus = model.AuditStatus(auditStatus)
thisData.BaseAuditMark = remark1
thisData.BaseAuditMark2 = remark2
case 3:
thisData.SupplementAuditStatus = model.AuditStatus(auditStatus)
thisData.SupplementAuditMark = remark1
thisData.SupplementAuditMark2 = remark2
}
return db.DB.Save(&thisData).Error return db.DB.Save(&thisData).Error
} }
func BatchUpdateAuditStatus(artworkUids []string, auditStatus int64, remark1 string, remark2 string, flowIndex int64) error {
for _, uid := range artworkUids {
if err := UpdateAuditStatus(uid, auditStatus, remark1, remark2, flowIndex); err != nil {
return err
}
}
return nil
}
func GenerateArtworkSupplementInfo(artworkUids []string) error {
var datas = []model.ArtworkLockRecord{}
db.DB.Where("artwork_uid in ?", artworkUids).Find(&datas)
for _, v := range datas {
if v.BaseAuditStatus != 4 {
return errors.New("存在基本信息未审批通过的画作,操作取消!")
}
}
var updateData = map[string]any{
"audit_flow_index": 3,
"supplement_audit_status": 5,
}
return db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid in ?", artworkUids).Updates(&updateData).Error
}

View File

@ -2,6 +2,11 @@ package dao
import ( import (
"errors" "errors"
<<<<<<< HEAD
=======
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"time"
>>>>>>> xjjdev
"github.com/fonchain/fonchain-artistinfo/cmd/model" "github.com/fonchain/fonchain-artistinfo/cmd/model"
db "github.com/fonchain/fonchain-artistinfo/pkg/db" db "github.com/fonchain/fonchain-artistinfo/pkg/db"
@ -11,9 +16,15 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
) )
<<<<<<< HEAD
func GetMgmtContractByArtistUid(artistUid string, contractType int32) (err error) { func GetMgmtContractByArtistUid(artistUid string, contractType int32) (err error) {
var contract model.Contract var contract model.Contract
if err = db.DB.Where("artist_uid = ? AND type = ?", artistUid, contractType).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound { if err = db.DB.Where("artist_uid = ? AND type = ?", artistUid, contractType).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound {
=======
func FinishContract(id string) (err error) {
var contracts old.Contract
if err = db.DB.Where("transaction_id = ?", id).First(&contracts).Error; err != nil {
>>>>>>> xjjdev
zap.L().Error("get contract info err", zap.Error(err)) zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
return return
@ -28,6 +39,7 @@ func CreateArtistContract(tx *gorm.DB, contract *model.Contract) (err error) {
err = errors.New(m.CREATE_ERROR) err = errors.New(m.CREATE_ERROR)
return return
} }
<<<<<<< HEAD
return return
} }
@ -35,6 +47,122 @@ func GetMgmtContractByArtworkUid(artworkUid string, artworkType int32) (err erro
//画作有合同类型是26的都是 点击过"著作权代理转让服务合同"的 //画作有合同类型是26的都是 点击过"著作权代理转让服务合同"的
var contract model.Contract var contract model.Contract
if err = db.DB.Where("artwork_uid = ? AND type = ?", artworkUid, 2).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound { if err = db.DB.Where("artwork_uid = ? AND type = ?", artworkUid, 2).First(&contract).Error; err != nil && err != gorm.ErrRecordNotFound {
=======
// todo
//var realName model.RealName
//if err = db.DB.Where("id = ? ", user.RealNameID).First(&realName).Error; err != nil {
// zap.L().Error("get realName info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
//}
var args []interface{}
var sqlWhere = "user_id = ? and type !=4 "
args = append(args, req.ID)
if req.State != 0 {
sqlWhere += " and state = ? "
if req.State == 2 {
req.State = 3
}
args = append(args, req.State)
}
var contractModel []old.Contract
if err = db.DB.Where(sqlWhere, args...).Find(&contractModel).Error; err != nil {
zap.L().Error("get contractModels info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
for _, v := range contractModel {
contract := &contract.ContractData{}
contract.ID = uint64(v.ID)
contract.ContractId = v.ContractId
contract.DownloadUrl = v.DownloadUrl
contract.MgmtUserId = v.MgmtUserId
contract.State = int64(v.State)
contract.TransactionId = v.TransactionId
contract.Type = int64(v.Type)
contract.UserId = int64(v.UserId)
contract.ViewUrl = v.ViewUrl
contract.ExpirationTime = v.CreatedAt.Add(86400 * time.Second).Format("2006-01-02 15:04:05")
contract.SignTime = v.UpdatedAt.Format("2006-01-02")
Data = append(Data, contract)
}
rep.Data = Data
return
}
func ContractTxList(req *contract.ContractTxListRequest) (rep *contract.ContractTxListRespond, err error) {
rep = &contract.ContractTxListRespond{}
var Data []*contract.ContractData
var user model.User
if err = db.DB.Where("id = ? ", int32(req.ID)).First(&user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
// todo
//var realName model.RealName
//if err = db.DB.Where("id = ? ", user.RealNameID).First(&realName).Error; err != nil {
// zap.L().Error("get realName info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
//}
//
//var args []interface{}
//var sqlWhere = " card_id = ? and (type = 4 or type = 7) "
//args = append(args, realName.IDNum)
//if req.State != 0 {
// sqlWhere += " and state = ? "
// args = append(args, req.State)
//}
//
//var contractModel []model.Contract
//if err = db.DB.Where(sqlWhere, args...).Find(&contractModel).Error; err != nil {
// zap.L().Error("get contractModels info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return
//}
//
//for _, v := range contractModel {
// contractTmp := &contract.ContractData{}
// contractTmp.ID = uint64(v.ID)
// contractTmp.ContractId = v.ContractId
// contractTmp.DownloadUrl = v.DownloadUrl
// contractTmp.MgmtUserId = v.MgmtUserId
// contractTmp.State = int64(v.State)
// contractTmp.TransactionId = v.TransactionId
// contractTmp.Type = int64(v.Type)
// var b string
// if v.Type == 4 {
// b = "物权"
// }
// if v.Type == 7 {
// b = "版权"
// }
// contractTmp.BatchName = b + v.BatchName[0:4] + "年" + v.BatchName[4:6] + "月" + v.BatchName[6:11] + "年" + v.BatchName[11:13] + "月"
// contractTmp.UserId = int64(v.UserId)
// contractTmp.ViewUrl = v.ViewUrl
// contractTmp.ExpirationTime = v.CreatedAt.Add(86400 * time.Second).Format("2006-01-02 15:04:05")
// contractTmp.SignTime = v.UpdatedAt.Format("2006-01-02")
// Data = append(Data, contractTmp)
//}
rep.Data = Data
return
}
func GetContract(id int32) (rep *contract.ContractData, err error) {
var con old.Contract
if err = db.DB.Where("id = ? ", id).First(&con).Error; err != nil {
>>>>>>> xjjdev
zap.L().Error("get contract info err", zap.Error(err)) zap.L().Error("get contract info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
return return
@ -65,6 +193,7 @@ func CreateArtworkContract(tx *gorm.DB, artworkUid string, artistUid string, con
return return
} }
<<<<<<< HEAD
// func FinishContract(tx *gorm.DB, id string) (contract model.Contract, err error) { // func FinishContract(tx *gorm.DB, id string) (contract model.Contract, err error) {
// if err = tx.Where("transaction_id = ?", id).First(&contract).Error; err != nil { // if err = tx.Where("transaction_id = ?", id).First(&contract).Error; err != nil {
// zap.L().Error("get contract info err", zap.Error(err)) // zap.L().Error("get contract info err", zap.Error(err))
@ -274,3 +403,27 @@ func CreateArtworkContract(tx *gorm.DB, artworkUid string, artistUid string, con
// } // }
// return // return
// } // }
=======
// 更新交易id
func UpdateContract(req *contract.UpdateContractRequest) error {
//数据库操作异常
var con old.Contract
if err := db.DB.Model(&con).Updates(&old.Contract{ContractId: req.ContractId, ViewUrl: req.ViewUrl, DownloadUrl: req.DownloadUrl}).Error; err != nil {
return err
}
return nil
}
// 更新交易id
func UpdateContractTx(txId string, contractId int32) (err error) {
var con old.Contract
con.ID = contractId
if err = db.DB.Model(&con).Update("transaction_id", txId).Error; err != nil {
return
}
if err = db.DB.Model(&con).Update("state", 1).Error; err != nil {
return
}
return
}
>>>>>>> xjjdev

View File

@ -1,398 +1,388 @@
package dao package dao
import ( //
"encoding/json" //func GetSupplyInfoList(id, num int32) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
"errors" // rep = &supplyinfo.GetSupplyInfoListRespond{}
// var datas []*supplyinfo.GetSupplyInfoData
"github.com/fonchain/fonchain-artistinfo/cmd/model" //
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo" // var supplyInfoList []model.SupplyInfo
db "github.com/fonchain/fonchain-artistinfo/pkg/db" // if err := db.DB.Where("user_id = ? and types <= ?", id, num).Find(&supplyInfoList).Error; err != nil {
"github.com/fonchain/fonchain-artistinfo/pkg/m" // zap.L().Error("get supplyInfo infos err", zap.Error(err))
"go.uber.org/zap" // err = errors.New(m.ERROR_SELECT)
) // return nil, err
// }
func GetSupplyInfoList(id, num int32) (rep *supplyinfo.GetSupplyInfoListRespond, err error) { //
rep = &supplyinfo.GetSupplyInfoListRespond{} // for i, v := range supplyInfoList {
var datas []*supplyinfo.GetSupplyInfoData // supplyInfoList[i].CreateTime = v.CreatedAt.Format("2006-01-02")
// data := &supplyinfo.GetSupplyInfoData{}
var supplyInfoList []model.SupplyInfo // data.ID = uint64(supplyInfoList[i].ID)
if err := db.DB.Where("user_id = ? and types <= ?", id, num).Find(&supplyInfoList).Error; err != nil { // data.ArtworkId = supplyInfoList[i].ArtworkId
zap.L().Error("get supplyInfo infos err", zap.Error(err)) // data.ArtistId = supplyInfoList[i].ArtistId
err = errors.New(m.ERROR_SELECT) // data.UserId = uint64(supplyInfoList[i].UserId)
return nil, err // data.Name = supplyInfoList[i].Name
} // data.ModelYear = supplyInfoList[i].ModelYear
// data.Photo = supplyInfoList[i].Photo
for i, v := range supplyInfoList { // data.ArtistPhoto = supplyInfoList[i].ArtistPhoto
supplyInfoList[i].CreateTime = v.CreatedAt.Format("2006-01-02") // data.Width = uint64(supplyInfoList[i].Width)
data := &supplyinfo.GetSupplyInfoData{} // data.Height = uint64(supplyInfoList[i].Height)
data.ID = uint64(supplyInfoList[i].ID) // data.Ruler = uint64(supplyInfoList[i].Ruler)
data.ArtworkId = supplyInfoList[i].ArtworkId // data.ExhibitInfo = supplyInfoList[i].ExhibitInfo
data.ArtistId = supplyInfoList[i].ArtistId // data.ExhibitPic1 = supplyInfoList[i].ExhibitPic1
data.UserId = uint64(supplyInfoList[i].UserId) // data.ExhibitPic2 = supplyInfoList[i].ExhibitPic2
data.Name = supplyInfoList[i].Name // data.CreateTime = supplyInfoList[i].CreateTime
data.ModelYear = supplyInfoList[i].ModelYear // data.Introduct = supplyInfoList[i].Introduct
data.Photo = supplyInfoList[i].Photo // data.NetworkTrace = supplyInfoList[i].NetworkTrace
data.ArtistPhoto = supplyInfoList[i].ArtistPhoto // data.CreateAddress = supplyInfoList[i].CreateAddress
data.Width = uint64(supplyInfoList[i].Width) // data.Url = supplyInfoList[i].Url
data.Height = uint64(supplyInfoList[i].Height) // data.Types = supplyInfoList[i].State
data.Ruler = uint64(supplyInfoList[i].Ruler) // data.Remark = supplyInfoList[i].Remark
data.ExhibitInfo = supplyInfoList[i].ExhibitInfo // data.Remark2 = supplyInfoList[i].Remark2
data.ExhibitPic1 = supplyInfoList[i].ExhibitPic1 // data.Enable = supplyInfoList[i].Enable
data.ExhibitPic2 = supplyInfoList[i].ExhibitPic2 // datas = append(datas, data)
data.CreateTime = supplyInfoList[i].CreateTime // }
data.Introduct = supplyInfoList[i].Introduct // rep.Data = datas
data.NetworkTrace = supplyInfoList[i].NetworkTrace //
data.CreateAddress = supplyInfoList[i].CreateAddress // return
data.Url = supplyInfoList[i].Url //}
data.Types = supplyInfoList[i].State //
data.Remark = supplyInfoList[i].Remark //func GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
data.Remark2 = supplyInfoList[i].Remark2 // rep = &supplyinfo.GetSupplyInfoData{}
data.Enable = supplyInfoList[i].Enable //
datas = append(datas, data) // var supplyInfoTmp model.SupplyInfo
} // if err := db.DB.Where("id = ?", req.Id).Find(&supplyInfoTmp).Error; err != nil {
rep.Data = datas // zap.L().Error("get supplyInfo infos err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
// rep.ID = uint64(supplyInfoTmp.ID)
func GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) { // rep.ArtworkId = supplyInfoTmp.ArtworkId
rep = &supplyinfo.GetSupplyInfoData{} // rep.ArtistId = supplyInfoTmp.ArtistId
// rep.UserId = uint64(supplyInfoTmp.UserId)
var supplyInfoTmp model.SupplyInfo // rep.Name = supplyInfoTmp.Name
if err := db.DB.Where("id = ?", req.Id).Find(&supplyInfoTmp).Error; err != nil { // rep.ModelYear = supplyInfoTmp.ModelYear
zap.L().Error("get supplyInfo infos err", zap.Error(err)) // rep.Photo = supplyInfoTmp.Photo
err = errors.New(m.ERROR_SELECT) // rep.ArtistPhoto = supplyInfoTmp.ArtistPhoto
return nil, err // rep.Width = uint64(supplyInfoTmp.Width)
} // rep.Height = uint64(supplyInfoTmp.Height)
rep.ID = uint64(supplyInfoTmp.ID) // rep.Ruler = uint64(supplyInfoTmp.Ruler)
rep.ArtworkId = supplyInfoTmp.ArtworkId // rep.ExhibitInfo = supplyInfoTmp.ExhibitInfo
rep.ArtistId = supplyInfoTmp.ArtistId // rep.ExhibitPic1 = supplyInfoTmp.ExhibitPic1
rep.UserId = uint64(supplyInfoTmp.UserId) // rep.ExhibitPic2 = supplyInfoTmp.ExhibitPic2
rep.Name = supplyInfoTmp.Name // rep.CreateTime = supplyInfoTmp.CreateTime
rep.ModelYear = supplyInfoTmp.ModelYear // rep.Introduct = supplyInfoTmp.Introduct
rep.Photo = supplyInfoTmp.Photo // rep.NetworkTrace = supplyInfoTmp.NetworkTrace
rep.ArtistPhoto = supplyInfoTmp.ArtistPhoto // rep.CreateAddress = supplyInfoTmp.CreateAddress
rep.Width = uint64(supplyInfoTmp.Width) // rep.Url = supplyInfoTmp.Url
rep.Height = uint64(supplyInfoTmp.Height) // rep.Types = supplyInfoTmp.State
rep.Ruler = uint64(supplyInfoTmp.Ruler) // rep.Remark = supplyInfoTmp.Remark
rep.ExhibitInfo = supplyInfoTmp.ExhibitInfo // rep.Remark2 = supplyInfoTmp.Remark2
rep.ExhibitPic1 = supplyInfoTmp.ExhibitPic1 // rep.Enable = supplyInfoTmp.Enable
rep.ExhibitPic2 = supplyInfoTmp.ExhibitPic2 //
rep.CreateTime = supplyInfoTmp.CreateTime // return
rep.Introduct = supplyInfoTmp.Introduct //}
rep.NetworkTrace = supplyInfoTmp.NetworkTrace //
rep.CreateAddress = supplyInfoTmp.CreateAddress //func UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
rep.Url = supplyInfoTmp.Url // var SupplyInfo model.SupplyInfo
rep.Types = supplyInfoTmp.State // if err := db.DB.Where("id = ? ", req.ID).Find(&SupplyInfo).Error; err != nil {
rep.Remark = supplyInfoTmp.Remark // zap.L().Error("get supplyInfo info err", zap.Error(err))
rep.Remark2 = supplyInfoTmp.Remark2 // err = errors.New(m.ERROR_SELECT)
rep.Enable = supplyInfoTmp.Enable // return nil, err
// }
return //
} // SupplyInfo.CreateTime = req.CreateTime
// SupplyInfo.ModelYear = req.ModelYear
func UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) { // SupplyInfo.NetworkTrace = req.NetworkTrace
var SupplyInfo model.SupplyInfo // SupplyInfo.Url = req.Url
if err := db.DB.Where("id = ? ", req.ID).Find(&SupplyInfo).Error; err != nil { // SupplyInfo.Introduct = req.Introduct
zap.L().Error("get supplyInfo info err", zap.Error(err)) // SupplyInfo.State = req.Types
err = errors.New(m.ERROR_SELECT) // SupplyInfo.ExhibitInfo = req.ExhibitInfo
return nil, err // SupplyInfo.ExhibitPic1 = req.ExhibitPic1
} // SupplyInfo.ExhibitPic2 = req.ExhibitPic2
//
SupplyInfo.CreateTime = req.CreateTime // if err = db.DB.Save(&SupplyInfo).Error; err != nil {
SupplyInfo.ModelYear = req.ModelYear // zap.L().Error("save supplyInfo info err", zap.Error(err))
SupplyInfo.NetworkTrace = req.NetworkTrace // err = errors.New(m.SAVE_ERROR)
SupplyInfo.Url = req.Url // return
SupplyInfo.Introduct = req.Introduct // }
SupplyInfo.State = req.Types //
SupplyInfo.ExhibitInfo = req.ExhibitInfo // return
SupplyInfo.ExhibitPic1 = req.ExhibitPic1 //}
SupplyInfo.ExhibitPic2 = req.ExhibitPic2 //
//func GetVideoList(id int32) (rep *supplyinfo.GetVideoListRespond, err error) {
if err = db.DB.Save(&SupplyInfo).Error; err != nil { // rep = &supplyinfo.GetVideoListRespond{}
zap.L().Error("save supplyInfo info err", zap.Error(err)) // var datas []*supplyinfo.GetVideoListData
err = errors.New(m.SAVE_ERROR) //
return // var ExhVideo []model.ExhVideo
} // if err := db.DB.Where("user_id = ? and types <=4", id).Find(&ExhVideo).Error; err != nil {
// zap.L().Error("get exhVideo infos err", zap.Error(err))
return // err = errors.New(m.ERROR_SELECT)
} // return nil, err
// }
func GetVideoList(id int32) (rep *supplyinfo.GetVideoListRespond, err error) { //
rep = &supplyinfo.GetVideoListRespond{} // for _, v := range ExhVideo {
var datas []*supplyinfo.GetVideoListData // var data supplyinfo.GetVideoListData
// data.ID = uint64(v.ID)
var ExhVideo []model.ExhVideo // data.UserId = uint64(v.UserId)
if err := db.DB.Where("user_id = ? and types <=4", id).Find(&ExhVideo).Error; err != nil { // data.Url = v.Url
zap.L().Error("get exhVideo infos err", zap.Error(err)) // data.Types = v.State
err = errors.New(m.ERROR_SELECT) // data.Remark = v.Remark
return nil, err // data.Remark2 = v.Remark2
} // data.Enable = v.Enable
//
for _, v := range ExhVideo { // datas = append(datas, &data)
var data supplyinfo.GetVideoListData // }
data.ID = uint64(v.ID) //
data.UserId = uint64(v.UserId) // rep.Data = datas
data.Url = v.Url //
data.Types = v.State // return
data.Remark = v.Remark //}
data.Remark2 = v.Remark2 //
data.Enable = v.Enable //func GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
// rep = &supplyinfo.GetVideoListData{}
datas = append(datas, &data) //
} // var ExhVideo model.ExhVideo
// if err := db.DB.Where("id = ?", req.ID).First(&ExhVideo).Error; err != nil {
rep.Data = datas // zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
//
func GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) { // rep.ID = uint64(ExhVideo.ID)
rep = &supplyinfo.GetVideoListData{} // rep.UserId = uint64(ExhVideo.UserId)
// rep.Url = ExhVideo.Url
var ExhVideo model.ExhVideo // rep.Types = ExhVideo.State
if err := db.DB.Where("id = ?", req.ID).First(&ExhVideo).Error; err != nil { // rep.Remark = ExhVideo.Remark
zap.L().Error("get exhVideo info err", zap.Error(err)) // rep.Remark2 = ExhVideo.Remark2
err = errors.New(m.ERROR_SELECT) // rep.Enable = ExhVideo.Enable
return nil, err //
} // return
//}
rep.ID = uint64(ExhVideo.ID) //
rep.UserId = uint64(ExhVideo.UserId) //func UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
rep.Url = ExhVideo.Url // rep = &supplyinfo.UpdateVideoRespond{}
rep.Types = ExhVideo.State //
rep.Remark = ExhVideo.Remark // var ExhVideo model.ExhVideo
rep.Remark2 = ExhVideo.Remark2 // if err := db.DB.Where("id = ? ", req.ID).First(&ExhVideo).Error; err != nil {
rep.Enable = ExhVideo.Enable // zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
//
func UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) { // ExhVideo.Url = req.Url
rep = &supplyinfo.UpdateVideoRespond{} // ExhVideo.State = req.Types
//
var ExhVideo model.ExhVideo // if err := db.DB.Save(&ExhVideo).Error; err != nil {
if err := db.DB.Where("id = ? ", req.ID).First(&ExhVideo).Error; err != nil { // zap.L().Error("save exhVideo info err", zap.Error(err))
zap.L().Error("get exhVideo info err", zap.Error(err)) // err = errors.New(m.SAVE_ERROR)
err = errors.New(m.ERROR_SELECT) // return nil, err
return nil, err // }
} //
// return
ExhVideo.Url = req.Url //}
ExhVideo.State = req.Types //
//func GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
if err := db.DB.Save(&ExhVideo).Error; err != nil { // rep = &supplyinfo.GetExamListData{}
zap.L().Error("save exhVideo info err", zap.Error(err)) //
err = errors.New(m.SAVE_ERROR) // var ExhExam model.ExhExam
return nil, err // if err := db.DB.Where("id = ?", req.ID).First(&ExhExam).Error; err != nil {
} // zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
//
func GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) { // rep.ID = uint64(ExhExam.ID)
rep = &supplyinfo.GetExamListData{} // rep.UserId = uint64(ExhExam.UserId)
// rep.Title = ExhExam.Title
var ExhExam model.ExhExam // rep.Class = ExhExam.Class
if err := db.DB.Where("id = ?", req.ID).First(&ExhExam).Error; err != nil { // rep.TitleScore = uint64(ExhExam.TitleScore)
zap.L().Error("get exhVideo info err", zap.Error(err)) // rep.Score = ExhExam.Score
err = errors.New(m.ERROR_SELECT) // rep.Types = ExhExam.State
return nil, err // rep.Remark = ExhExam.Remark
} // rep.Remark2 = ExhExam.Remark2
// rep.Enable = ExhExam.Enable
rep.ID = uint64(ExhExam.ID) // return
rep.UserId = uint64(ExhExam.UserId) //}
rep.Title = ExhExam.Title //
rep.Class = ExhExam.Class //func GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
rep.TitleScore = uint64(ExhExam.TitleScore) // rep = &supplyinfo.GetExamListRespond{}
rep.Score = ExhExam.Score // var datas []*supplyinfo.GetExamListData
rep.Types = ExhExam.State //
rep.Remark = ExhExam.Remark // var ExhExam []model.ExhExam
rep.Remark2 = ExhExam.Remark2 // if err := db.DB.Where("user_id = ? and types <=4", req.ID).Find(&ExhExam).Error; err != nil {
rep.Enable = ExhExam.Enable // zap.L().Error("get exhVideo infos err", zap.Error(err))
return // err = errors.New(m.ERROR_SELECT)
} // return nil, err
// }
func GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) { //
rep = &supplyinfo.GetExamListRespond{} // for _, v := range ExhExam {
var datas []*supplyinfo.GetExamListData // var data supplyinfo.GetExamListData
//
var ExhExam []model.ExhExam // data.ID = uint64(v.ID)
if err := db.DB.Where("user_id = ? and types <=4", req.ID).Find(&ExhExam).Error; err != nil { // data.UserId = uint64(v.UserId)
zap.L().Error("get exhVideo infos err", zap.Error(err)) // data.Title = v.Title
err = errors.New(m.ERROR_SELECT) // data.Class = v.Class
return nil, err // data.TitleScore = uint64(v.TitleScore)
} // data.Score = v.Score
// data.Types = v.State
for _, v := range ExhExam { // data.Remark = v.Remark
var data supplyinfo.GetExamListData // data.Remark2 = v.Remark2
// data.Enable = v.Enable
data.ID = uint64(v.ID) //
data.UserId = uint64(v.UserId) // datas = append(datas, &data)
data.Title = v.Title // }
data.Class = v.Class //
data.TitleScore = uint64(v.TitleScore) // rep.Data = datas
data.Score = v.Score //
data.Types = v.State // return
data.Remark = v.Remark //}
data.Remark2 = v.Remark2 //
data.Enable = v.Enable //func UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
// rep = &supplyinfo.UpdateExamRespond{}
datas = append(datas, &data) //
} // var ExhExam model.ExhExam
// if err := db.DB.Where("id = ? ", req.ID).First(&ExhExam).Error; err != nil {
rep.Data = datas // zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
//
func UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) { // ExhExam.Score = req.Score
rep = &supplyinfo.UpdateExamRespond{} // ExhExam.Class = req.Class
// ExhExam.State = req.Types
var ExhExam model.ExhExam // ExhExam.Title = req.Title
if err := db.DB.Where("id = ? ", req.ID).First(&ExhExam).Error; err != nil { // ExhExam.Class = req.Class
zap.L().Error("get exhVideo info err", zap.Error(err)) // ExhExam.TitleScore = uint(req.TitleScore)
err = errors.New(m.ERROR_SELECT) // ExhExam.Score = req.Score
return nil, err // ExhExam.State = req.Types
} // ExhExam.Remark = req.Remark
// ExhExam.Remark2 = req.Remark2
ExhExam.Score = req.Score //
ExhExam.Class = req.Class // var score map[string]int32
ExhExam.State = req.Types // var titleScore int32
ExhExam.Title = req.Title //
ExhExam.Class = req.Class // json.Unmarshal([]byte(req.Score), &score)
ExhExam.TitleScore = uint(req.TitleScore) //
ExhExam.Score = req.Score // for _, v := range score {
ExhExam.State = req.Types // titleScore = titleScore + v
ExhExam.Remark = req.Remark // }
ExhExam.Remark2 = req.Remark2 //
// ExhExam.TitleScore = uint(titleScore)
var score map[string]int32 //
var titleScore int32 // if err = db.DB.Save(&ExhExam).Error; err != nil {
// zap.L().Error("save supplyInfo info err", zap.Error(err))
json.Unmarshal([]byte(req.Score), &score) // err = errors.New(m.SAVE_ERROR)
// return
for _, v := range score { // }
titleScore = titleScore + v //
} // if req.Types == "2" {
// type titleScore struct {
ExhExam.TitleScore = uint(titleScore) // UserId uint
// Score int
if err = db.DB.Save(&ExhExam).Error; err != nil { // }
zap.L().Error("save supplyInfo info err", zap.Error(err)) //
err = errors.New(m.SAVE_ERROR) // var tmp []model.ExhExam
return // if err = db.DB.Where("class = ?", req.Class).Order("title_score desc").Find(&tmp).Error; err != nil {
} // zap.L().Error("get exhExam infos err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
if req.Types == "2" { // return nil, err
type titleScore struct { // }
UserId uint //
Score int // var ranking int
} // for k, v := range tmp {
// if v.UserId == uint(req.UserId) {
var tmp []model.ExhExam // ranking = k
if err = db.DB.Where("class = ?", req.Class).Order("title_score desc").Find(&tmp).Error; err != nil { // }
zap.L().Error("get exhExam infos err", zap.Error(err)) // }
err = errors.New(m.ERROR_SELECT) //
return nil, err // percent := (ranking + 1) / len(tmp) * 100
} // rep.Percent = int32(percent)
// return
var ranking int // }
for k, v := range tmp { //
if v.UserId == uint(req.UserId) { // return
ranking = k //}
} //
} //func GetArtistInfoList(id int32) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
// rep = &supplyinfo.GetArtistInfoListRespond{}
percent := (ranking + 1) / len(tmp) * 100 // var datas []*supplyinfo.GetArtistInfoListData
rep.Percent = int32(percent) //
return // var artistInfoTmp []old.ArtistInfo
} // if err = db.DB.Where("user_id = ? and state <=4 ", id).Find(&artistInfoTmp).Error; err != nil {
// zap.L().Error("get artistInfo infos err", zap.Error(err))
return // err = errors.New(m.ERROR_SELECT)
} // return nil, err
// }
func GetArtistInfoList(id int32) (rep *supplyinfo.GetArtistInfoListRespond, err error) { //
rep = &supplyinfo.GetArtistInfoListRespond{} // for k, v := range artistInfoTmp {
var datas []*supplyinfo.GetArtistInfoListData // artistInfoTmp[k].Model.ID = v.ID
// data := &supplyinfo.GetArtistInfoListData{}
var artistInfoTmp []model.ArtistInfo //
if err = db.DB.Where("user_id = ? and state <=4 ", id).Find(&artistInfoTmp).Error; err != nil { // data.ID = uint64(artistInfoTmp[k].ID)
zap.L().Error("get artistInfo infos err", zap.Error(err)) // data.UserId = uint64(artistInfoTmp[k].UserId)
err = errors.New(m.ERROR_SELECT) // data.ArtistId = artistInfoTmp[k].ArtistId
return nil, err // data.BankAccount = artistInfoTmp[k].BankAccount
} // data.BankName = artistInfoTmp[k].BankName
// data.Introduct = artistInfoTmp[k].Introduct
for k, v := range artistInfoTmp { // data.CountryArtLevel = artistInfoTmp[k].CountryArtLevel
artistInfoTmp[k].Model.ID = v.ID // data.ArtistCertPic = artistInfoTmp[k].ArtistCertPic
data := &supplyinfo.GetArtistInfoListData{} // data.Remark = artistInfoTmp[k].Remark
// data.Remark2 = artistInfoTmp[k].Remark2
data.ID = uint64(artistInfoTmp[k].ID) // data.State = uint64(artistInfoTmp[k].State)
data.UserId = uint64(artistInfoTmp[k].UserId) //
data.ArtistId = artistInfoTmp[k].ArtistId // datas = append(datas, data)
data.BankAccount = artistInfoTmp[k].BankAccount // }
data.BankName = artistInfoTmp[k].BankName //
data.Introduct = artistInfoTmp[k].Introduct // rep.Data = datas
data.CountryArtLevel = artistInfoTmp[k].CountryArtLevel //
data.ArtistCertPic = artistInfoTmp[k].ArtistCertPic // return
data.Remark = artistInfoTmp[k].Remark //}
data.Remark2 = artistInfoTmp[k].Remark2 //
data.State = uint64(artistInfoTmp[k].State) //func GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
// rep = &supplyinfo.GetArtistInfoListData{}
datas = append(datas, data) //
} // var artistInfoTmp old.ArtistInfo
// if err := db.DB.Where("id = ?", req.ID).Find(&artistInfoTmp).Error; err != nil {
rep.Data = datas // zap.L().Error("get artistInfo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
// rep.ID = uint64(artistInfoTmp.ID)
func GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) { // rep.UserId = uint64(artistInfoTmp.UserId)
rep = &supplyinfo.GetArtistInfoListData{} // rep.ArtistId = artistInfoTmp.ArtistId
// rep.BankAccount = artistInfoTmp.BankAccount
var artistInfoTmp model.ArtistInfo // rep.BankName = artistInfoTmp.BankName
if err := db.DB.Where("id = ?", req.ID).Find(&artistInfoTmp).Error; err != nil { // rep.Introduct = artistInfoTmp.Introduct
zap.L().Error("get artistInfo info err", zap.Error(err)) // rep.CountryArtLevel = artistInfoTmp.CountryArtLevel
err = errors.New(m.ERROR_SELECT) // rep.ArtistCertPic = artistInfoTmp.ArtistCertPic
return nil, err // rep.Remark = artistInfoTmp.Remark
} // rep.Remark2 = artistInfoTmp.Remark2
rep.ID = uint64(artistInfoTmp.ID) // rep.State = uint64(artistInfoTmp.State)
rep.UserId = uint64(artistInfoTmp.UserId) //
rep.ArtistId = artistInfoTmp.ArtistId // return
rep.BankAccount = artistInfoTmp.BankAccount //}
rep.BankName = artistInfoTmp.BankName //
rep.Introduct = artistInfoTmp.Introduct //func UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
rep.CountryArtLevel = artistInfoTmp.CountryArtLevel // rep = &supplyinfo.UpdateArtistInfoRespond{}
rep.ArtistCertPic = artistInfoTmp.ArtistCertPic //
rep.Remark = artistInfoTmp.Remark // var artistInfoTmp old.ArtistInfo
rep.Remark2 = artistInfoTmp.Remark2 // if err := db.DB.Where("id = ? ", req.ID).Find(&artistInfoTmp).Error; err != nil {
rep.State = uint64(artistInfoTmp.State) // zap.L().Error("get artistInfo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
return // return nil, err
} // }
//
func UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) { // artistInfoTmp.BankAccount = req.BankAccount
rep = &supplyinfo.UpdateArtistInfoRespond{} // artistInfoTmp.BankName = req.BankName
// artistInfoTmp.Introduct = req.Introduct
var artistInfoTmp model.ArtistInfo // artistInfoTmp.State = uint(req.State)
if err := db.DB.Where("id = ? ", req.ID).Find(&artistInfoTmp).Error; err != nil { // artistInfoTmp.CountryArtLevel = req.CountryArtLevel
zap.L().Error("get artistInfo info err", zap.Error(err)) // artistInfoTmp.ArtistCertPic = req.ArtistCertPic
err = errors.New(m.ERROR_SELECT) //
return nil, err // if err = db.DB.Save(&artistInfoTmp).Error; err != nil {
} // zap.L().Error("save supplyInfo info err", zap.Error(err))
// err = errors.New(m.SAVE_ERROR)
artistInfoTmp.BankAccount = req.BankAccount // return
artistInfoTmp.BankName = req.BankName // }
artistInfoTmp.Introduct = req.Introduct //
artistInfoTmp.State = uint(req.State) // return
artistInfoTmp.CountryArtLevel = req.CountryArtLevel //}
artistInfoTmp.ArtistCertPic = req.ArtistCertPic
if err = db.DB.Save(&artistInfoTmp).Error; err != nil {
zap.L().Error("save supplyInfo info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return
}
return
}

View File

@ -130,6 +130,7 @@ func (a *ArtistInfoUser) FindUsersUserView(req *artistInfoUser.FindUsersRequest)
DeletedAt: v.DeletedAt, DeletedAt: v.DeletedAt,
UpdatedAt: v.UpdatedAt.Unix(), UpdatedAt: v.UpdatedAt.Unix(),
CreatedAt: v.CreatedAt.Unix(), CreatedAt: v.CreatedAt.Unix(),
LatestLockTime: v.LatestLockTime,
}) })
} }
if artistUidList != nil { if artistUidList != nil {

View File

@ -0,0 +1,143 @@
// Package logic -----------------------------
// @file : artistinfo_artshowVideo.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 11:51
// -------------------------------------------
package logic
import (
"errors"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoUser"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
"google.golang.org/protobuf/types/known/emptypb"
"gorm.io/gorm"
)
type ArtshowArtistIndexLogic struct{}
func (a ArtshowArtistIndexLogic) BatchCreateArtistIndex(request *artistinfoArtshow.BatchCreateArtistIndexRequest) error {
var datas = []model.ArtshowArtistIndex{}
for _, v := range request.ArtistUids {
userInfo, err := NewArtistInfo().FindUser(&artistInfoUser.FindUserRequest{
MgmtArtistUid: v,
IsArtist: true,
})
if err != nil {
return err
}
if userInfo.Id == 0 {
return errors.New(fmt.Sprintf("用户%s不存在", v))
}
datas = append(datas,
//Status=2(锁定) AuditStatus=5(待补充)
model.ArtshowArtistIndex{LockTime: userInfo.LatestLockTime, ArtistUid: v, Class: "exhibition", Title: "艺术家-展览", Types: "2", Status: 2, AuditStatus: 5},
model.ArtshowArtistIndex{LockTime: userInfo.LatestLockTime, ArtistUid: v, Class: "seniority", Title: "艺术家-资历", Types: "1", Status: 2, AuditStatus: 5},
model.ArtshowArtistIndex{LockTime: userInfo.LatestLockTime, ArtistUid: v, Class: "specialized", Title: "艺术家-专业", Types: "1", Status: 2, AuditStatus: 5},
model.ArtshowArtistIndex{LockTime: userInfo.LatestLockTime, ArtistUid: v, Class: "Influence", Title: "艺术家-影响力", Types: "1", Status: 2, AuditStatus: 5},
model.ArtshowArtistIndex{LockTime: userInfo.LatestLockTime, ArtistUid: v, Class: "collect", Title: "艺术家-收藏", Types: "1", Status: 2, AuditStatus: 5},
)
}
return dao.ArtistinfoArtshowArtistIndex.BatchCreateData(datas)
}
func (a ArtshowArtistIndexLogic) CreateArtistIndex(request *artistinfoArtshow.ArtistIndexInfo) error {
return dao.ArtistinfoArtshowArtistIndex.CreateData(&model.ArtshowArtistIndex{
LockTime: request.LockTime,
ArtistUid: request.ArtistUid,
Class: request.Class,
Title: request.Title,
Types: request.Types,
Status: 2,
})
}
func (a ArtshowArtistIndexLogic) GetArtistIndexDetail(request *artistinfoArtshow.GetArtistIndexDetailRequest) (rep *artistinfoArtshow.ArtistIndexInfo, err error) {
data, err := dao.ArtistinfoArtshowArtistIndex.GetData(request.Id)
if err != nil {
if gorm.ErrRecordNotFound == err {
err = errors.New("找不到数据")
}
return nil, err
}
rep = &artistinfoArtshow.ArtistIndexInfo{
ArtistUid: data.ArtistUid,
Title: data.Title,
Class: data.Class,
TitleScore: data.TitleScore,
Score: data.Score,
Types: data.Types,
Status: data.Status,
LockTime: data.LockTime,
AuditMark1: data.AuditMark1,
AuditMark2: data.AuditMark2,
AuditStatus: int64(data.AuditStatus),
Id: data.ID,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt),
Editable: data.Editable(),
}
return
}
func (a ArtshowArtistIndexLogic) GetArtistIndexList(request *artistinfoArtshow.GetArtistIndexListRequest) (res *artistinfoArtshow.GetArtistIndexListResponse, err error) {
res = &artistinfoArtshow.GetArtistIndexListResponse{}
datas, total, err := dao.ArtistinfoArtshowArtistIndex.GetDataList(request)
if err != nil {
return nil, err
}
res.Page = &artistinfoArtshow.VideoPagination{
Page: request.Page,
PageSize: request.PageSize,
Total: total,
}
for _, v := range datas {
res.Data = append(res.Data, &artistinfoArtshow.ArtistIndexInfo{
ArtistUid: v.ArtistUid,
Title: v.Title,
Class: v.Class,
TitleScore: v.TitleScore,
Score: v.Score,
Types: v.Types,
Status: v.Status,
LockTime: v.LockTime,
AuditMark1: v.AuditMark1,
AuditMark2: v.AuditMark2,
AuditStatus: int64(v.AuditStatus),
Id: v.ID,
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
})
}
return
}
func (a ArtshowArtistIndexLogic) AuditArtistIndex(request *artistinfoArtshow.AuditArtistIndexRequest) (*emptypb.Empty, error) {
err := dao.ArtistinfoArtshowArtistIndex.Audit(model.AuditStatus(request.AuditStatus), request.AuditMark1, request.AuditMark2, request.ArtistIndexIds...)
return nil, err
}
func (a ArtshowArtistIndexLogic) UpdateArtistIndex(request *artistinfoArtshow.UpdateArtistIndexRequest) (*emptypb.Empty, error) {
err := dao.ArtistinfoArtshowArtistIndex.UpdateData(&model.ArtshowArtistIndex{
Model: model.Model{ID: request.Id},
TitleScore: request.TitleScore,
Score: request.Score,
AuditStatus: model.AuditType_Pending,
})
return nil, err
}
func (a ArtshowArtistIndexLogic) DeletedArtistIndex(request *artistinfoArtshow.DeletedArtistIndexRequest) (*emptypb.Empty, error) {
var ids = []int64{}
if request.Id != 0 {
ids = append(ids, request.Id)
} else if len(request.Ids) > 0 {
ids = append(ids, request.Ids...)
}
err := dao.ArtistinfoArtshowArtistIndex.DeletedData(ids...)
return nil, err
}

View File

@ -0,0 +1,147 @@
// Package logic -----------------------------
// @file : artistinfo_artshowVideo.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 11:51
// -------------------------------------------
package logic
import (
"errors"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoUser"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
"google.golang.org/protobuf/types/known/emptypb"
"gorm.io/gorm"
)
type ArtshowArtistSupplementLogic struct{}
func (a ArtshowArtistSupplementLogic) BatchCreateSupplement(request *artistinfoArtshow.BatchCreateArtistSupplementRequest) error {
var datas = []model.ArtshowArtistSupplement{}
for _, v := range request.ArtistUids {
userInfo, err := NewArtistInfo().FindUser(&artistInfoUser.FindUserRequest{
MgmtArtistUid: v,
IsArtist: true,
})
if err != nil {
return err
}
if userInfo.Id == 0 {
return errors.New(fmt.Sprintf("用户%s不存在", v))
}
datas = append(datas,
model.ArtshowArtistSupplement{LockTime: userInfo.LatestLockTime, ArtistUid: v, ArtistName: userInfo.RealName.Name, Status: 2, AuditStatus: 5},
)
}
return dao.ArtistSupplement.BatchCreateData(datas)
}
func (a ArtshowArtistSupplementLogic) CreateSupplement(request *artistinfoArtshow.ArtistSupplementInfo) error {
return dao.ArtistSupplement.CreateData(&model.ArtshowArtistSupplement{
ArtistUid: request.ArtistUid,
Status: 2, //锁定
AuditStatus: 5, //待补充
LockTime: request.LockTime,
ArtistName: request.ArtistName,
ArtistProfile: request.ArtistProfile,
CountryArtLevel: request.CountryArtLevel,
ArtistCertPic: request.ArtistCertPic,
BankNum: request.BankNum,
BankName: request.BankName,
})
}
func (a ArtshowArtistSupplementLogic) GetSupplementDetail(request *artistinfoArtshow.GetArtistSupplementDetailRequest) (rep *artistinfoArtshow.ArtistSupplementInfo, err error) {
data, err := dao.ArtistSupplement.GetData(request.Id)
if err != nil {
if gorm.ErrRecordNotFound == err {
err = errors.New("找不到数据")
}
return nil, err
}
rep = &artistinfoArtshow.ArtistSupplementInfo{
ArtistUid: data.ArtistUid,
Status: data.Status,
LockTime: data.LockTime,
AuditStatus: int64(data.AuditStatus),
AuditMark1: data.AuditMark1,
AuditMark2: data.AuditMark2,
ArtistName: data.ArtistName,
ArtistProfile: data.ArtistProfile,
CountryArtLevel: data.CountryArtLevel,
ArtistCertPic: data.ArtistCertPic,
BankNum: data.BankNum,
BankName: data.BankName,
Id: data.ID,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt),
Editable: data.Editable(),
}
return
}
func (a ArtshowArtistSupplementLogic) GetSupplementList(request *artistinfoArtshow.GetArtistSupplementListRequest) (res *artistinfoArtshow.GetArtistSupplementListResponse, err error) {
res = &artistinfoArtshow.GetArtistSupplementListResponse{}
datas, total, err := dao.ArtistSupplement.GetDataList(request)
if err != nil {
return nil, err
}
res.Page = &artistinfoArtshow.VideoPagination{
Page: request.Page,
PageSize: request.PageSize,
Total: total,
}
for _, v := range datas {
res.Data = append(res.Data, &artistinfoArtshow.ArtistSupplementInfo{
ArtistUid: v.ArtistUid,
ArtistName: v.ArtistName,
ArtistProfile: v.ArtistProfile,
CountryArtLevel: v.CountryArtLevel,
ArtistCertPic: v.ArtistCertPic,
BankNum: v.BankNum,
BankName: v.BankName,
Status: v.Status,
LockTime: v.LockTime,
AuditMark1: v.AuditMark1,
AuditMark2: v.AuditMark2,
AuditStatus: int64(v.AuditStatus),
Id: v.ID,
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
})
}
return
}
func (a ArtshowArtistSupplementLogic) AuditSupplement(request *artistinfoArtshow.AuditArtistSupplementRequest) (*emptypb.Empty, error) {
err := dao.ArtistSupplement.Audit(model.AuditStatus(request.AuditStatus), request.AuditMark1, request.AuditMark2, request.ArtistSupplementIds...)
return nil, err
}
func (a ArtshowArtistSupplementLogic) UpdateSupplement(request *artistinfoArtshow.UpdateArtistSupplementRequest) (*emptypb.Empty, error) {
err := dao.ArtistSupplement.UpdateData(&model.ArtshowArtistSupplement{
Model: model.Model{ID: request.Id},
ArtistProfile: request.ArtistProfile,
CountryArtLevel: request.CountryArtLevel,
ArtistCertPic: request.ArtistCertPic,
BankNum: request.BankNum,
BankName: request.BankName,
AuditStatus: model.AuditType_Pending,
})
return nil, err
}
func (a ArtshowArtistSupplementLogic) DeletedSupplement(request *artistinfoArtshow.DeletedArtistSupplementRequest) (*emptypb.Empty, error) {
var ids = []int64{}
if request.Id != 0 {
ids = append(ids, request.Id)
} else if len(request.Ids) > 0 {
ids = append(ids, request.Ids...)
}
err := dao.ArtistSupplement.DeletedData(ids...)
return nil, err
}

View File

@ -0,0 +1,132 @@
// Package logic -----------------------------
// @file : artistinfo_artshowVideo.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 11:51
// -------------------------------------------
package logic
import (
"errors"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/artistinfoArtshow"
"google.golang.org/protobuf/types/known/emptypb"
"gorm.io/gorm"
)
type ArtshowVideoLogic struct{}
func (a ArtshowVideoLogic) BatchCreateArtshowVideo(request *artistinfoArtshow.BatchCreateArtshowVideoRequest) error {
var datas = []model.ArtshowVideoRecord{}
for _, v := range request.Data {
datas = append(datas, model.ArtshowVideoRecord{
ArtistUid: v.ArtistUid,
LockTime: v.LockTime,
ArtistName: v.ArtistName,
VideoUrl: v.VideoUrl,
AuditStatus: model.AuditStatus(v.AuditStatus),
AuditMark1: v.AuditMark1,
AuditMark2: v.AuditMark2,
Status: v.Status,
})
}
return dao.ArtistinfoArtshowVideo.BatchCreateData(datas)
}
func (a ArtshowVideoLogic) CreateArtshowVideo(request *artistinfoArtshow.ArtshowVideoInfo) error {
return dao.ArtistinfoArtshowVideo.CreateData(&model.ArtshowVideoRecord{
ArtistUid: request.ArtistUid,
LockTime: request.LockTime,
ArtistName: request.ArtistName,
VideoUrl: request.VideoUrl,
AuditStatus: model.AuditStatus(request.AuditStatus),
AuditMark1: request.AuditMark1,
AuditMark2: request.AuditMark2,
Status: request.Status,
})
}
func (a ArtshowVideoLogic) GetArtshowVideoDetail(request *artistinfoArtshow.GetArtshowVideoDetailRequest) (rep *artistinfoArtshow.ArtshowVideoInfo, err error) {
data, err := dao.ArtistinfoArtshowVideo.GetArtshowVideoDetail(request)
if err != nil {
if gorm.ErrRecordNotFound == err {
err = errors.New("找不到数据")
}
return nil, err
}
rep = &artistinfoArtshow.ArtshowVideoInfo{
Id: data.ID,
ArtistUid: data.ArtistUid,
LockTime: data.LockTime,
VideoUrl: data.VideoUrl,
AuditStatus: int64(data.AuditStatus),
AuditMark1: data.AuditMark1,
AuditMark2: data.AuditMark2,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt),
ArtistName: data.ArtistName,
Status: data.Status,
Editable: data.Editable(),
}
return
}
func (a ArtshowVideoLogic) GetArtshowVideoList(request *artistinfoArtshow.GetArtshowVideoListRequst) (res *artistinfoArtshow.GetArtshowVideoListResponse, err error) {
res = &artistinfoArtshow.GetArtshowVideoListResponse{}
datas, total, err := dao.ArtistinfoArtshowVideo.GetDataList(request)
if err != nil {
return nil, err
}
res.Page = &artistinfoArtshow.VideoPagination{
Page: request.Page,
PageSize: request.PageSize,
Total: total,
}
for _, v := range datas {
res.Data = append(res.Data, &artistinfoArtshow.ArtshowVideoInfo{
Id: v.ID,
ArtistUid: v.ArtistUid,
LockTime: v.LockTime,
VideoUrl: v.VideoUrl,
AuditStatus: int64(v.AuditStatus),
AuditMark1: v.AuditMark1,
AuditMark2: v.AuditMark2,
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
Status: v.Status,
ArtistName: v.ArtistName,
})
}
return
}
func (a ArtshowVideoLogic) AuditArtshowVideo(request *artistinfoArtshow.AuditArtshowVideoRequest) (*emptypb.Empty, error) {
err := dao.ArtistinfoArtshowVideo.Audit(model.AuditStatus(request.AuditStatus), request.AuditMark1, request.AuditMark2, request.ArtshowVideoIds...)
return nil, err
}
func (a ArtshowVideoLogic) UpdateArtshowVideo(request *artistinfoArtshow.UpdateArtshowVideoRequest) (*emptypb.Empty, error) {
err := dao.ArtistinfoArtshowVideo.UpdateData(&model.ArtshowVideoRecord{
Model: model.Model{ID: request.Id},
ArtistUid: request.ArtistUid,
LockTime: request.LockTime,
ArtistName: request.ArtistName,
VideoUrl: request.VideoUrl,
AuditStatus: model.AuditStatus(request.AuditStatus),
AuditMark1: request.AuditMark1,
AuditMark2: request.AuditMark2,
})
return nil, err
}
func (a ArtshowVideoLogic) DeletedArtshowVideo(request *artistinfoArtshow.DeletedArtshowVideoRequest) (*emptypb.Empty, error) {
var ids = []int64{}
if request.Id != 0 {
ids = append(ids, request.Id)
} else if len(request.Ids) > 0 {
ids = append(ids, request.Ids...)
}
err := dao.ArtistinfoArtshowVideo.DeletedData(ids...)
return nil, err
}

View File

@ -15,6 +15,7 @@ import (
"github.com/fonchain/fonchain-artistinfo/pb/artwork_query" "github.com/fonchain/fonchain-artistinfo/pb/artwork_query"
"github.com/fonchain/fonchain-artistinfo/pkg/m" "github.com/fonchain/fonchain-artistinfo/pkg/m"
"github.com/fonchain/fonchain-artistinfo/pkg/service" "github.com/fonchain/fonchain-artistinfo/pkg/service"
"google.golang.org/protobuf/types/known/emptypb"
"strings" "strings"
) )
@ -37,13 +38,22 @@ func (a ArtistInfoArtworkLogic) GetArtworkLockDetail(request *artistInfoArtwork.
return return
} }
res = &artistInfoArtwork.ArtistLockInfo{ res = &artistInfoArtwork.ArtistLockInfo{
ArtistUid: data.ArtistUid, ArtistUid: data.ArtistUid,
ArtworkUid: data.ArtworkUid, ArtworkUid: data.ArtworkUid,
Status: data.Status, Status: data.Status,
LockTime: data.LockTime, LockTime: data.LockTime,
CreatedAt: data.CreatedAt.Unix(), CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(), UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt), DeletedAt: int64(data.DeletedAt),
BaseAuditStatus: int32(data.BaseAuditStatus),
BaseAuditMark: data.BaseAuditMark,
BaseAuditMark2: data.BaseAuditMark2,
SupplementAuditStatus: int32(data.SupplementAuditStatus),
SupplementAuditMark: data.SupplementAuditMark,
SupplementAuditMark2: data.SupplementAuditMark2,
AuditFlowIndex: int32(data.AuditFlowIndex),
BaseEditable: data.BaseEditable(),
SupplementEditable: data.SupplementEditable(),
} }
return return
} }
@ -60,7 +70,7 @@ func (ArtistInfoArtworkLogic) CreateArtworkLockRecord(req *artistInfoArtwork.Cre
func (ArtistInfoArtworkLogic) ArtworkLockAction(req *artistInfoArtwork.ArtworkLockActionRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) { func (ArtistInfoArtworkLogic) ArtworkLockAction(req *artistInfoArtwork.ArtworkLockActionRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
switch req.Lock { switch req.Lock {
case 2: case 2:
err = dao.BatchLockArtworks(req.ArtistUid) err = dao.BatchLockArtworks(req.ArtistUid, req.LockTime)
case 3: case 3:
err = dao.BatchUnlockArtworks(req.ArtistUid) err = dao.BatchUnlockArtworks(req.ArtistUid)
default: default:
@ -118,23 +128,27 @@ func (a ArtistInfoArtworkLogic) GetArtworkLockHistoryGroup(request *artistInfoAr
} }
for _, artwork := range previewListRes.Data { for _, artwork := range previewListRes.Data {
res.GroupList[groupIndex].DataList = append(res.GroupList[groupIndex].DataList, &artistInfoArtwork.ArtworkPreviewInfo{ res.GroupList[groupIndex].DataList = append(res.GroupList[groupIndex].DataList, &artistInfoArtwork.ArtworkPreviewInfo{
ArtistUuid: artwork.ArtistUuid, ArtistUuid: artwork.ArtistUuid,
ArtworkName: artwork.ArtworkName, ArtworkName: artwork.ArtworkName,
Length: artwork.Length, Length: artwork.Length,
Width: artwork.Width, Width: artwork.Width,
Ruler: artwork.Ruler, Ruler: artwork.Ruler,
CreatedAddress: strings.Split(artwork.CreatedAddress, ""), CreatedAddress: strings.Split(artwork.CreatedAddress, ""),
ArtistPhoto: artwork.ArtistPhoto, ArtistPhoto: artwork.ArtistPhoto,
HdPic: artwork.HdPic, HdPic: artwork.HdPic,
ArtworkUid: artwork.ArtworkUid, ArtworkUid: artwork.ArtworkUid,
CreatedDate: artwork.CreateDate, CreatedDate: artwork.CreateDate,
LockStatus: int32(v.Status), LockStatus: int32(v.Status),
AuditStatus: v.AuditStatus, BaseAuditStatus: v.BaseAuditStatus,
AuditMark: v.AuditMark, BaseAuditMark: v.BaseAuditMark,
AuditMark2: v.AuditMark2, BaseAuditMark2: v.BaseAuditMark2,
CreatedAt: v.CreatedAt, SupplementAuditStatus: v.SupplementAuditStatus,
UpdatedAt: v.UpdatedAt, SupplementAuditMark: v.SupplementAuditMark,
DeletedAt: v.DeletedAt, SupplementAuditMark2: v.SupplementAuditMark2,
AuditFlowIndex: int32(v.AuditFlowIndex),
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
DeletedAt: v.DeletedAt,
}) })
} }
} }
@ -153,6 +167,35 @@ func (ArtistInfoArtworkLogic) DeleteArtworkRecord(req *artistInfoArtwork.DeleteA
} }
func (a ArtistInfoArtworkLogic) UpdateArtworkAuditStatus(request *artistInfoArtwork.UpdateArtworkAuditStatusRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) { func (a ArtistInfoArtworkLogic) UpdateArtworkAuditStatus(request *artistInfoArtwork.UpdateArtworkAuditStatusRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
err = dao.UpdateAuditStatus(request.ArtworkUid, request.AuditStatus, request.AuditMark, request.AuditMark2) if request.ArtworkUid != "" {
err = dao.UpdateAuditStatus(request.ArtworkUid, request.AuditStatus, request.AuditMark, request.AuditMark2, request.FlowIndex)
} else if request.ArtworkUids != nil && len(request.ArtworkUids) > 0 {
err = dao.BatchUpdateAuditStatus(request.ArtworkUids, request.AuditStatus, request.AuditMark, request.AuditMark2, request.FlowIndex)
} else {
return nil, errors.New("画作uid不能为空")
}
return return
} }
// CheckArtworkEditable 检查画作的可编辑状态
// followIndex 2基本信息审核 3补充信息审核
func (a ArtistInfoArtworkLogic) CheckArtworkEditable(request *artistInfoArtwork.ArtworkUidRequest, followIndex int) (res *artistInfoArtwork.CheckArtworkEditableResponse, err error) {
res = &artistInfoArtwork.CheckArtworkEditableResponse{}
lockDetail, err := dao.GetArtworkLockDetail(request.ArtworkUid)
if err != nil {
return nil, err
}
if followIndex == 2 {
res.Editable = lockDetail.BaseEditable()
} else if followIndex == 3 {
res.Editable = lockDetail.SupplementEditable()
}
return
}
func (a ArtistInfoArtworkLogic) GenerateArtworkSupplementInfo(request *artistInfoArtwork.ArtworkUidsRequest) (*emptypb.Empty, error) {
//更新画作流程
err := dao.GenerateArtworkSupplementInfo(request.ArtworkUids)
return nil, err
}

View File

@ -1,88 +1,84 @@
package logic package logic
import ( //
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao" //type ISupply interface {
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo" // GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error)
) // GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error)
// UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error)
type ISupply interface { // GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error)
GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) // GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error)
GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) // UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error)
UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) // GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error)
GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) // GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error)
GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) // UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error)
UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) // GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error)
GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) // GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error)
GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) // UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error)
UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) //}
GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) //
GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) //func NewSupply() ISupply {
UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) // return &Supply{}
} //}
//
func NewSupply() ISupply { //type Supply struct {
return &Supply{} //}
} //
//func (a *Supply) GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
type Supply struct { // rep, err = dao.GetSupplyInfoList(int32(req.ArtistId), int32(req.Types))
} // return
//}
func (a *Supply) GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) { //
rep, err = dao.GetSupplyInfoList(int32(req.ArtistId), int32(req.Types)) //func (a *Supply) GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
return // rep, err = dao.GetSupplyInfo(req)
} // return
//}
func (a *Supply) GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) { //
rep, err = dao.GetSupplyInfo(req) //func (a *Supply) UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
return // rep, err = dao.UpdateSupplyInfo(req)
} // return
//}
func (a *Supply) UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) { //
rep, err = dao.UpdateSupplyInfo(req) //func (a *Supply) GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
return // rep, err = dao.GetVideoList(int32(req.UserId))
} // return
//}
func (a *Supply) GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) { //
rep, err = dao.GetVideoList(int32(req.UserId)) //func (a *Supply) GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
return // rep, err = dao.GetVideo(req)
} // return
//}
func (a *Supply) GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) { //
rep, err = dao.GetVideo(req) //func (a *Supply) UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
return // rep, err = dao.UpdateVideo(req)
} // return
//}
func (a *Supply) UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) { //
rep, err = dao.UpdateVideo(req) //func (a *Supply) GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
return // rep, err = dao.GetExam(req)
} // return
//}
func (a *Supply) GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) { //
rep, err = dao.GetExam(req) //func (a *Supply) GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
return // rep, err = dao.GetExamList(req)
} // return
//}
func (a *Supply) GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) { //
rep, err = dao.GetExamList(req) //func (a *Supply) UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
return // rep, err = dao.UpdateExam(req)
} // return
//}
func (a *Supply) UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) { //
rep, err = dao.UpdateExam(req) //func (a *Supply) GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
return // rep, err = dao.GetArtistInfoList(int32(req.UserId))
} // return
//}
func (a *Supply) GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) { //
rep, err = dao.GetArtistInfoList(int32(req.UserId)) //func (a *Supply) GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
return // rep, err = dao.GetArtistInfo(req)
} // return
//}
func (a *Supply) GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) { //
rep, err = dao.GetArtistInfo(req) //func (a *Supply) UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
return // rep, err = dao.UpdateArtistInfo(req)
} // return
//}
func (a *Supply) UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
rep, err = dao.UpdateArtistInfo(req)
return
}

View File

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"github.com/fonchain/fonchain-artistinfo/pb/old/artwork" "github.com/fonchain/fonchain-artistinfo/pb/old/artwork"
"github.com/fonchain/fonchain-artistinfo/cmd/model" "github.com/fonchain/fonchain-artistinfo/cmd/model"
@ -19,7 +20,7 @@ func ArtworkAdd(res *artwork.ArtworkAddRequest) (req *artwork.ArtworkAddRespond,
err = errors.New(m.ERROR_MARSHAL) err = errors.New(m.ERROR_MARSHAL)
return return
} }
artwork := &model.Artwork{ artwork := &old.Artwork{
ArtistId: res.ArtistId, ArtistId: res.ArtistId,
Name: res.Name, Name: res.Name,
ModelYear: res.ModelYear, ModelYear: res.ModelYear,
@ -46,7 +47,7 @@ func ArtworkAdd(res *artwork.ArtworkAddRequest) (req *artwork.ArtworkAddRespond,
} }
func UpdateArtwork(data *artwork.UpdateArtworkRequest) (err error) { func UpdateArtwork(data *artwork.UpdateArtworkRequest) (err error) {
var artwork model.Artwork var artwork old.Artwork
artwork.ID = int32(data.ID) artwork.ID = int32(data.ID)
if err = db.DB.First(&artwork).Error; err != nil { if err = db.DB.First(&artwork).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err)) zap.L().Error("get artwork info err", zap.Error(err))
@ -86,7 +87,7 @@ func UpdateArtwork(data *artwork.UpdateArtworkRequest) (err error) {
} }
func DelArtwork(id int32) (err error) { func DelArtwork(id int32) (err error) {
if err = db.DB.Where("id = ?", id).Delete(&model.Artwork{}).Error; err != nil { if err = db.DB.Where("id = ?", id).Delete(&old.Artwork{}).Error; err != nil {
zap.L().Error("delete artwork info err", zap.Error(err)) zap.L().Error("delete artwork info err", zap.Error(err))
err = errors.New(m.ERROR_DELETE) err = errors.New(m.ERROR_DELETE)
return return
@ -96,7 +97,7 @@ func DelArtwork(id int32) (err error) {
} }
func ApproveArtwork(req *artwork.ApproveArtworkRequest) (rep *artwork.ApproveArtworkRespond, err error) { func ApproveArtwork(req *artwork.ApproveArtworkRequest) (rep *artwork.ApproveArtworkRespond, err error) {
var artwork model.Artwork var artwork old.Artwork
artwork.ID = req.ArtworkId artwork.ID = req.ArtworkId
var state int32 var state int32
if req.IsApprove { if req.IsApprove {
@ -104,7 +105,7 @@ func ApproveArtwork(req *artwork.ApproveArtworkRequest) (rep *artwork.ApproveArt
} else { } else {
state = 4 state = 4
} }
if err = db.DB.Model(&artwork).Updates(model.Artwork{State: state, Remark: req.Remark, Remark2: req.Remark2, ArtworkId: req.MgmtArtworkId}).Where("id", req.ArtworkId).Error; err != nil { if err = db.DB.Model(&artwork).Updates(old.Artwork{State: state, Remark: req.Remark, Remark2: req.Remark2, ArtworkId: req.MgmtArtworkId}).Where("id", req.ArtworkId).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err)) zap.L().Error("get artwork info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
return return
@ -115,7 +116,7 @@ func GetArtworkList(req *artwork.GetArtworkListRequest) (rep *artwork.GetArtwork
rep = &artwork.GetArtworkListRespond{} rep = &artwork.GetArtworkListRespond{}
var datas []*artwork.UpdateArtworkRequest var datas []*artwork.UpdateArtworkRequest
fmt.Println("111") fmt.Println("111")
var artworkList []model.Artwork var artworkList []old.Artwork
//找到用户 p[] //找到用户 p[]
if err = db.DB.Order("created_at desc").Where("artist_id = ?", req.ID).Find(&artworkList).Error; err != nil { if err = db.DB.Order("created_at desc").Where("artist_id = ?", req.ID).Find(&artworkList).Error; err != nil {
fmt.Println("222") fmt.Println("222")
@ -154,7 +155,7 @@ func GetArtworkList(req *artwork.GetArtworkListRequest) (rep *artwork.GetArtwork
func GetArtwork(id int32) (rep *artwork.GetArtworkRespond, err error) { func GetArtwork(id int32) (rep *artwork.GetArtworkRespond, err error) {
rep = &artwork.GetArtworkRespond{} rep = &artwork.GetArtworkRespond{}
var artworkRes model.Artwork var artworkRes old.Artwork
if err = db.DB.Where("id = ?", id).First(&artworkRes).Error; err != nil { if err = db.DB.Where("id = ?", id).First(&artworkRes).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err)) zap.L().Error("get artwork info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
@ -187,7 +188,7 @@ func GetArtwork(id int32) (rep *artwork.GetArtworkRespond, err error) {
} }
func UploadArtwork(Id uint64) (err error) { func UploadArtwork(Id uint64) (err error) {
var artwork model.Artwork var artwork old.Artwork
if err = db.DB.Find(&artwork, "id = ?", Id).Error; err != nil { if err = db.DB.Find(&artwork, "id = ?", Id).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err)) zap.L().Error("get artwork info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT) err = errors.New(m.ERROR_SELECT)
@ -238,7 +239,7 @@ func GetMgmtArtworkList(req *artwork.GetMgmtArtworkListRequest) (rep *artwork.Ge
return return
} }
rep.Count = uint64(artworkCount) rep.Count = uint64(artworkCount)
var artworkList []model.Artwork var artworkList []old.Artwork
//找到用户 //找到用户
sqlWhere = sqlWhere + " limit ?,? " sqlWhere = sqlWhere + " limit ?,? "
args = append(args, (req.Page-1)*req.PageSize) args = append(args, (req.Page-1)*req.PageSize)

View File

@ -0,0 +1,36 @@
// Package model -----------------------------
// @file : artshow_artistIndex.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 23:11
// -------------------------------------------
package model
// 画家指数
type ArtshowArtistIndex struct {
Model
ArtistUid string `gorm:"column:artist_uid;comment:画家uid" json:"artistUid"`
Title string `gorm:"column:title;comment:" json:"title"` //艺术家-展览(exhibition) 、 艺术家-资历seniority 、艺术家-专业specialized 、艺术家-影响力Influence、艺术家-收藏collect
Class string `gorm:"column:class;comment:指数类别" json:"class"` //exhibition 、seniority 、specialized 、Influence 、collect
TitleScore int64 `gorm:"column:title_score;comment:总分" json:"titleScore"`
Score string `gorm:"column:score;comment:前端定义的分数列表" json:"score"` //
Types string `gorm:"column:types;comment:" json:"types"`
Status int64 `json:"status" gorm:"column:status;default:2;comment:2=锁定 3=解锁"` //跟随用户的锁定和解锁状态,用于控制数据的展示
LockTime string `json:"lockTime" gorm:"column:lock_time;comment:锁定时间"`
AuditStatus AuditStatus `json:"auditStatus" gorm:"column:audit_status;default:5;comment:审核状态2= 待审核,3= 审核失败,4= 审核通过,5= 待补充"`
AuditMark1 string `json:"auditMark1" gorm:"column:audit_mark1;comment:审核备注1"`
AuditMark2 string `json:"auditMark2" gorm:"column:audit_mark2;comment:审核备注2"`
}
func (a ArtshowArtistIndex) TableName() string {
return "artshow_artist_index"
}
func (a *ArtshowArtistIndex) Editable() bool {
if a.Status == 1 {
return true
}
if a.Status == 2 && (a.AuditStatus == AuditType_Failed || a.AuditStatus == AuditType_Pending || a.AuditStatus == AuditType_Supplemented) {
return true
}
return false
}

View File

@ -0,0 +1,40 @@
// Package model -----------------------------
// @file : artshow.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 9:32
// -------------------------------------------
package model
type ArtshowArtistSupplement struct {
Model
//通过这两个字段弱关联 artwork_lock_record表中对应的画作
ArtistUid string `json:"artistUid" gorm:"column:artist_uid;comment:"`
Status int64 `json:"status" gorm:"column:status;default:2;comment:2=锁定 3=解锁"` //跟随用户的锁定和解锁状态,用于控制数据的展示
LockTime string `json:"lockTime" gorm:"column:lock_time;comment:"`
//审批字段
AuditStatus AuditStatus `json:"auditStatus" gorm:"column:audit_status;comment:审核状态2= 待审核,3= 审核失败,4= 审核通过,5= 待补充"`
AuditMark1 string `json:"auditMark1" gorm:"column:audit_mark1;comment:审核备注1"`
AuditMark2 string `json:"auditMark2" gorm:"column:audit_mark2;comment:审核备注2"`
ArtistName string `json:"artistName" gorm:"column:artist_name;comment:"`
ArtistProfile string `json:"artistProfile" gorm:"column:artist_profile;comment:个人简介"`
CountryArtLevel int64 `json:"countryArtLevel" gorm:"column:country_art_level;default:1;comment:国家美术师级别: 1=无 2=1级 3=2级"`
ArtistCertPic string `json:"artistCertPic" gorm:"column:artist_cert_pic;comment:国家美术师证书"`
BankNum string `json:"bank_num" gorm:"column:bank_num;comment:开户行"`
BankName string `json:"bank_name" gorm:"column:bank_name;comment:银行卡账号"`
}
func (a ArtshowArtistSupplement) TableName() string {
return "artshow_artist_supplement"
}
func (a *ArtshowArtistSupplement) Editable() bool {
if a.Status == 1 {
return true
}
if a.Status == 2 && (a.AuditStatus == AuditType_Failed || a.AuditStatus == AuditType_Pending || a.AuditStatus == AuditType_Supplemented) {
return true
}
return false
}

View File

@ -0,0 +1,37 @@
// Package model -----------------------------
// @file : artshow.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/3/2 9:32
// -------------------------------------------
package model
type ArtshowVideoRecord struct {
Model
//通过这两个字段弱关联 artwork_lock_record表中对应的画作
ArtistUid string `json:"artistUid" gorm:"column:artist_uid;comment:"`
Status int64 `json:"status" gorm:"column:status;default:2;comment:2=锁定 3=解锁"` //跟随用户的锁定和解锁状态,用于控制数据的展示
LockTime string `json:"lockTime" gorm:"column:lock_time;comment:"`
//AccountId int64 `json:"accountId" gorm:"column:account_id;comment:"`
ArtistName string `json:"artistName" gorm:"column:artist_name;comment:"`
VideoUrl string `json:"videoUrl" gorm:"column:video_url;comment:"`
//审批字段
AuditStatus AuditStatus `json:"auditStatus" gorm:"column:audit_status;comment:审核状态2= 待审核,3= 审核失败,4= 审核通过,5= 待补充"`
AuditMark1 string `json:"auditMark1" gorm:"column:audit_mark1;comment:审核备注1"`
AuditMark2 string `json:"auditMark2" gorm:"column:audit_mark2;comment:审核备注2"`
}
func (a ArtshowVideoRecord) TableName() string {
return "artshow_video_record"
}
func (a *ArtshowVideoRecord) Editable() bool {
if a.Status == 1 {
return true
}
if a.Status == 2 && (a.AuditStatus == AuditType_Failed || a.AuditStatus == AuditType_Pending || a.AuditStatus == AuditType_Supplemented) {
return true
}
return false
}

71
cmd/model/artworkEx.go Normal file
View File

@ -0,0 +1,71 @@
// Package model -----------------------------
// @file : artworkEx.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/2/28 8:58
// -------------------------------------------
package model
import "fmt"
// 画展补充信息审批表
//type ArtExhibitionAudit struct {
// Model
// //ArtworkUid string `json:"artworkUid" gorm:"column:artwork_uid;comment:画作uid"`
// //ArtistUid string `json:"artistUid" gorm:"column:artist_uid;comment:画家uid"`
// //UserId int64 `json:"userId" gorm:"column:user_id;comment:画家宝用户id"`
// LockTime string `json:"lockTime" gorm:"column:lock_time;comment:锁定时间"`
// AuditType auditType `json:"auditType" gorm:"column:audit_type;comment:审批类型"`
// AuditModel
//}
//
//func (a ArtExhibitionAudit) TableName() string {
// return "art_exhibition_audit"
//}
//// 画作信息补充审批
//type AuditArtworkExt struct {
// AuditInfo ArtExhibitionAudit `json:"AuditInfo" gorm:"polymorphic:Owner;polymorphicValue:AuditType_ArtworkExt"`
//}
//
//// 画家视频资料补充审批
//type AuditArtistVideo struct {
// ArtworkId
// AuditInfo ArtExhibitionAudit `json:"AuditInfo" gorm:"polymorphic:Owner;polymorphicValue:AuditType_ArtistVideo"`
//}
//
//// 画家信息补充审批
//type AuditArtistExt struct {
// AuditInfo ArtExhibitionAudit `json:"AuditInfo" gorm:"polymorphic:Owner;polymorphicValue:AuditType_ArtistExt"`
//}
//
//// 画家指数补充审批
//type AuditArtistIndex struct {
// AuditInfo ArtExhibitionAudit `json:"AuditInfo" gorm:"polymorphic:Owner;polymorphicValue:AuditType_ArtistIndex"`
//}
// ======================================
// auditType 审批类型
type auditType int
const (
AuditType_ArtworkExt auditType = iota + 1
AuditType_ArtistVideo
AuditType_ArtistIndex
AuditType_ArtistExt
)
var auditTypeMapper = map[auditType]string{
AuditType_ArtworkExt: "画作信息补充审批",
AuditType_ArtistVideo: "画家视频资料补充审批",
AuditType_ArtistIndex: "画家指数补充审批",
AuditType_ArtistExt: "画家信息补充审批",
}
func (a auditType) String() string {
if str, ok := auditTypeMapper[a]; ok {
return str
} else {
return fmt.Sprintf("未知的审批类型:%d", int(a))
}
}

View File

@ -1,17 +0,0 @@
package model
type ArtworkLockRecord struct {
Model
ArtistUid string `json:"artistUid" gorm:"column:artist_uid;type:varchar(191);comment:画家uid"`
ArtworkUid string `json:"artworkUid" gorm:"column:artwork_uid;type:varchar(191);comment:画作uid"`
Status int64 `json:"status" gorm:"column:status;default:1;comment:1=准备/暂存 2=锁定 3=解锁"`
LockTime string `json:"lockTime" gorm:"column:lock_time;锁定时间"`
AuditStatus int64 `json:"auditStatus" gorm:"column:audit_status;default:1;comment:审核状态 1:待审核/暂存 2审核通过 3审核不通过"`
AuditMark string `json:"auditMark" gorm:"column:audit_mark;comment:审核备注"`
AuditMark2 string `json:"auditMark2" gorm:"column:audit_mark2;comment:审核备注2"`
//UserInfo User `gorm:"foreignKey:ArtistUid;reference:MgmtArtistUid"`
}
func (a ArtworkLockRecord) TableName() string {
return "artwork_lock_record"
}

View File

@ -0,0 +1,93 @@
package model
type AuditStatus int64
const (
AuditType_preSave AuditStatus = 1 //1= 暂存
AuditType_Pending AuditStatus = 2 //2= 待审核
AuditType_Failed AuditStatus = 3 //3= 审核失败
AuditType_Pass AuditStatus = 4 //4= 审核通过
AuditType_Supplemented AuditStatus = 5 //5= 待补充
)
var auditStatusMaper = map[AuditStatus]string{
AuditType_preSave: "暂存",
AuditType_Pending: "待审核",
AuditType_Failed: "审核失败",
AuditType_Pass: "审核通过",
AuditType_Supplemented: "待补充",
}
func (a AuditStatus) String() string {
if a == 0 {
return "无"
}
str, ok := auditStatusMaper[a]
if !ok {
return "未知"
}
return str
}
// 此表作为画家宝中的画作中间表的主表(画作主要数据保存在画作微服务中),请悉知
type ArtworkLockRecord struct {
Model
ArtistUid string `json:"artistUid" gorm:"column:artist_uid;type:varchar(191);comment:画家uid"`
ArtworkUid string `json:"artworkUid" gorm:"column:artwork_uid;type:varchar(191);comment:画作uid"`
Status int64 `json:"status" gorm:"column:status;default:1;comment:1=准备/暂存 2=锁定 3=解锁"` //这个锁的目的是配合下面的LockTime 对画作进行历史记录查询时的分组
LockTime string `json:"lockTime" gorm:"column:lock_time;comment:锁定时间"`
//用户锁定后Status=2才能进入流程.
AuditFlowIndex int64 `json:"auditFlowIndex" gorm:"column:audit_flow_index;default:1;comment:当前的审批流程 1无 2基本信息审核 3补充信息审核"`
// 画作基本信息审批
// -- 画作上传,审核状态为[暂存1] -- 后台锁定用户所有Status为1的画作设置为[锁定2],并生成锁定时间 ,审核状态为 [待审核3] -- 后台审批不通过,审核状态改为[不通过3] -- 用户修改画作后,状态再次改为[待审核2]直至审批通过
BaseAuditStatus AuditStatus `json:"baseAuditStatus" gorm:"column:base_audit_status;default:1;comment:画作基本信息审核状态 1:暂存 2:待审核 3审核不通过 4审核通过"`
BaseAuditMark string `json:"baseAuditMark" gorm:"column:base_audit_mark;comment:画作基本信息审核审核备注1"`
BaseAuditMark2 string `json:"baseAuditMark2" gorm:"column:base_audit_mark2;comment:画作基本信息审核审核备注2"`
// ↓
// 画作基本信息审批通过后,后台点击[生成补充信息按钮] AuditFlowIndex字段变为3 进入画作补充信息审批
// ↓
//画作补充信息审批记录
// 后台点击[生成补充信息按钮],审核状态为[待补充5]-- 用户更新补充信息,状态改为[待审核2] -- 后台审批不通过,审核状态改为[不通过3] -- 用户修改画作后,状态再次改为[待审核2]直至审批通过
SupplementAuditStatus AuditStatus `json:"supplementAuditStatus" gorm:"column:supplement_audit_status;default:0;comment:补充信息审核状态 0无 5待补充 2.待审核 3审核不通过 4审核通过"` // 注意没有暂存状态
SupplementAuditMark string `json:"supplementAuditMark" gorm:"column:supplement_audit_mark;comment:补充信息审核备注1"`
SupplementAuditMark2 string `json:"supplementAuditMark2" gorm:"column:supplement_audit_mark2;comment:补充信息审核备注2"`
//UserInfo User `gorm:"foreignKey:ArtistUid;reference:MgmtArtistUid"`
}
func (a *ArtworkLockRecord) TableName() string {
return "artwork_lock_record"
}
//func (a *ArtworkLockRecord) BeforeUpdate(tx *gorm.DB) (err error) {
// var thisData ArtworkLockRecord
// tx.Where("artwork_uid = ?", a.ArtworkUid).First(&thisData)
// //如果是审核状态不通过的情况下更新画作信息,则自动变为待审核
// if thisData.BaseAuditStatus == 3 && a.BaseAuditStatus == 0 && a.SupplementAuditStatus == 0 {
// a.BaseAuditStatus = 2
// }
// if thisData.SupplementAuditStatus == 3 && a.BaseAuditStatus == 0 && a.SupplementAuditStatus == 0 {
// a.SupplementAuditStatus = 2
// }
// return
//}
// 基本信息是否可编辑
func (a *ArtworkLockRecord) BaseEditable() bool {
if a.Status == 1 {
return true
}
if a.Status == 2 && (a.BaseAuditStatus == AuditType_Failed || a.BaseAuditStatus == AuditType_Pending || a.BaseAuditStatus == AuditType_Supplemented) {
return true
}
return false
}
// 补充信息是否可编辑
func (a *ArtworkLockRecord) SupplementEditable() bool {
//&& a.BaseAuditStatus == AuditType_Pass todo 是否要流程通过基本信息
if a.Status == 2 && (a.SupplementAuditStatus == AuditType_Supplemented || a.SupplementAuditStatus == AuditType_Failed || a.SupplementAuditStatus == AuditType_Pending) {
return true
}
return false
}

View File

@ -11,3 +11,9 @@ type Model struct {
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"`
DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at;type:bigint" json:"deletedAt"` DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at;type:bigint" json:"deletedAt"`
} }
type AuditModel struct {
AuditStatus int64 `json:"auditStatus" gorm:"column:audit_status;default:1;comment:审核状态 1:待审核/暂存 2审核通过 3审核不通过"`
AuditMark string `json:"auditMark" gorm:"column:audit_mark;comment:审核备注"`
AuditMark2 string `json:"auditMark2" gorm:"column:audit_mark2;comment:审核备注2"`
}

View File

@ -1,8 +1,10 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// User 用户模型 // User 用户模型
type ArtistInfo struct { type ArtistInfo struct {
Model model.Model
UserId uint `gorm:"not null default:0" json:"userId"` UserId uint `gorm:"not null default:0" json:"userId"`
ArtistId string `gorm:"type:varchar(256) default ''" json:"artistId"` ArtistId string `gorm:"type:varchar(256) default ''" json:"artistId"`
BankAccount string `gorm:"type:varchar(25) not null" json:"bankAccount"` BankAccount string `gorm:"type:varchar(25) not null" json:"bankAccount"`

View File

@ -1,8 +1,10 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// User 用户模型 // User 用户模型
type Artwork struct { type Artwork struct {
Model model.Model
ID int32 `gorm:"not null" json:"id"` ID int32 `gorm:"not null" json:"id"`
ArtistId uint64 `gorm:"not null" json:"artistId"` ArtistId uint64 `gorm:"not null" json:"artistId"`
Name string `gorm:"type:varchar(256) not null" json:"name"` Name string `gorm:"type:varchar(256) not null" json:"name"`

View File

@ -1,9 +1,12 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// 画家指数 // 画家指数
type ExhExam struct { type ArtworkExExam struct {
Model model.Model
UserId uint `gorm:"column:user_id;default:0;comment:账号id" json:"userId"` UserId uint `gorm:"column:user_id;default:0;comment:账号id" json:"userId"`
ArtistUid string `json:"artistUid" gorm:"column:artist_uid;comment:"`
Title string `gorm:"column:title;type:varchar(64);default:''" json:"title"` Title string `gorm:"column:title;type:varchar(64);default:''" json:"title"`
Class string `gorm:"column:class;type:varchar(25);default:''" json:"class"` Class string `gorm:"column:class;type:varchar(25);default:''" json:"class"`
TitleScore uint `gorm:"column:title_score;default:0" json:"titleScore"` TitleScore uint `gorm:"column:title_score;default:0" json:"titleScore"`
@ -14,6 +17,6 @@ type ExhExam struct {
Enable bool `gorm:"column:enable;default:0" json:"enable"` Enable bool `gorm:"column:enable;default:0" json:"enable"`
} }
func (e ExhExam) TableName() string { func (e ArtworkExExam) TableName() string {
return "exh_exam" return "artwork_ex_exam"
} }

View File

@ -1,8 +1,10 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// ExhVideo 视频资料 // ExhVideo 视频资料
type ExhVideo struct { type ExhVideo struct {
Model model.Model
UserId uint `gorm:"not null default:0"` UserId uint `gorm:"not null default:0"`
Url string `gorm:"type:varchar(256) default ''"` Url string `gorm:"type:varchar(256) default ''"`
State string `gorm:"type:varchar(25) default ''"` State string `gorm:"type:varchar(25) default ''"`

View File

@ -1,8 +1,10 @@
package model package old
//User 用户模型 import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// User 用户模型
type ArtworkBatch struct { type ArtworkBatch struct {
Model model.Model
ID int32 `gorm:"not null"` ID int32 `gorm:"not null"`
BatchId int32 `gorm:"not null"` BatchId int32 `gorm:"not null"`
ArtistId int32 `gorm:"not null"` ArtistId int32 `gorm:"not null"`

View File

@ -1,8 +1,10 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// 考核 用户模型 // 考核 用户模型
type ArtworkState struct { type ArtworkState struct {
Model model.Model
ID int32 `gorm:"not null"` ID int32 `gorm:"not null"`
ArtworkId int32 `gorm:"default:0"` ArtworkId int32 `gorm:"default:0"`
State int32 `gorm:"default:0"` State int32 `gorm:"default:0"`

View File

@ -1,8 +1,10 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// User 用户模型 // User 用户模型
type Bank struct { type Bank struct {
Model model.Model
ID int32 `gorm:"not null"` ID int32 `gorm:"not null"`
UserId int32 `gorm:" not null"` UserId int32 `gorm:" not null"`
BankAccount string `gorm:"type:varchar(25) not null"` BankAccount string `gorm:"type:varchar(25) not null"`

View File

@ -1,9 +1,12 @@
package model package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
import "gorm.io/plugin/soft_delete" import "gorm.io/plugin/soft_delete"
// Contract 用户模型 // Contract 用户模型
type Contract struct { type Contract struct {
<<<<<<< HEAD:cmd/model/contract.go
ID int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` ID int32 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
Uid string `gorm:"column:uid;type:varchar(100);comment:合同表的唯一表示;NOT NULL" json:"uid"` Uid string `gorm:"column:uid;type:varchar(100);comment:合同表的唯一表示;NOT NULL" json:"uid"`
ArtistUid string `gorm:"column:artist_uid;type:varchar(100);comment:画家uid;NOT NULL" json:"artist_uid"` ArtistUid string `gorm:"column:artist_uid;type:varchar(100);comment:画家uid;NOT NULL" json:"artist_uid"`
@ -17,6 +20,22 @@ type Contract struct {
CreatedAt int32 `gorm:"column:created_at;autoCreateTime"` CreatedAt int32 `gorm:"column:created_at;autoCreateTime"`
UpdatedAt int32 `gorm:"column:updated_at;autoCreateTime"` UpdatedAt int32 `gorm:"column:updated_at;autoCreateTime"`
DeletedAt soft_delete.DeletedAt DeletedAt soft_delete.DeletedAt
=======
model.Model
ID int32 `gorm:"not null"`
UserId int32 `gorm:"not null"`
CardId string `gorm:"type:varchar(256) default ''"`
MgmtUserId string `gorm:"not null"`
ArtworkId string `gorm:"type:varchar(256) default ''"`
ContractId string `gorm:"type:varchar(256) default ''"`
TransactionId string `gorm:"type:varchar(256) default '' "`
Type int32 `gorm:"not null"`
BatchId int32 `gorm:"not null"`
BatchName string `gorm:"type:varchar(256) default '' "`
ViewUrl string `gorm:"type:varchar(256) default ''"`
DownloadUrl string `gorm:"type:varchar(256) default ''"`
State int32 `gorm:"not null"`
>>>>>>> xjjdev:cmd/model/old/contract.go
} }
type Reply struct { type Reply struct {

View File

@ -0,0 +1,55 @@
// Package model -----------------------------
// @file : temp_artwork_ext_data.go
// @author : JJXu
// @contact : wavingbear@163.com
// @time : 2023/2/28 11:51
// -------------------------------------------
package model
import (
"gorm.io/plugin/soft_delete"
"time"
)
type ArtworkExtData struct {
Id int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"Id"` //type:int32 comment:
ArtworkId int32 `gorm:"column:artwork_id" json:"ArtworkId"` //type:int32
ArtworkUuid string `gorm:"column:artwork_uuid" json:"ArtworkUuid"` //type:string comment:画作的uuid
ArtType int32 `gorm:"column:art_type" json:"ArtType"` //type:string comment:艺术类别
ArtTitle int32 `gorm:"column:art_title" json:"ArtTitle"` //type:string comment:艺术主题
ArtStyle int32 `gorm:"column:art_style" json:"ArtStyle"` //type:string comment:风格
Color int32 `gorm:"column:color" json:"Color"` //type:string comment:颜色
PenTechniques string `gorm:"column:pen_techniques" json:"PenTechniques"` //type:string comment:笔墨技法
ArtIdea string `gorm:"column:art_idea" json:"ArtIdea"` //type:string comment:绘画思想
ExpressIdea string `gorm:"column:express_idea" json:"ExpressIdea"` //type:string comment:表达思想
ArtStory string `gorm:"column:art_story" json:"ArtStory"` //type:string comment:创作背景故事
FirstPublish string `gorm:"column:first_publish" json:"FirstPublish"` //type:string comment:首次发表
FirstPublishImg string `gorm:"column:first_publish_img" json:"FirstPublishImg"` //type:string comment:首次发表截图
FirstName string `gorm:"column:first_name" json:"FirstName"` //type:string comment:首次命名
FirstNameImg string `gorm:"column:first_name_img" json:"FirstNameImg"` //type:string comment:首次命名截图
CopyrightHash string `gorm:"column:copyright_hash" json:"CopyrightHash"` //type:string comment:版权哈希
RealrightHash string `gorm:"column:realright_hash" json:"RealrightHash"` //type:string comment:物权哈希
SprayPosition string `gorm:"column:spray_position" json:"SprayPosition"` //type:string comment:喷涂位置
SprayRemark string `gorm:"column:spray_remark" json:"SprayRemark"` //type:string comment:喷涂备注
AuthDataHash string `gorm:"column:auth_data_hash" json:"AuthData"` //type:string comment:鉴证数据
DigiShootDate string `gorm:"column:digi_shoot_date" json:"DigiShootDate"` //type:string comment:数字化拍摄时间
DigiMakeDate string `gorm:"column:digi_make_date" json:"DigiMakeDate"` //type:string comment:数字化后期制作时间
DigiArtImg string `gorm:"column:digi_art_img" json:"DigiArtImg"` //type:string comment:数字化画作图
DigiArtCopyrightImg string `gorm:"column:digi_art_copyright_img" json:"DigiArtCopyrightImg"` //type:string comment:数字化画作版权图
DigiCopyrightInfo string `gorm:"column:digi_copyright_info" json:"DigiCopyrightInfo"` //type:string comment:数字化画作版权信息
DigiCopyrightFile string `gorm:"column:digi_copyright_file" json:"DigiCopyrightFile"` //type:string comment:数字化画作版权文件
Tags string `gorm:"column:tags" json:"Tags"` //type:string comment:选择标签
ThirdComment string `gorm:"column:third_comment" json:"ThirdComment"` //type:string comment:第三方评价
AuthTime string `gorm:"column:auth_time;comment:鉴证时间" json:"auth_time"`
AuthImg string `gorm:"column:auth_img" json:"AuthImg"` //type:string comment:鉴证图
Status int32 `gorm:"column:status;type:tinyint(4);default:1;comment:状态 正常 2 删除;NOT NULL" json:"status"`
CreatedAt time.Time `gorm:"column:created_at" json:"CreatedAt"` //type:int32 comment:
UpdatedAt time.Time `gorm:"column:updated_at" json:"UpdatedAt"` //type:int32 comment:
DeletedAt soft_delete.DeletedAt //type:int32 comment:
}
// TableName 表名:artwork_ext_data画作补充数据。
// 说明:
func (ArtworkExtData) TableName() string {
return "artwork_ext_data"
}

View File

@ -24,9 +24,9 @@ type User struct {
OpenId string `gorm:"openId"` OpenId string `gorm:"openId"`
//用户状态 //用户状态
IsRead int64 `gorm:"column:is_read;not null;comment:条款阅读状态"` IsRead int64 `gorm:"column:is_read;not null;comment:条款阅读状态"`
IsLock bool `gorm:"column:is_lock;not null;comment:画家锁定状态"` IsLock bool `gorm:"column:is_lock;not null;comment:画家锁定状态"`
LatestLockTime string `json:"latestLockTime" gorm:"column:latest_lock_time;comment:最新锁定时间"`
//前端参数,提交实名认证后生成 //前端参数,提交实名认证后生成
Htmltype string `gorm:"html_type" json:"htmltype"` Htmltype string `gorm:"html_type" json:"htmltype"`
Envtype string `gorm:"env_type" json:"envtype"` Envtype string `gorm:"env_type" json:"envtype"`

View File

@ -23,6 +23,7 @@ type UserView struct {
FddState int64 `json:"fddState" gorm:"column:fdd_state;comment:法大大状态"` FddState int64 `json:"fddState" gorm:"column:fdd_state;comment:法大大状态"`
IsRead int64 `json:"is_read" gorm:"column:is_read;comment:是否已读 0未读 1已读"` IsRead int64 `json:"is_read" gorm:"column:is_read;comment:是否已读 0未读 1已读"`
IsLock bool `json:"isLock" gorm:"column:is_lock;comment:是否锁定"` IsLock bool `json:"isLock" gorm:"column:is_lock;comment:是否锁定"`
LatestLockTime string `json:"latestLockTime" gorm:"column:latest_lock_time;comment:"`
RealName string `json:"realName" gorm:"column:real_name;comment:真实姓名"` RealName string `json:"realName" gorm:"column:real_name;comment:真实姓名"`
IdNum string `json:"idNum" gorm:"column:id_num;comment:证件号码"` IdNum string `json:"idNum" gorm:"column:id_num;comment:证件号码"`
Sex SexType `json:"sex" gorm:"column:sex;comment:性别"` Sex SexType `json:"sex" gorm:"column:sex;comment:性别"`
@ -66,7 +67,8 @@ SELECT
su.updated_at, su.updated_at,
su.deleted_at, su.deleted_at,
inviter.invited_code inviter_invite_code, inviter.invited_code inviter_invite_code,
inviter_rn.name inviter_name inviter_rn.name inviter_name,
su.latest_lock_time
FROM sys_user su FROM sys_user su
LEFT JOIN real_name rn ON rn.id = su.real_name_id LEFT JOIN real_name rn ON rn.id = su.real_name_id
-- 邀请者信息 -- 邀请者信息

View File

@ -25,6 +25,9 @@ dubbo:
ArtistInfoArtworkProvider: ArtistInfoArtworkProvider:
interface: com.fontree.microservices.common.ArtistInfoArtwork interface: com.fontree.microservices.common.ArtistInfoArtwork
retries: 100 retries: 100
ArtistInfoArtshowProvider:
interface: com.fontree.microservices.common.ArtistInfoArtshow
retries: 100
#ContractProvider: #ContractProvider:
# interface: com.fontree.microservices.common.Contract # interface: com.fontree.microservices.common.Contract
# retries: 0 # retries: 0

File diff suppressed because it is too large Load Diff

View File

@ -137,6 +137,212 @@ var _ interface {
ErrorName() string ErrorName() string
} = ArtworkCommonNoParamsValidationError{} } = ArtworkCommonNoParamsValidationError{}
// Validate checks the field values on ArtworkUidRequest with the rules defined
// in the proto definition for this message. If any rules are violated, the
// first error encountered is returned, or nil if there are no violations.
func (m *ArtworkUidRequest) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ArtworkUidRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ArtworkUidRequestMultiError, or nil if none found.
func (m *ArtworkUidRequest) ValidateAll() error {
return m.validate(true)
}
func (m *ArtworkUidRequest) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
// no validation rules for ArtworkUid
if len(errors) > 0 {
return ArtworkUidRequestMultiError(errors)
}
return nil
}
// ArtworkUidRequestMultiError is an error wrapping multiple validation errors
// returned by ArtworkUidRequest.ValidateAll() if the designated constraints
// aren't met.
type ArtworkUidRequestMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ArtworkUidRequestMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ArtworkUidRequestMultiError) AllErrors() []error { return m }
// ArtworkUidRequestValidationError is the validation error returned by
// ArtworkUidRequest.Validate if the designated constraints aren't met.
type ArtworkUidRequestValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ArtworkUidRequestValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ArtworkUidRequestValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ArtworkUidRequestValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ArtworkUidRequestValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ArtworkUidRequestValidationError) ErrorName() string {
return "ArtworkUidRequestValidationError"
}
// Error satisfies the builtin error interface
func (e ArtworkUidRequestValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sArtworkUidRequest.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ArtworkUidRequestValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ArtworkUidRequestValidationError{}
// Validate checks the field values on ArtworkUidsRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *ArtworkUidsRequest) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on ArtworkUidsRequest with the rules
// defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// ArtworkUidsRequestMultiError, or nil if none found.
func (m *ArtworkUidsRequest) ValidateAll() error {
return m.validate(true)
}
func (m *ArtworkUidsRequest) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
if len(errors) > 0 {
return ArtworkUidsRequestMultiError(errors)
}
return nil
}
// ArtworkUidsRequestMultiError is an error wrapping multiple validation errors
// returned by ArtworkUidsRequest.ValidateAll() if the designated constraints
// aren't met.
type ArtworkUidsRequestMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m ArtworkUidsRequestMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m ArtworkUidsRequestMultiError) AllErrors() []error { return m }
// ArtworkUidsRequestValidationError is the validation error returned by
// ArtworkUidsRequest.Validate if the designated constraints aren't met.
type ArtworkUidsRequestValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e ArtworkUidsRequestValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e ArtworkUidsRequestValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e ArtworkUidsRequestValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e ArtworkUidsRequestValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e ArtworkUidsRequestValidationError) ErrorName() string {
return "ArtworkUidsRequestValidationError"
}
// Error satisfies the builtin error interface
func (e ArtworkUidsRequestValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sArtworkUidsRequest.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = ArtworkUidsRequestValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = ArtworkUidsRequestValidationError{}
// Validate checks the field values on CreateArtworkLockRecordReq with the // Validate checks the field values on CreateArtworkLockRecordReq with the
// rules defined in the proto definition for this message. If any rules are // rules defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations. // violated, the first error encountered is returned, or nil if there are no violations.
@ -273,6 +479,8 @@ func (m *ArtworkLockActionRequest) validate(all bool) error {
// no validation rules for Lock // no validation rules for Lock
// no validation rules for LockTime
if len(errors) > 0 { if len(errors) > 0 {
return ArtworkLockActionRequestMultiError(errors) return ArtworkLockActionRequestMultiError(errors)
} }
@ -379,6 +587,8 @@ func (m *GetArtworkLockRecordsRequest) validate(all bool) error {
// no validation rules for QueryType // no validation rules for QueryType
// no validation rules for AuditStatus
if len(errors) > 0 { if len(errors) > 0 {
return GetArtworkLockRecordsRequestMultiError(errors) return GetArtworkLockRecordsRequestMultiError(errors)
} }
@ -490,18 +700,30 @@ func (m *ArtistLockInfo) validate(all bool) error {
// no validation rules for LockTime // no validation rules for LockTime
// no validation rules for AuditStatus
// no validation rules for AuditMark
// no validation rules for AuditMark2
// no validation rules for CreatedAt // no validation rules for CreatedAt
// no validation rules for UpdatedAt // no validation rules for UpdatedAt
// no validation rules for DeletedAt // no validation rules for DeletedAt
// no validation rules for BaseAuditStatus
// no validation rules for BaseAuditMark
// no validation rules for BaseAuditMark2
// no validation rules for SupplementAuditStatus
// no validation rules for SupplementAuditMark
// no validation rules for SupplementAuditMark2
// no validation rules for AuditFlowIndex
// no validation rules for BaseEditable
// no validation rules for SupplementEditable
if len(errors) > 0 { if len(errors) > 0 {
return ArtistLockInfoMultiError(errors) return ArtistLockInfoMultiError(errors)
} }
@ -1168,11 +1390,19 @@ func (m *ArtworkPreviewInfo) validate(all bool) error {
// no validation rules for LockStatus // no validation rules for LockStatus
// no validation rules for AuditStatus // no validation rules for BaseAuditStatus
// no validation rules for AuditMark // no validation rules for BaseAuditMark
// no validation rules for AuditMark2 // no validation rules for BaseAuditMark2
// no validation rules for SupplementAuditStatus
// no validation rules for SupplementAuditMark
// no validation rules for SupplementAuditMark2
// no validation rules for AuditFlowIndex
// no validation rules for CreatedAt // no validation rules for CreatedAt
@ -1565,6 +1795,8 @@ func (m *UpdateArtworkAuditStatusRequest) validate(all bool) error {
// no validation rules for AuditMark2 // no validation rules for AuditMark2
// no validation rules for FlowIndex
if len(errors) > 0 { if len(errors) > 0 {
return UpdateArtworkAuditStatusRequestMultiError(errors) return UpdateArtworkAuditStatusRequestMultiError(errors)
} }
@ -1645,3 +1877,108 @@ var _ interface {
Cause() error Cause() error
ErrorName() string ErrorName() string
} = UpdateArtworkAuditStatusRequestValidationError{} } = UpdateArtworkAuditStatusRequestValidationError{}
// Validate checks the field values on CheckArtworkEditableResponse with the
// rules defined in the proto definition for this message. If any rules are
// violated, the first error encountered is returned, or nil if there are no violations.
func (m *CheckArtworkEditableResponse) Validate() error {
return m.validate(false)
}
// ValidateAll checks the field values on CheckArtworkEditableResponse with the
// rules defined in the proto definition for this message. If any rules are
// violated, the result is a list of violation errors wrapped in
// CheckArtworkEditableResponseMultiError, or nil if none found.
func (m *CheckArtworkEditableResponse) ValidateAll() error {
return m.validate(true)
}
func (m *CheckArtworkEditableResponse) validate(all bool) error {
if m == nil {
return nil
}
var errors []error
// no validation rules for Editable
if len(errors) > 0 {
return CheckArtworkEditableResponseMultiError(errors)
}
return nil
}
// CheckArtworkEditableResponseMultiError is an error wrapping multiple
// validation errors returned by CheckArtworkEditableResponse.ValidateAll() if
// the designated constraints aren't met.
type CheckArtworkEditableResponseMultiError []error
// Error returns a concatenation of all the error messages it wraps.
func (m CheckArtworkEditableResponseMultiError) Error() string {
var msgs []string
for _, err := range m {
msgs = append(msgs, err.Error())
}
return strings.Join(msgs, "; ")
}
// AllErrors returns a list of validation violation errors.
func (m CheckArtworkEditableResponseMultiError) AllErrors() []error { return m }
// CheckArtworkEditableResponseValidationError is the validation error returned
// by CheckArtworkEditableResponse.Validate if the designated constraints
// aren't met.
type CheckArtworkEditableResponseValidationError struct {
field string
reason string
cause error
key bool
}
// Field function returns field value.
func (e CheckArtworkEditableResponseValidationError) Field() string { return e.field }
// Reason function returns reason value.
func (e CheckArtworkEditableResponseValidationError) Reason() string { return e.reason }
// Cause function returns cause value.
func (e CheckArtworkEditableResponseValidationError) Cause() error { return e.cause }
// Key function returns key value.
func (e CheckArtworkEditableResponseValidationError) Key() bool { return e.key }
// ErrorName returns error name.
func (e CheckArtworkEditableResponseValidationError) ErrorName() string {
return "CheckArtworkEditableResponseValidationError"
}
// Error satisfies the builtin error interface
func (e CheckArtworkEditableResponseValidationError) Error() string {
cause := ""
if e.cause != nil {
cause = fmt.Sprintf(" | caused by: %v", e.cause)
}
key := ""
if e.key {
key = "key for "
}
return fmt.Sprintf(
"invalid %sCheckArtworkEditableResponse.%s: %s%s",
key,
e.field,
e.reason,
cause)
}
var _ error = CheckArtworkEditableResponseValidationError{}
var _ interface {
Field() string
Reason() string
Key() bool
Cause() error
ErrorName() string
} = CheckArtworkEditableResponseValidationError{}

View File

@ -18,6 +18,7 @@ import (
common "github.com/dubbogo/triple/pkg/common" common "github.com/dubbogo/triple/pkg/common"
constant "github.com/dubbogo/triple/pkg/common/constant" constant "github.com/dubbogo/triple/pkg/common/constant"
triple "github.com/dubbogo/triple/pkg/triple" triple "github.com/dubbogo/triple/pkg/triple"
emptypb "google.golang.org/protobuf/types/known/emptypb"
) )
// This is a compile-time assertion to ensure that this generated file // This is a compile-time assertion to ensure that this generated file
@ -36,6 +37,9 @@ type ArtistInfoArtworkClient interface {
DeleteArtworkRecord(ctx context.Context, in *DeleteArtworkRecordRequest, opts ...grpc_go.CallOption) (*ArtworkCommonNoParams, common.ErrorWithAttachment) DeleteArtworkRecord(ctx context.Context, in *DeleteArtworkRecordRequest, opts ...grpc_go.CallOption) (*ArtworkCommonNoParams, common.ErrorWithAttachment)
GetArtworkLockDetail(ctx context.Context, in *GetArtworkLockDetailRequest, opts ...grpc_go.CallOption) (*ArtistLockInfo, common.ErrorWithAttachment) GetArtworkLockDetail(ctx context.Context, in *GetArtworkLockDetailRequest, opts ...grpc_go.CallOption) (*ArtistLockInfo, common.ErrorWithAttachment)
UpdateArtworkAuditStatus(ctx context.Context, in *UpdateArtworkAuditStatusRequest, opts ...grpc_go.CallOption) (*ArtworkCommonNoParams, common.ErrorWithAttachment) UpdateArtworkAuditStatus(ctx context.Context, in *UpdateArtworkAuditStatusRequest, opts ...grpc_go.CallOption) (*ArtworkCommonNoParams, common.ErrorWithAttachment)
CheckArtworkBaseInfoEditable(ctx context.Context, in *ArtworkUidRequest, opts ...grpc_go.CallOption) (*CheckArtworkEditableResponse, common.ErrorWithAttachment)
CheckArtworkSupplementInfoEditable(ctx context.Context, in *ArtworkUidRequest, opts ...grpc_go.CallOption) (*CheckArtworkEditableResponse, common.ErrorWithAttachment)
GenerateArtworkSupplementInfo(ctx context.Context, in *ArtworkUidsRequest, opts ...grpc_go.CallOption) (*emptypb.Empty, common.ErrorWithAttachment)
} }
type artistInfoArtworkClient struct { type artistInfoArtworkClient struct {
@ -43,13 +47,16 @@ type artistInfoArtworkClient struct {
} }
type ArtistInfoArtworkClientImpl struct { type ArtistInfoArtworkClientImpl struct {
CreateArtworkLockRecord func(ctx context.Context, in *CreateArtworkLockRecordReq) (*ArtworkCommonNoParams, error) CreateArtworkLockRecord func(ctx context.Context, in *CreateArtworkLockRecordReq) (*ArtworkCommonNoParams, error)
ArtworkLockAction func(ctx context.Context, in *ArtworkLockActionRequest) (*ArtworkCommonNoParams, error) ArtworkLockAction func(ctx context.Context, in *ArtworkLockActionRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockRecords func(ctx context.Context, in *GetArtworkLockRecordsRequest) (*ArtworkLockList, error) GetArtworkLockRecords func(ctx context.Context, in *GetArtworkLockRecordsRequest) (*ArtworkLockList, error)
GetArtworkLockHistoryGroup func(ctx context.Context, in *GetArtworkLockHistoryRequest) (*GetArtworkLockHistoryResponse, error) GetArtworkLockHistoryGroup func(ctx context.Context, in *GetArtworkLockHistoryRequest) (*GetArtworkLockHistoryResponse, error)
DeleteArtworkRecord func(ctx context.Context, in *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error) DeleteArtworkRecord func(ctx context.Context, in *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockDetail func(ctx context.Context, in *GetArtworkLockDetailRequest) (*ArtistLockInfo, error) GetArtworkLockDetail func(ctx context.Context, in *GetArtworkLockDetailRequest) (*ArtistLockInfo, error)
UpdateArtworkAuditStatus func(ctx context.Context, in *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error) UpdateArtworkAuditStatus func(ctx context.Context, in *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error)
CheckArtworkBaseInfoEditable func(ctx context.Context, in *ArtworkUidRequest) (*CheckArtworkEditableResponse, error)
CheckArtworkSupplementInfoEditable func(ctx context.Context, in *ArtworkUidRequest) (*CheckArtworkEditableResponse, error)
GenerateArtworkSupplementInfo func(ctx context.Context, in *ArtworkUidsRequest) (*emptypb.Empty, error)
} }
func (c *ArtistInfoArtworkClientImpl) GetDubboStub(cc *triple.TripleConn) ArtistInfoArtworkClient { func (c *ArtistInfoArtworkClientImpl) GetDubboStub(cc *triple.TripleConn) ArtistInfoArtworkClient {
@ -106,6 +113,24 @@ func (c *artistInfoArtworkClient) UpdateArtworkAuditStatus(ctx context.Context,
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateArtworkAuditStatus", in, out) return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateArtworkAuditStatus", in, out)
} }
func (c *artistInfoArtworkClient) CheckArtworkBaseInfoEditable(ctx context.Context, in *ArtworkUidRequest, opts ...grpc_go.CallOption) (*CheckArtworkEditableResponse, common.ErrorWithAttachment) {
out := new(CheckArtworkEditableResponse)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CheckArtworkBaseInfoEditable", in, out)
}
func (c *artistInfoArtworkClient) CheckArtworkSupplementInfoEditable(ctx context.Context, in *ArtworkUidRequest, opts ...grpc_go.CallOption) (*CheckArtworkEditableResponse, common.ErrorWithAttachment) {
out := new(CheckArtworkEditableResponse)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CheckArtworkSupplementInfoEditable", in, out)
}
func (c *artistInfoArtworkClient) GenerateArtworkSupplementInfo(ctx context.Context, in *ArtworkUidsRequest, opts ...grpc_go.CallOption) (*emptypb.Empty, common.ErrorWithAttachment) {
out := new(emptypb.Empty)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GenerateArtworkSupplementInfo", in, out)
}
// ArtistInfoArtworkServer is the server API for ArtistInfoArtwork service. // ArtistInfoArtworkServer is the server API for ArtistInfoArtwork service.
// All implementations must embed UnimplementedArtistInfoArtworkServer // All implementations must embed UnimplementedArtistInfoArtworkServer
// for forward compatibility // for forward compatibility
@ -118,6 +143,9 @@ type ArtistInfoArtworkServer interface {
DeleteArtworkRecord(context.Context, *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error) DeleteArtworkRecord(context.Context, *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockDetail(context.Context, *GetArtworkLockDetailRequest) (*ArtistLockInfo, error) GetArtworkLockDetail(context.Context, *GetArtworkLockDetailRequest) (*ArtistLockInfo, error)
UpdateArtworkAuditStatus(context.Context, *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error) UpdateArtworkAuditStatus(context.Context, *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error)
CheckArtworkBaseInfoEditable(context.Context, *ArtworkUidRequest) (*CheckArtworkEditableResponse, error)
CheckArtworkSupplementInfoEditable(context.Context, *ArtworkUidRequest) (*CheckArtworkEditableResponse, error)
GenerateArtworkSupplementInfo(context.Context, *ArtworkUidsRequest) (*emptypb.Empty, error)
mustEmbedUnimplementedArtistInfoArtworkServer() mustEmbedUnimplementedArtistInfoArtworkServer()
} }
@ -147,6 +175,15 @@ func (UnimplementedArtistInfoArtworkServer) GetArtworkLockDetail(context.Context
func (UnimplementedArtistInfoArtworkServer) UpdateArtworkAuditStatus(context.Context, *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error) { func (UnimplementedArtistInfoArtworkServer) UpdateArtworkAuditStatus(context.Context, *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateArtworkAuditStatus not implemented") return nil, status.Errorf(codes.Unimplemented, "method UpdateArtworkAuditStatus not implemented")
} }
func (UnimplementedArtistInfoArtworkServer) CheckArtworkBaseInfoEditable(context.Context, *ArtworkUidRequest) (*CheckArtworkEditableResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckArtworkBaseInfoEditable not implemented")
}
func (UnimplementedArtistInfoArtworkServer) CheckArtworkSupplementInfoEditable(context.Context, *ArtworkUidRequest) (*CheckArtworkEditableResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckArtworkSupplementInfoEditable not implemented")
}
func (UnimplementedArtistInfoArtworkServer) GenerateArtworkSupplementInfo(context.Context, *ArtworkUidsRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method GenerateArtworkSupplementInfo not implemented")
}
func (s *UnimplementedArtistInfoArtworkServer) XXX_SetProxyImpl(impl protocol.Invoker) { func (s *UnimplementedArtistInfoArtworkServer) XXX_SetProxyImpl(impl protocol.Invoker) {
s.proxyImpl = impl s.proxyImpl = impl
} }
@ -378,6 +415,93 @@ func _ArtistInfoArtwork_UpdateArtworkAuditStatus_Handler(srv interface{}, ctx co
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _ArtistInfoArtwork_CheckArtworkBaseInfoEditable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(ArtworkUidRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("CheckArtworkBaseInfoEditable", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfoArtwork_CheckArtworkSupplementInfoEditable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(ArtworkUidRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("CheckArtworkSupplementInfoEditable", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfoArtwork_GenerateArtworkSupplementInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(ArtworkUidsRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("GenerateArtworkSupplementInfo", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
// ArtistInfoArtwork_ServiceDesc is the grpc_go.ServiceDesc for ArtistInfoArtwork service. // ArtistInfoArtwork_ServiceDesc is the grpc_go.ServiceDesc for ArtistInfoArtwork service.
// It's only intended for direct use with grpc_go.RegisterService, // It's only intended for direct use with grpc_go.RegisterService,
// and not to be introspected or modified (even as a copy) // and not to be introspected or modified (even as a copy)
@ -413,6 +537,18 @@ var ArtistInfoArtwork_ServiceDesc = grpc_go.ServiceDesc{
MethodName: "UpdateArtworkAuditStatus", MethodName: "UpdateArtworkAuditStatus",
Handler: _ArtistInfoArtwork_UpdateArtworkAuditStatus_Handler, Handler: _ArtistInfoArtwork_UpdateArtworkAuditStatus_Handler,
}, },
{
MethodName: "CheckArtworkBaseInfoEditable",
Handler: _ArtistInfoArtwork_CheckArtworkBaseInfoEditable_Handler,
},
{
MethodName: "CheckArtworkSupplementInfoEditable",
Handler: _ArtistInfoArtwork_CheckArtworkSupplementInfoEditable_Handler,
},
{
MethodName: "GenerateArtworkSupplementInfo",
Handler: _ArtistInfoArtwork_GenerateArtworkSupplementInfo_Handler,
},
}, },
Streams: []grpc_go.StreamDesc{}, Streams: []grpc_go.StreamDesc{},
Metadata: "pb/artistinfoArtwork.proto", Metadata: "pb/artistinfoArtwork.proto",

View File

@ -2318,6 +2318,8 @@ type CheckUserLockRespond struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
LockTime string `protobuf:"bytes,1,opt,name=lockTime,proto3" json:"lockTime,omitempty"`
} }
func (x *CheckUserLockRespond) Reset() { func (x *CheckUserLockRespond) Reset() {
@ -2352,6 +2354,13 @@ func (*CheckUserLockRespond) Descriptor() ([]byte, []int) {
return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{30} return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{30}
} }
func (x *CheckUserLockRespond) GetLockTime() string {
if x != nil {
return x.LockTime
}
return ""
}
type ArtistSupplyListRequest struct { type ArtistSupplyListRequest struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -2896,6 +2905,8 @@ type UserLockRespond struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
LockTime string `protobuf:"bytes,1,opt,name=lockTime,proto3" json:"lockTime,omitempty"`
} }
func (x *UserLockRespond) Reset() { func (x *UserLockRespond) Reset() {
@ -2930,6 +2941,13 @@ func (*UserLockRespond) Descriptor() ([]byte, []int) {
return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{35} return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{35}
} }
func (x *UserLockRespond) GetLockTime() string {
if x != nil {
return x.LockTime
}
return ""
}
type BindInviteInvitedAccountRequest struct { type BindInviteInvitedAccountRequest struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -3276,13 +3294,15 @@ type FindUsersRequest struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
MgmtArtistUid string `protobuf:"bytes,1,opt,name=mgmtArtistUid,proto3" json:"mgmtArtistUid,omitempty"` MgmtArtistUid string `protobuf:"bytes,1,opt,name=mgmtArtistUid,proto3" json:"mgmtArtistUid,omitempty"`
InviterName string `protobuf:"bytes,2,opt,name=inviterName,proto3" json:"inviterName,omitempty"` //邀请人名称 InviterName string `protobuf:"bytes,2,opt,name=inviterName,proto3" json:"inviterName,omitempty"` //邀请人名称
ArtistRealName string `protobuf:"bytes,3,opt,name=ArtistRealName,proto3" json:"ArtistRealName,omitempty"` //画家真是姓名 ArtistRealName string `protobuf:"bytes,3,opt,name=ArtistRealName,proto3" json:"ArtistRealName,omitempty"` //画家真是姓名
InvitedCode string `protobuf:"bytes,4,opt,name=invitedCode,proto3" json:"invitedCode,omitempty"` //邀请码 InvitedCode string `protobuf:"bytes,4,opt,name=invitedCode,proto3" json:"invitedCode,omitempty"` //邀请码
Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"`
PageSize int32 `protobuf:"varint,6,opt,name=pageSize,proto3" json:"pageSize,omitempty"` PageSize int32 `protobuf:"varint,6,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
IsArtist bool `protobuf:"varint,9,opt,name=isArtist,proto3" json:"isArtist,omitempty"` //查询有艺术家uid的数据 IsArtist bool `protobuf:"varint,9,opt,name=isArtist,proto3" json:"isArtist,omitempty"` //查询有艺术家uid的数据
MgmtArtistUids []string `protobuf:"bytes,10,rep,name=mgmtArtistUids,proto3" json:"mgmtArtistUids,omitempty"`
IsLock bool `protobuf:"varint,11,opt,name=isLock,proto3" json:"isLock,omitempty"`
} }
func (x *FindUsersRequest) Reset() { func (x *FindUsersRequest) Reset() {
@ -3366,6 +3386,20 @@ func (x *FindUsersRequest) GetIsArtist() bool {
return false return false
} }
func (x *FindUsersRequest) GetMgmtArtistUids() []string {
if x != nil {
return x.MgmtArtistUids
}
return nil
}
func (x *FindUsersRequest) GetIsLock() bool {
if x != nil {
return x.IsLock
}
return false
}
type FindUsersResponse struct { type FindUsersResponse struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -3572,10 +3606,11 @@ type UserInfo struct {
HtmlType string `protobuf:"bytes,25,opt,name=htmlType,proto3" json:"htmlType,omitempty"` //法大大实名认证页面跳转参数 HtmlType string `protobuf:"bytes,25,opt,name=htmlType,proto3" json:"htmlType,omitempty"` //法大大实名认证页面跳转参数
EnvType string `protobuf:"bytes,26,opt,name=envType,proto3" json:"envType,omitempty"` //法大大实名认证页面跳转参数 EnvType string `protobuf:"bytes,26,opt,name=envType,proto3" json:"envType,omitempty"` //法大大实名认证页面跳转参数
InviteCode string `protobuf:"bytes,27,opt,name=inviteCode,proto3" json:"inviteCode,omitempty"` InviteCode string `protobuf:"bytes,27,opt,name=inviteCode,proto3" json:"inviteCode,omitempty"`
MgmtArtistId int64 `protobuf:"varint,28,opt,name=mgmtArtistId,proto3" json:"mgmtArtistId,omitempty"` //艺术家id MgmtArtistId int64 `protobuf:"varint,28,opt,name=mgmtArtistId,proto3" json:"mgmtArtistId,omitempty"` //艺术家id
LatestLockTime string `protobuf:"bytes,29,opt,name=latestLockTime,proto3" json:"latestLockTime,omitempty"` //最近一次上锁时间
// 手机号更新用 // 手机号更新用
Domain string `protobuf:"bytes,29,opt,name=domain,proto3" json:"domain,omitempty"` Domain string `protobuf:"bytes,30,opt,name=domain,proto3" json:"domain,omitempty"`
VerCode string `protobuf:"bytes,30,opt,name=verCode,proto3" json:"verCode,omitempty"` VerCode string `protobuf:"bytes,31,opt,name=verCode,proto3" json:"verCode,omitempty"`
} }
func (x *UserInfo) Reset() { func (x *UserInfo) Reset() {
@ -3785,6 +3820,13 @@ func (x *UserInfo) GetMgmtArtistId() int64 {
return 0 return 0
} }
func (x *UserInfo) GetLatestLockTime() string {
if x != nil {
return x.LatestLockTime
}
return ""
}
func (x *UserInfo) GetDomain() string { func (x *UserInfo) GetDomain() string {
if x != nil { if x != nil {
return x.Domain return x.Domain
@ -4021,6 +4063,7 @@ type UserView struct {
StageName string `protobuf:"bytes,25,opt,name=stageName,proto3" json:"stageName,omitempty"` StageName string `protobuf:"bytes,25,opt,name=stageName,proto3" json:"stageName,omitempty"`
CertificateNum string `protobuf:"bytes,26,opt,name=certificateNum,proto3" json:"certificateNum,omitempty"` CertificateNum string `protobuf:"bytes,26,opt,name=certificateNum,proto3" json:"certificateNum,omitempty"`
OpenBank string `protobuf:"bytes,27,opt,name=openBank,proto3" json:"openBank,omitempty"` OpenBank string `protobuf:"bytes,27,opt,name=openBank,proto3" json:"openBank,omitempty"`
LatestLockTime string `protobuf:"bytes,28,opt,name=latestLockTime,proto3" json:"latestLockTime,omitempty"`
} }
func (x *UserView) Reset() { func (x *UserView) Reset() {
@ -4244,6 +4287,13 @@ func (x *UserView) GetOpenBank() string {
return "" return ""
} }
func (x *UserView) GetLatestLockTime() string {
if x != nil {
return x.LatestLockTime
}
return ""
}
type FindUsersUserViewResponse struct { type FindUsersUserViewResponse struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -4591,227 +4641,237 @@ var file_pb_artistinfoUser_proto_rawDesc = []byte{
0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x26, 0x0a, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x26, 0x0a,
0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73,
0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0xed, 0x01, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x12, 0x1a, 0x0a,
0x0a, 0x17, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x17, 0x41, 0x72,
0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x72, 0x74, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e,
0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73,
0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64,
0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69,
0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70,
0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70,
0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x74, 0x0a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
0x17, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x74, 0x0a, 0x17, 0x41, 0x72, 0x74,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x6f, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x04, 0x64, 0x61,
0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x77,
0x61, 0x74, 0x61, 0x22, 0xfb, 0x07, 0x0a, 0x23, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0xfb, 0x07, 0x0a, 0x23, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75,
0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x61, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f,
0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x04, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x6e, 0x65,
0x72, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x52, 0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x12,
0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41,
0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x03, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f,
0x65, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x65, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x4e, 0x61,
0x63, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x4e, 0x61, 0x6d,
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b,
0x73, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a,
0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x03, 0x73, 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12,
0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x67,
0x75, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x0e,
0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12,
0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20,
0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x73, 0x73, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x18,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54,
0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65,
0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d,
0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
0x65, 0x73, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x14, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
0x69, 0x64, 0x65, 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09,
0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f,
0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x20, 0x0a,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x16, 0x20, 0x01,
0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x64, 0x43, 0x61, 0x72, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x64, 0x43, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52,
0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x64, 0x43, 0x61, 0x72,
0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x12,
0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28,
0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72, 0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69,
0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c,
0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x43, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f,
0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64,
0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42,
0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x61, 0x63, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x43, 0x61, 0x72,
0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d,
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1f,
0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a,
0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x21, 0x20, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52,
0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x74,
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x21, 0x20, 0x01, 0x28, 0x03, 0x52,
0x22, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a,
0x74, 0x22, 0x6d, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x22, 0x20, 0x01, 0x28,
0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x03, 0x52, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6d, 0x0a,
0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x18, 0x02, 0x20, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73,
0x22, 0x11, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x04,
0x6f, 0x6e, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x1f, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, 0x0f,
0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x12,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x1f,
0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d,
0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a,
0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x21, 0x0a, 0x1f, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a,
0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x67, 0x0a, 0x13, 0x42, 0x69, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x22,
0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x21, 0x0a, 0x1f, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76,
0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x72, 0x74, 0x6e, 0x64, 0x22, 0x67, 0x0a, 0x13, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
0x55, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x10, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20,
0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x13, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x10, 0x42,
0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44,
0x63, 0x63, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x46,
0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c,
0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69,
0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74,
0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x22, 0xf0, 0x01, 0x0a, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x10, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76,
0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x74, 0x69, 0x73, 0x74, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65,
0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d,
0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12,
0x09, 0x52, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e,
0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73,
0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76,
0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70,
0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x22, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12,
0x71, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69,
0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x67, 0x6d, 0x74, 0x41,
0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x0e, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x73, 0x12,
0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52,
0x67, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x22, 0x71, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55,
0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04,
0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x54, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02,
0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66,
0x72, 0x6f, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65,
0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0c, 0x52,
0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x49, 0x64, 0x43, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e,
0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x67, 0x65, 0x18, 0x06, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x41, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x14, 0x0a, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18,
0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a,
0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x28, 0x09, 0x52, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12,
0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x1e, 0x0a, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20,
0x64, 0x22, 0xba, 0x06, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x10, 0x0a, 0x03, 0x41, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x41, 0x67,
0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12,
0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x22, 0xe2, 0x06, 0x0a, 0x08, 0x55, 0x73,
0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74,
0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41,
0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18,
0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20,
0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x24,
0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18,
0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x73, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73,
0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x07,
0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b,
0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x72, 0x74, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65,
0x0a, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a,
0x52, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0b,
0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64,
0x65, 0x6e, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01,
0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x28, 0x03, 0x52, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65,
0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61,
0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61,
0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64,
0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x16, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73,
0x52, 0x65, 0x61, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x69, 0x73, 0x52, 0x65,
0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x13, 0x20, 0x01,
0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
0x61, 0x74, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65,
0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e,
0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x17,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
0x65, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x18, 0x20,
0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x74,
0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74,
0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70,
0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x19, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1b,
0x0a, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65,
0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64,
0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69,
0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x73, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61,
0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f,
0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18,
0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xf3, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xf3,
0x02, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x02, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74,
0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d,
@ -4839,7 +4899,7 @@ var file_pb_artistinfoUser_proto_rawDesc = []byte{
0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49,
0x64, 0x22, 0x8c, 0x06, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x16, 0x64, 0x22, 0xb4, 0x06, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x16,
0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x18, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x63, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09,
@ -4888,132 +4948,135 @@ var file_pb_artistinfoUser_proto_rawDesc = []byte{
0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x61, 0x6e, 0x6b,
0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x61, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x61, 0x6e, 0x6b,
0x22, 0x79, 0x0a, 0x19, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x55, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69,
0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x79, 0x0a, 0x19, 0x46, 0x69, 0x6e, 0x64,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73,
0x77, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x32, 0xbc, 0x0e, 0x0a, 0x0e, 0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x52, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43,
0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x61, 0x67, 0x65, 0x32, 0xbc, 0x0e, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e,
0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72,
0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x43, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x72, 0x64, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0c, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64,
0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e,
0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x07, 0x47, 0x65, 0x74,
0x55, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66,
0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65,
0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4f,
0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1e, 0x2e,
0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73,
0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e,
0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73,
0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12,
0x4c, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x2e,
0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x58, 0x0a,
0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x69, 0x73,
0x68, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x56, 0x65, 0x72, 0x69, 0x66,
0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x56, 0x65, 0x72, 0x69,
0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x43,
0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55,
0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63,
0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64,
0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70,
0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79,
0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53,
0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64,
0x22, 0x00, 0x12, 0x46, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x1b,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72,
0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63,
0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x43, 0x68,
0x65, 0x63, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63,
0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22,
0x00, 0x12, 0x43, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x00, 0x12, 0x52, 0x0a, 0x0c, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55,
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67,
0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x76,
0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x0a, 0x18, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69,
0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x61, 0x72, 0x74,
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x52, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49,
0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73,
0x69, 0x73, 0x68, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72,
0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x69, 0x73, 0x68, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64,
0x64, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x64, 0x55,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x41, 0x72, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73,
0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x46, 0x69, 0x6e, 0x64,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e,
0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x08, 0x55, 0x73, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72,
0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x73, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69,
0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73,
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x55, 0x73,
0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x12, 0x44, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61,
0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x74, 0x61, 0x12, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x61,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0c, 0x55, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76,
0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, 0x61, 0x72,
0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65,
0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x1a,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x14,
0x0a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66,
0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x09, 0x55, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x65, 0x53, 0x61,
0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x3b, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x33,
0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x18, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x2b, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e,
0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x41, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4f,
0x0a, 0x0c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1f,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e, 0x64,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x42, 0x69, 0x6e,
0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12,
0x3f, 0x0a, 0x08, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65,
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00,
0x12, 0x4a, 0x0a, 0x09, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e,
0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55,
0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65,
0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x11,
0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65,
0x77, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46,
0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x25, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x46, 0x69, 0x6e,
0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x00, 0x12, 0x54,
0x0a, 0x11, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x2e, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e,
0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x1a, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x6f, 0x50, 0x61, 0x72, 0x61,
0x6d, 0x73, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x53, 0x61,
0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65,
0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e,
0x66, 0x6f, 0x2e, 0x50, 0x72, 0x65, 0x53, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f,
0x3b, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x50,
0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

240
pb/artistinfoArtshow.proto Normal file
View File

@ -0,0 +1,240 @@
syntax = "proto3";
package artistinfo;
option go_package = "./;artistinfoArtshow";
//import "validate.proto";
import public "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto"; //使 google.protobuf.Empty
// protoc -I . -I ./pb --proto_path=. --go_out=./pb/artistinfoArtshow --go-triple_out=./pb/artistinfoArtshow --validate_out="lang=go:./pb/artistinfoArtshow" ./pb/artistinfoArtshow.proto
service ArtistInfoArtshow {
//
rpc GetArtshowVideoDetail(GetArtshowVideoDetailRequest)returns(ArtshowVideoInfo){} //
rpc GetArtshowVideoList(GetArtshowVideoListRequst)returns(GetArtshowVideoListResponse){}//
rpc CreateArtshowVideo(ArtshowVideoInfo)returns(google.protobuf.Empty){}
rpc BatchCreateArtshowVideo(BatchCreateArtshowVideoRequest)returns(google.protobuf.Empty){}
rpc AuditArtshowVideo(AuditArtshowVideoRequest)returns(google.protobuf.Empty){} //
rpc UpdateArtshowVideo(UpdateArtshowVideoRequest)returns(google.protobuf.Empty){} //
rpc DeletedArtshowVideo(DeletedArtshowVideoRequest)returns(google.protobuf.Empty){} //
// rpc CheckeExists(CheckeExistsRequest)returns(google.protobuf.Empty){} //
// rpc GetArtistListOfVideo(ArtistListRequest)returns(){}//
//
rpc GetArtistIndexDetail(GetArtistIndexDetailRequest)returns(ArtistIndexInfo){} //
rpc GetArtistIndexList(GetArtistIndexListRequest)returns(GetArtistIndexListResponse){}//
rpc CreateArtistIndex(ArtistIndexInfo)returns(google.protobuf.Empty){}
rpc BatchCreateArtistIndex(BatchCreateArtistIndexRequest)returns(google.protobuf.Empty){}
rpc AuditArtistIndex(AuditArtistIndexRequest)returns(google.protobuf.Empty){} //
rpc UpdateArtistIndex(UpdateArtistIndexRequest)returns(google.protobuf.Empty){} //
rpc DeletedArtistIndex(DeletedArtistIndexRequest)returns(google.protobuf.Empty){} //
// rpc GetArtistListOfArtistIndex(ArtistListRequest)returns(){}//
//
rpc GetArtistSupplementDetail(GetArtistSupplementDetailRequest)returns(ArtistSupplementInfo){} //
rpc GetArtistSupplementList(GetArtistSupplementListRequest)returns(GetArtistSupplementListResponse){}//
rpc CreateArtistSupplement(ArtistSupplementInfo)returns(google.protobuf.Empty){}
rpc BatchCreateArtistSupplement(BatchCreateArtistSupplementRequest)returns(google.protobuf.Empty){}
rpc AuditArtistSupplement(AuditArtistSupplementRequest)returns(google.protobuf.Empty){} //
rpc UpdateArtistSupplement(UpdateArtistSupplementRequest)returns(google.protobuf.Empty){} //
rpc DeletedArtistSupplement(DeletedArtistSupplementRequest)returns(google.protobuf.Empty){} //
}
message ArtistListRequest{//
int64 page =1;
int64 pageSize=2;
string artistName =3;
}
message videoPagination{
int64 page =1;
int64 pageSize=2;
int64 total=3;
}
message GetArtshowVideoListRequst{
int64 page =1;
int64 pageSize =2;
string artistName =3;
string artistUid =4;
string lockTime=5;
int64 auditStatus=6;
int64 status=7; // 2= 3=
}
message ArtshowVideoInfo {
int64 id =1;
string artistUid =2;
string lockTime =3;
string videoUrl =4;
int64 auditStatus =5;
string auditMark1 =6;
string auditMark2 =7;
int64 createdAt=8;
int64 updatedAt=9;
int64 deletedAt=10;
string artistName=11;
int64 status=12;//
bool editable=13;
}
message GetArtshowVideoListResponse{
repeated ArtshowVideoInfo data =1;
videoPagination page =2;
}
message AuditArtshowVideoRequest {
repeated int64 artshowVideoIds =1;
int64 auditStatus =5;
string auditMark1 =6;
string auditMark2 =7;
}
message UpdateArtshowVideoRequest {
int64 Id =1;
string artistUid =2;
string lockTime =3;
string videoUrl =4;
int64 auditStatus =5;
string auditMark1 =6;
string auditMark2 =7;
string artistName =8;
int64 status=9;//
}
message DeletedArtshowVideoRequest{
int64 Id=1; //
repeated int64 Ids =2; //
}
message BatchCreateArtshowVideoRequest{
repeated ArtshowVideoInfo data =1;
}
message CheckeExistsRequest{
string artistUid =1;
string lockTime =2;
}
message GetArtshowVideoDetailRequest{
string artistUid=1;
string lockTime=2;
int32 status=3;
int64 id=4;
}
//-------------------
message ArtistIndexInfo{
string artistUid=1;
string title=2;
string class=3;
int64 titleScore=4;
string score=5;
string types=6;
int64 status=7;
string lockTime=8;
string auditMark1=9;
string auditMark2=10;
int64 auditStatus=11;
int64 id=12;
int64 createdAt=13;
int64 updatedAt=14;
int64 deletedAt=15;
bool editable=16;
}
message GetArtistIndexListResponse{
repeated ArtistIndexInfo Data=1;
videoPagination page=2;
}
message GetArtistIndexDetailRequest{
int64 id =1;
}
message GetArtistIndexListRequest{
string artistUid =1;
string artistName =3;
string lockTime=4;
int64 auditStatus=5;
int64 status=6; // 2= 3=
int64 page=7;
int64 pageSize=8;
}
message BatchCreateArtistIndexRequest{
repeated string artistUids =1;
// string lockTime=2;
}
message AuditArtistIndexRequest{
repeated int64 artistIndexIds =1;
int64 auditStatus =5;
string auditMark1 =6;
string auditMark2 =7;
}
message UpdateArtistIndexRequest{
int64 id=12;
int64 titleScore=4;
string score=5;
int64 status=7;
}
message DeletedArtistIndexRequest{
int64 Id=1; //
repeated int64 Ids =2; //
}
//------------
message ArtistSupplementInfo{
string ArtistUid=1;
int64 Status=2;
string LockTime=3;
int64 AuditStatus=4;
string AuditMark1=5;
string AuditMark2=6;
string ArtistName=7;
string ArtistProfile=8;
int64 CountryArtLevel=9;
string ArtistCertPic=10;
string BankNum=11;
string BankName=12;
int64 id=13;
int64 createdAt=14;
int64 updatedAt=15;
int64 deletedAt=16;
bool editable=17;//
}
message GetArtistSupplementListResponse{
repeated ArtistSupplementInfo Data=1;
videoPagination page=2;
}
message GetArtistSupplementDetailRequest{
int64 id =1;
}
message GetArtistSupplementListRequest{
string artistUid =1;
string artistName =3;
string lockTime=4;
int64 auditStatus=5;
int64 status=6; // 2= 3=
int64 page=7;
int64 pageSize=8;
}
message BatchCreateArtistSupplementRequest{
repeated string artistUids =1;
}
message AuditArtistSupplementRequest{
repeated int64 artistSupplementIds =1;
int64 auditStatus =5;
string auditMark1 =6;
string auditMark2 =7;
}
message UpdateArtistSupplementRequest{
int64 id=1;
string ArtistProfile=2;
int64 CountryArtLevel=3;
string ArtistCertPic=4;
string BankNum=5;
string BankName=6;
}
message DeletedArtistSupplementRequest{
int64 Id=1; //
repeated int64 Ids =2; //
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,9 @@ option go_package = "./;artistInfoArtwork";
import "validate.proto"; import "validate.proto";
import public "google/protobuf/timestamp.proto"; import public "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto"; //使 google.protobuf.Empty
// protoc -I . -I ./pb --proto_path=. --go_out=./pb/artistInfoArtwork --go-triple_out=./pb/artistInfoArtwork --validate_out="lang=go:./pb/artistInfoArtwork" ./pb/artistinfoArtwork.proto // protoc -I . -I ./pb --proto_path=. --go_out=./pb/artistInfoArtwork --go-triple_out=./pb/artistInfoArtwork --validate_out="lang=go:./pb/artistInfoArtwork" ./pb/artistinfoArtwork.proto
service ArtistInfoArtwork { service ArtistInfoArtwork {
// //
rpc CreateArtworkLockRecord(CreateArtworkLockRecordReq)returns(ArtworkCommonNoParams){} // rpc CreateArtworkLockRecord(CreateArtworkLockRecordReq)returns(ArtworkCommonNoParams){} //
@ -14,10 +16,18 @@ service ArtistInfoArtwork {
rpc DeleteArtworkRecord(DeleteArtworkRecordRequest)returns(ArtworkCommonNoParams){} // rpc DeleteArtworkRecord(DeleteArtworkRecordRequest)returns(ArtworkCommonNoParams){} //
rpc GetArtworkLockDetail(GetArtworkLockDetailRequest)returns(ArtistLockInfo){}// rpc GetArtworkLockDetail(GetArtworkLockDetailRequest)returns(ArtistLockInfo){}//
rpc UpdateArtworkAuditStatus(UpdateArtworkAuditStatusRequest)returns(ArtworkCommonNoParams){}// rpc UpdateArtworkAuditStatus(UpdateArtworkAuditStatusRequest)returns(ArtworkCommonNoParams){}//
rpc CheckArtworkBaseInfoEditable(ArtworkUidRequest)returns(CheckArtworkEditableResponse){}//
rpc CheckArtworkSupplementInfoEditable(ArtworkUidRequest)returns(CheckArtworkEditableResponse){}//
rpc GenerateArtworkSupplementInfo(ArtworkUidsRequest)returns(google.protobuf.Empty){}//
} }
message ArtworkCommonNoParams{} message ArtworkCommonNoParams{}
message ArtworkUidRequest{
string ArtworkUid =1 [(validate.rules).message.required = true]; //uid
}
message ArtworkUidsRequest{
repeated string ArtworkUids =1 [(validate.rules).message.required = true]; //uid列表
}
message CreateArtworkLockRecordReq{ message CreateArtworkLockRecordReq{
string artistUid=1 [(validate.rules).message.required = true];//uid string artistUid=1 [(validate.rules).message.required = true];//uid
string artworkUid=2 [(validate.rules).message.required = true];//uid string artworkUid=2 [(validate.rules).message.required = true];//uid
@ -28,16 +38,20 @@ message CreateArtworkLockRecordReq{
message ArtworkLockActionRequest{ message ArtworkLockActionRequest{
string artistUid =1 ;//uid string artistUid =1 ;//uid
int32 lock =2; //2= 3= int32 lock =2; //2= 3=
string lockTime=3;//sys_user表的latest_lock_time一致
} }
enum ArtworkQueryMode { enum ArtworkQueryMode {
NowPreSaveArtwork = 0; // NowPreSaveArtwork = 0; //
NowLockedArtwork = 1; // NowLockedArtwork = 1; //
ArtistCanSee = 2; // NowPreSaveAndLocked=2;//
AllUnlockArtwork = 3; //() NowAuditFlowOfBase= 3; //
NowAuditFlowOfSupplementing = 4; //
AllUnlockArtwork = 5; //()
} }
message GetArtworkLockRecordsRequest{ message GetArtworkLockRecordsRequest{
string artistUid =1 [(validate.rules).message.required = true];//uid string artistUid =1 [(validate.rules).message.required = true];//uid
ArtworkQueryMode queryType =2 ; // ArtworkQueryMode queryType =2 ; //
int64 AuditStatus =3; //
} }
message ArtistLockInfo{ message ArtistLockInfo{
@ -45,12 +59,24 @@ message ArtistLockInfo{
string artworkUid=2; string artworkUid=2;
int64 status=3; int64 status=3;
string lockTime=4; string lockTime=4;
int64 auditStatus=5; int64 createdAt=5;
string auditMark=6; int64 updatedAt=6;
string auditMark2=7; int64 deletedAt=7;
int64 createdAt=15;
int64 updatedAt=16; //
int64 deletedAt=17; int32 baseAuditStatus=12;
string baseAuditMark=13;
string baseAuditMark2=14;
//
int32 supplementAuditStatus=15;
string supplementAuditMark=16;
string supplementAuditMark2=17;
//
int32 auditFlowIndex =18;
//
bool baseEditable =19;
bool supplementEditable=20;
} }
message ArtworkLockList{ message ArtworkLockList{
@ -69,7 +95,7 @@ message GetArtworkLockHistoryRequest{
string artistUid=1; string artistUid=1;
} }
message GetArtworkLockDetailRequest{ message GetArtworkLockDetailRequest{
string artworkUid=1 [(validate.rules).message.required = true];//uid; string artworkUid=1 [(validate.rules).message.required = true];//uid;
} }
//---- //----
message ArtworkPreviewInfo { message ArtworkPreviewInfo {
@ -84,12 +110,22 @@ message ArtworkPreviewInfo {
string artworkUid=9; string artworkUid=9;
string createdDate=10; string createdDate=10;
int32 lockStatus=11; int32 lockStatus=11;
int64 auditStatus=12;
string auditMark=13; //
string auditMark2=14; int32 baseAuditStatus=12;
int64 createdAt=15; string baseAuditMark=13;
int64 updatedAt=16; string baseAuditMark2=14;
int64 deletedAt=17;
//
int32 supplementAuditStatus=15;
string supplementAuditMark=16;
string supplementAuditMark2=17;
//
int32 auditFlowIndex =18;
int64 createdAt=19;
int64 updatedAt=20;
int64 deletedAt=21;
} }
message GetArtworkLockHistoryResponse{ message GetArtworkLockHistoryResponse{
repeated ArtworkLockRecord groupList =1; repeated ArtworkLockRecord groupList =1;
@ -103,4 +139,9 @@ message UpdateArtworkAuditStatusRequest{
int64 auditStatus=5; int64 auditStatus=5;
string auditMark=6; string auditMark=6;
string auditMark2=7; string auditMark2=7;
} int64 flowIndex=8;// 2= 3=
repeated string artworkUids=9; // artworkUid二选一
}
message CheckArtworkEditableResponse{
bool editable =1;
}

View File

@ -273,7 +273,7 @@ message CheckUserLockRequest {
} }
message CheckUserLockRespond { message CheckUserLockRespond {
string lockTime =1;
} }
@ -340,7 +340,7 @@ message UserLockRequest {
} }
message UserLockRespond { message UserLockRespond {
string lockTime =1;
} }
@ -390,6 +390,8 @@ message FindUsersRequest{
int32 page=5; int32 page=5;
int32 pageSize=6; int32 pageSize=6;
bool isArtist=9; //uid的数据 bool isArtist=9; //uid的数据
repeated string mgmtArtistUids =10;
bool isLock =11;
// string Account = 3; // string Account = 3;
// string TelNum = 4; // string TelNum = 4;
// bool IsLock = 5; // bool IsLock = 5;
@ -443,10 +445,10 @@ message UserInfo{
string envType = 26;// string envType = 26;//
string inviteCode = 27; string inviteCode = 27;
int64 mgmtArtistId = 28; //id int64 mgmtArtistId = 28; //id
string latestLockTime=29; //
// //
string domain =29; string domain =30;
string verCode=30; string verCode=31;
} }
message PreSaveArtistInfoData{ message PreSaveArtistInfoData{
@ -497,6 +499,7 @@ message UserView{
string stageName=25; string stageName=25;
string certificateNum=26; string certificateNum=26;
string openBank=27; string openBank=27;
string latestLockTime=28;
} }
message FindUsersUserViewResponse{ message FindUsersUserViewResponse{
repeated UserView data=1; repeated UserView data=1;

View File

@ -2,6 +2,7 @@ package model
import ( import (
"fmt" "fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"os" "os"
"strings" "strings"
"time" "time"
@ -94,21 +95,24 @@ func Database(conn string) {
func migration() { func migration() {
//自迁移模式 //自迁移模式
err := DB.AutoMigrate( err := DB.AutoMigrate(
&model.Bank{}, &old.Bank{},
&model.RealName{}, &model.RealName{},
&model.User{}, &model.User{},
&model.Invite{}, &model.Invite{},
&model.Artwork{}, &old.Artwork{},
//&model.Contract{}, //&model.Contract{},
//&model.SupplyInfo{}, //&model.SupplyInfo{},
//&model.ExhVideo{}, //&model.ExhVideo{},
//&model.ExhExam{}, //&model.ExhExam{},
&model.ArtistInfo{}, &old.ArtistInfo{},
&model.UserInvited{}, &model.UserInvited{},
&model.ArtworkState{}, &old.ArtworkState{},
&model.ArtworkBatch{}, &old.ArtworkBatch{},
&model.TempArtistInfo{}, &model.TempArtistInfo{},
&model.ArtworkLockRecord{}, &model.ArtworkLockRecord{},
&model.ArtshowVideoRecord{}, //画展视频记录
&model.ArtshowArtistIndex{}, //画展-画家指数
&model.ArtshowArtistSupplement{}, //画展-画家补充信息
) )
if err != nil { if err != nil {
fmt.Println("register table fail") fmt.Println("register table fail")