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("第一处")
config.SetProviderService(&controller.ArtistInfoUserProvider{})
config.SetProviderService(&controller.ArtistInfoArtworkProvider{})
config.SetProviderService(&controller.ArtistInfoArtshowProvider{})
//config.SetProviderService(&controller.ContractProvider{})
//config.SetProviderService(&controller.ArtWorkProvider{})
//config.SetProviderService(&controller.SupplyProvider{})

View File

@ -11,6 +11,7 @@ import (
"errors"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/logic"
"github.com/fonchain/fonchain-artistinfo/pb/artistInfoArtwork"
emptypb "google.golang.org/protobuf/types/known/emptypb"
)
var _ artistInfoArtwork.ArtistInfoArtworkServer = new(ArtistInfoArtworkProvider)
@ -20,7 +21,32 @@ type ArtistInfoArtworkProvider struct {
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) {
if request.FlowIndex != 2 && request.FlowIndex != 3 {
return nil, errors.New("FlowIndex 不能为空")
}
return a.artistInfoLogic.UpdateArtworkAuditStatus(request)
}
@ -41,16 +67,16 @@ func (a ArtistInfoArtworkProvider) ArtworkLockAction(ctx context.Context, reques
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 删除话走锁记录
func (a ArtistInfoArtworkProvider) DeleteArtworkRecord(ctx context.Context, request *artistInfoArtwork.DeleteArtworkRecordRequest) (*artistInfoArtwork.ArtworkCommonNoParams, error) {
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 查询画作历史记录,按照锁定时间分组
func (a ArtistInfoArtworkProvider) GetArtworkLockHistoryGroup(ctx context.Context, request *artistInfoArtwork.GetArtworkLockHistoryRequest) (*artistInfoArtwork.GetArtworkLockHistoryResponse, error) {
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
import (
"context"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/internal/logic"
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo"
)
type SupplyProvider struct {
supplyinfo.UnimplementedSupplyInfoServer
SupplyLogic *logic.Supply
}
func (a *SupplyProvider) GetSupplyInfoList(ctx context.Context, req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetSupplyInfoList(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetSupplyInfo(ctx context.Context, req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetSupplyInfo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) UpdateSupplyInfo(ctx context.Context, req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.UpdateSupplyInfo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetVideoList(ctx context.Context, req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetVideoList(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetVideo(ctx context.Context, req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetVideo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) UpdateVideo(ctx context.Context, req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.UpdateVideo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetExam(ctx context.Context, req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetExam(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetExamList(ctx context.Context, req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetExamList(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) UpdateExam(ctx context.Context, req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.UpdateExam(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetArtistInfoList(ctx context.Context, req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetArtistInfoList(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *SupplyProvider) GetArtistInfo(ctx context.Context, req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
fmt.Println("第一处")
if rep, err = a.SupplyLogic.GetArtistInfo(req); err != nil {
return nil, err
}
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
}
//
//type SupplyProvider struct {
// supplyinfo.UnimplementedSupplyInfoServer
// SupplyLogic *logic.Supply
//}
//
//func (a *SupplyProvider) GetSupplyInfoList(ctx context.Context, req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetSupplyInfoList(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetSupplyInfo(ctx context.Context, req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetSupplyInfo(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) UpdateSupplyInfo(ctx context.Context, req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.UpdateSupplyInfo(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetVideoList(ctx context.Context, req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetVideoList(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetVideo(ctx context.Context, req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetVideo(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) UpdateVideo(ctx context.Context, req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.UpdateVideo(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetExam(ctx context.Context, req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetExam(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetExamList(ctx context.Context, req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetExamList(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) UpdateExam(ctx context.Context, req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.UpdateExam(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetArtistInfoList(ctx context.Context, req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetArtistInfoList(req); err != nil {
// return nil, err
// }
// return rep, nil
//}
//
//func (a *SupplyProvider) GetArtistInfo(ctx context.Context, req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
// fmt.Println("第一处")
// if rep, err = a.SupplyLogic.GetArtistInfo(req); err != nil {
// return nil, err
// }
// 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"
"github.com/fonchain/fonchain-artistinfo/pkg/m"
"github.com/fonchain/fonchain-artistinfo/pkg/service"
"github.com/fonchain/fonchain-artistinfo/pkg/util/stime"
"go.uber.org/zap"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"time"
)
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) {
var tx = db.DB.Model(model.User{})
var tx = db.DB.Model(model.User{}).Begin()
switch {
case req.Id != 0:
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))
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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.LockTime = now
//if !req.IsLock {
// var vas model.ExhVideo
// vas.UserId = uint(req.Id)
// if err = db.DB.Model(&vas).Update("state", 5).Where("state = 1 or state = 2 or state = 3").Error; err != nil {
// zap.L().Error("get user info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
// var ee model.ExhExam
// ee.UserId = uint(req.Id)
// 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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
// var si model.SupplyInfo
// 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
// }
//}
if !req.IsLock {
// 解锁时与另外4个模块联动
if err = db.DB.Model(model.ArtworkLockRecord{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
return nil, err
}
if err = db.DB.Model(model.ArtshowArtistSupplement{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
return nil, err
}
if err = db.DB.Model(model.ArtshowArtistIndex{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
return nil, err
}
if err = db.DB.Model(model.ArtshowVideoRecord{}).Where("artist_uid = ? AND status =2 ", req.ArtistUid).Update("status", 3).Error; err != nil {
return nil, err
}
}
tx.Commit()
return rep, nil
}
@ -386,30 +379,30 @@ func UnFinishList(req *artistInfoUser.UnFinishListRequest) (rep *artistInfoUser.
// return nil, err
//}
//rep.AccountStateList = accountStateCount
var supplyInfo model.SupplyInfo
var supplyInfoCount int64
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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.SupplyInfoList += supplyInfoCount
var exhVideo model.ExhVideo
var exhVideoCount int64
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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.SupplyInfoList += exhVideoCount
var exhExam model.ExhExam
var exhExamCount int64
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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.SupplyInfoList += exhExamCount
//var supplyInfo model.SupplyInfo
//var supplyInfoCount int64
//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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
//}
//rep.SupplyInfoList += supplyInfoCount
//var exhVideo model.ExhVideo
//var exhVideoCount int64
//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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
//}
//rep.SupplyInfoList += exhVideoCount
//var exhExam model.ExhExam
//var exhExamCount int64
//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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
//}
//rep.SupplyInfoList += exhExamCount
return rep, nil
}
@ -507,6 +500,7 @@ func FindUser(req *artistInfoUser.FindUserRequest) (rep *artistInfoUser.UserInfo
HtmlType: data.Htmltype,
EnvType: data.Envtype,
InviteCode: data.InviteCode,
LatestLockTime: data.LatestLockTime,
}
return rep, nil
@ -517,6 +511,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
var (
datas = []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!=''")
)
if req.InvitedCode != "" {
@ -525,8 +520,11 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
if 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 != "" {
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",
Value: "%" + req.InviterName + "%",
})
@ -534,6 +532,15 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
if req.IsArtist {
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
if err != nil {
@ -588,6 +595,7 @@ func FindUserList(req *artistInfoUser.FindUsersRequest) (rep []*artistInfoUser.U
HtmlType: v.Htmltype,
EnvType: v.Envtype,
InviteCode: v.InviteCode,
LatestLockTime: v.LatestLockTime,
})
}
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) {
resp = []model.UserView{}
var (
tx = db.DB.Model(model.UserView{})
tx = db.DB.Model(model.UserView{}).Order("created_at desc")
)
if req.InvitedCode != "" {
tx = tx.Where("invited_code = ?", req.InvitedCode)
}
if 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 != "" {
tx = tx.Where("inviter_real_name = ?", req.InviterName)
tx = tx.Where("inviter_real_name LIKE '%?%'", req.InviterName)
}
if req.IsArtist {
tx = tx.Where("mgmt_artist_uid !='' ")
}
err = tx.Count(&total).Scopes(db.Pagination(req.Page, req.PageSize)).Find(&resp).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 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 {
var data = model.ArtworkLockRecord{
ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid,
Status: in.Status,
LockTime: in.LockTime,
AuditStatus: 1,
//AuditMark: in.AuditMark,
//AuditMark2: in.AuditMark2,
ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid,
Status: in.Status,
LockTime: in.LockTime,
}
return db.DB.Create(&data).Error
}
func UpdateArtworkLockRecord(in *model.ArtworkLockRecord) error {
var data = model.ArtworkLockRecord{
ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid,
Status: in.Status,
LockTime: in.LockTime,
AuditStatus: in.AuditStatus,
AuditMark: in.AuditMark,
AuditMark2: in.AuditMark2,
ArtistUid: in.ArtistUid,
ArtworkUid: in.ArtworkUid,
Status: in.Status,
LockTime: in.LockTime,
BaseAuditStatus: in.BaseAuditStatus,
BaseAuditMark: in.BaseAuditMark,
BaseAuditMark2: in.BaseAuditMark2,
SupplementAuditStatus: in.SupplementAuditStatus,
SupplementAuditMark: in.SupplementAuditMark,
SupplementAuditMark2: in.SupplementAuditMark2,
}
var thisData model.ArtworkLockRecord
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
db.DB.Model(model.ArtworkLockRecord{}).
Where("status = 1 AND lock_time=''").Where(" artist_uid = ?", artistUid).
@ -73,9 +73,14 @@ func BatchLockArtworks(artistUid string) error {
if artworkUids == nil {
return nil
}
if lockTime == "" {
lockTime = stime.TimeToString(time.Now(), stime.Format_Normal_YMDhms)
}
var updateMap = map[string]any{
"status": 2,
"lock_time": stime.TimeToString(time.Now(), stime.Format_Normal_YMDhms),
"status": 2,
"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
}
@ -105,39 +110,52 @@ func GetArtworkLockDetail(artworkUid string) (data model.ArtworkLockRecord, err
err = db.DB.Where("artwork_uid = ?", artworkUid).First(&data).Error
return
}
func GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (resp *artistInfoArtwork.ArtworkLockList, err error) {
func GetArtworkLockRecords(req *artistInfoArtwork.GetArtworkLockRecordsRequest) (resp *artistInfoArtwork.ArtworkLockList, err error) {
var (
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{}
if req.ArtistUid != "" {
tx = tx.Where("artist_uid = ?", req.ArtistUid)
}
switch req.QueryType {
case artistInfoArtwork.ArtworkQueryMode_NowPreSaveArtwork: //当前暂存的画作
tx = tx.Where("status = 1")
case artistInfoArtwork.ArtworkQueryMode_NowLockedArtwork: //当前已锁定的画作
tx = tx.Where("status = 2", req.ArtistUid)
case artistInfoArtwork.ArtworkQueryMode_ArtistCanSee: //画家能看到的画作(暂存和锁定) //弃用,画家看到的是暂存的画作
tx = tx.Where("status < 3")
tx = tx.Where("status = 2")
case artistInfoArtwork.ArtworkQueryMode_NowPreSaveAndLocked: //当前暂存和已锁定的画作(也就是用户端画作管理中的数据)
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: //所有已解锁的画作(历史画作)
tx = tx.Where("status = 3 OR status = 2")
//case artistInfoArtwork.ArtworkQueryMode_AllHistoryArtwork: //所有历史画作
// tx = tx.Where("status > 1")
}
if req.AuditStatus != 0 {
tx = tx.Where("audit_status = ?", req.AuditStatus)
}
err = tx.Find(&datas).Error
for _, v := range datas {
resp.Data = append(resp.Data, &artistInfoArtwork.ArtistLockInfo{
ArtistUid: v.ArtistUid,
ArtworkUid: v.ArtworkUid,
Status: v.Status,
LockTime: v.LockTime,
AuditStatus: v.AuditStatus,
AuditMark: v.AuditMark,
AuditMark2: v.AuditMark2,
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
ArtistUid: v.ArtistUid,
ArtworkUid: v.ArtworkUid,
Status: v.Status,
LockTime: v.LockTime,
BaseAuditStatus: int32(v.BaseAuditStatus),
BaseAuditMark: v.BaseAuditMark,
BaseAuditMark2: v.BaseAuditMark2,
SupplementAuditStatus: int32(v.SupplementAuditStatus),
SupplementAuditMark: v.SupplementAuditMark,
SupplementAuditMark2: v.SupplementAuditMark2,
AuditFlowIndex: int32(v.AuditFlowIndex),
CreatedAt: v.CreatedAt.Unix(),
UpdatedAt: v.UpdatedAt.Unix(),
DeletedAt: int64(v.DeletedAt),
})
}
return
@ -152,7 +170,9 @@ func HasBeenLocked(artistUid string) bool {
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
err := db.DB.Model(model.ArtworkLockRecord{}).Where("artwork_uid = ?", artworkUid).First(&thisData).Error
if err != nil {
@ -162,8 +182,39 @@ func UpdateAuditStatus(artworkUid string, auditStatus int64, remark1 string, rem
return err
}
}
thisData.AuditStatus = auditStatus
thisData.AuditMark = remark1
thisData.AuditMark2 = remark2
switch flowIndex {
case 2:
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
}
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 (
"errors"
<<<<<<< HEAD
=======
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"time"
>>>>>>> xjjdev
"github.com/fonchain/fonchain-artistinfo/cmd/model"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
@ -11,9 +16,15 @@ import (
"gorm.io/gorm"
)
<<<<<<< HEAD
func GetMgmtContractByArtistUid(artistUid string, contractType int32) (err error) {
var contract model.Contract
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))
err = errors.New(m.ERROR_SELECT)
return
@ -28,6 +39,7 @@ func CreateArtistContract(tx *gorm.DB, contract *model.Contract) (err error) {
err = errors.New(m.CREATE_ERROR)
return
}
<<<<<<< HEAD
return
}
@ -35,6 +47,122 @@ func GetMgmtContractByArtworkUid(artworkUid string, artworkType int32) (err erro
//画作有合同类型是26的都是 点击过"著作权代理转让服务合同"的
var contract model.Contract
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))
err = errors.New(m.ERROR_SELECT)
return
@ -65,6 +193,7 @@ func CreateArtworkContract(tx *gorm.DB, artworkUid string, artistUid string, con
return
}
<<<<<<< HEAD
// func FinishContract(tx *gorm.DB, id string) (contract model.Contract, err error) {
// if err = tx.Where("transaction_id = ?", id).First(&contract).Error; err != nil {
// 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
// }
=======
// 更新交易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
import (
"encoding/json"
"errors"
"github.com/fonchain/fonchain-artistinfo/cmd/model"
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo"
db "github.com/fonchain/fonchain-artistinfo/pkg/db"
"github.com/fonchain/fonchain-artistinfo/pkg/m"
"go.uber.org/zap"
)
func GetSupplyInfoList(id, num int32) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
rep = &supplyinfo.GetSupplyInfoListRespond{}
var datas []*supplyinfo.GetSupplyInfoData
var supplyInfoList []model.SupplyInfo
if err := db.DB.Where("user_id = ? and types <= ?", id, num).Find(&supplyInfoList).Error; err != nil {
zap.L().Error("get supplyInfo infos err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
for i, v := range supplyInfoList {
supplyInfoList[i].CreateTime = v.CreatedAt.Format("2006-01-02")
data := &supplyinfo.GetSupplyInfoData{}
data.ID = uint64(supplyInfoList[i].ID)
data.ArtworkId = supplyInfoList[i].ArtworkId
data.ArtistId = supplyInfoList[i].ArtistId
data.UserId = uint64(supplyInfoList[i].UserId)
data.Name = supplyInfoList[i].Name
data.ModelYear = supplyInfoList[i].ModelYear
data.Photo = supplyInfoList[i].Photo
data.ArtistPhoto = supplyInfoList[i].ArtistPhoto
data.Width = uint64(supplyInfoList[i].Width)
data.Height = uint64(supplyInfoList[i].Height)
data.Ruler = uint64(supplyInfoList[i].Ruler)
data.ExhibitInfo = supplyInfoList[i].ExhibitInfo
data.ExhibitPic1 = supplyInfoList[i].ExhibitPic1
data.ExhibitPic2 = supplyInfoList[i].ExhibitPic2
data.CreateTime = supplyInfoList[i].CreateTime
data.Introduct = supplyInfoList[i].Introduct
data.NetworkTrace = supplyInfoList[i].NetworkTrace
data.CreateAddress = supplyInfoList[i].CreateAddress
data.Url = supplyInfoList[i].Url
data.Types = supplyInfoList[i].State
data.Remark = supplyInfoList[i].Remark
data.Remark2 = supplyInfoList[i].Remark2
data.Enable = supplyInfoList[i].Enable
datas = append(datas, data)
}
rep.Data = datas
return
}
func GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
rep = &supplyinfo.GetSupplyInfoData{}
var supplyInfoTmp model.SupplyInfo
if err := db.DB.Where("id = ?", req.Id).Find(&supplyInfoTmp).Error; err != nil {
zap.L().Error("get supplyInfo infos err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.ID = uint64(supplyInfoTmp.ID)
rep.ArtworkId = supplyInfoTmp.ArtworkId
rep.ArtistId = supplyInfoTmp.ArtistId
rep.UserId = uint64(supplyInfoTmp.UserId)
rep.Name = supplyInfoTmp.Name
rep.ModelYear = supplyInfoTmp.ModelYear
rep.Photo = supplyInfoTmp.Photo
rep.ArtistPhoto = supplyInfoTmp.ArtistPhoto
rep.Width = uint64(supplyInfoTmp.Width)
rep.Height = uint64(supplyInfoTmp.Height)
rep.Ruler = uint64(supplyInfoTmp.Ruler)
rep.ExhibitInfo = supplyInfoTmp.ExhibitInfo
rep.ExhibitPic1 = supplyInfoTmp.ExhibitPic1
rep.ExhibitPic2 = supplyInfoTmp.ExhibitPic2
rep.CreateTime = supplyInfoTmp.CreateTime
rep.Introduct = supplyInfoTmp.Introduct
rep.NetworkTrace = supplyInfoTmp.NetworkTrace
rep.CreateAddress = supplyInfoTmp.CreateAddress
rep.Url = supplyInfoTmp.Url
rep.Types = supplyInfoTmp.State
rep.Remark = supplyInfoTmp.Remark
rep.Remark2 = supplyInfoTmp.Remark2
rep.Enable = supplyInfoTmp.Enable
return
}
func UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
var SupplyInfo model.SupplyInfo
if err := db.DB.Where("id = ? ", req.ID).Find(&SupplyInfo).Error; err != nil {
zap.L().Error("get supplyInfo info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
SupplyInfo.CreateTime = req.CreateTime
SupplyInfo.ModelYear = req.ModelYear
SupplyInfo.NetworkTrace = req.NetworkTrace
SupplyInfo.Url = req.Url
SupplyInfo.Introduct = req.Introduct
SupplyInfo.State = req.Types
SupplyInfo.ExhibitInfo = req.ExhibitInfo
SupplyInfo.ExhibitPic1 = req.ExhibitPic1
SupplyInfo.ExhibitPic2 = req.ExhibitPic2
if err = db.DB.Save(&SupplyInfo).Error; err != nil {
zap.L().Error("save supplyInfo info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return
}
return
}
func GetVideoList(id int32) (rep *supplyinfo.GetVideoListRespond, err error) {
rep = &supplyinfo.GetVideoListRespond{}
var datas []*supplyinfo.GetVideoListData
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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
for _, v := range ExhVideo {
var data supplyinfo.GetVideoListData
data.ID = uint64(v.ID)
data.UserId = uint64(v.UserId)
data.Url = v.Url
data.Types = v.State
data.Remark = v.Remark
data.Remark2 = v.Remark2
data.Enable = v.Enable
datas = append(datas, &data)
}
rep.Data = datas
return
}
func GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
rep = &supplyinfo.GetVideoListData{}
var ExhVideo model.ExhVideo
if err := db.DB.Where("id = ?", req.ID).First(&ExhVideo).Error; err != nil {
zap.L().Error("get exhVideo info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.ID = uint64(ExhVideo.ID)
rep.UserId = uint64(ExhVideo.UserId)
rep.Url = ExhVideo.Url
rep.Types = ExhVideo.State
rep.Remark = ExhVideo.Remark
rep.Remark2 = ExhVideo.Remark2
rep.Enable = ExhVideo.Enable
return
}
func UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
rep = &supplyinfo.UpdateVideoRespond{}
var ExhVideo model.ExhVideo
if err := db.DB.Where("id = ? ", req.ID).First(&ExhVideo).Error; err != nil {
zap.L().Error("get exhVideo info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
ExhVideo.Url = req.Url
ExhVideo.State = req.Types
if err := db.DB.Save(&ExhVideo).Error; err != nil {
zap.L().Error("save exhVideo info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return nil, err
}
return
}
func GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
rep = &supplyinfo.GetExamListData{}
var ExhExam model.ExhExam
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 nil, err
}
rep.ID = uint64(ExhExam.ID)
rep.UserId = uint64(ExhExam.UserId)
rep.Title = ExhExam.Title
rep.Class = ExhExam.Class
rep.TitleScore = uint64(ExhExam.TitleScore)
rep.Score = ExhExam.Score
rep.Types = ExhExam.State
rep.Remark = ExhExam.Remark
rep.Remark2 = ExhExam.Remark2
rep.Enable = ExhExam.Enable
return
}
func GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
rep = &supplyinfo.GetExamListRespond{}
var datas []*supplyinfo.GetExamListData
var ExhExam []model.ExhExam
if err := db.DB.Where("user_id = ? and types <=4", req.ID).Find(&ExhExam).Error; err != nil {
zap.L().Error("get exhVideo infos err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
for _, v := range ExhExam {
var data supplyinfo.GetExamListData
data.ID = uint64(v.ID)
data.UserId = uint64(v.UserId)
data.Title = v.Title
data.Class = v.Class
data.TitleScore = uint64(v.TitleScore)
data.Score = v.Score
data.Types = v.State
data.Remark = v.Remark
data.Remark2 = v.Remark2
data.Enable = v.Enable
datas = append(datas, &data)
}
rep.Data = datas
return
}
func UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
rep = &supplyinfo.UpdateExamRespond{}
var ExhExam model.ExhExam
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 nil, err
}
ExhExam.Score = req.Score
ExhExam.Class = req.Class
ExhExam.State = req.Types
ExhExam.Title = req.Title
ExhExam.Class = req.Class
ExhExam.TitleScore = uint(req.TitleScore)
ExhExam.Score = req.Score
ExhExam.State = req.Types
ExhExam.Remark = req.Remark
ExhExam.Remark2 = req.Remark2
var score map[string]int32
var titleScore int32
json.Unmarshal([]byte(req.Score), &score)
for _, v := range score {
titleScore = titleScore + v
}
ExhExam.TitleScore = uint(titleScore)
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)
return
}
if req.Types == "2" {
type titleScore struct {
UserId uint
Score int
}
var tmp []model.ExhExam
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
}
var ranking int
for k, v := range tmp {
if v.UserId == uint(req.UserId) {
ranking = k
}
}
percent := (ranking + 1) / len(tmp) * 100
rep.Percent = int32(percent)
return
}
return
}
func GetArtistInfoList(id int32) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
rep = &supplyinfo.GetArtistInfoListRespond{}
var datas []*supplyinfo.GetArtistInfoListData
var artistInfoTmp []model.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))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
for k, v := range artistInfoTmp {
artistInfoTmp[k].Model.ID = v.ID
data := &supplyinfo.GetArtistInfoListData{}
data.ID = uint64(artistInfoTmp[k].ID)
data.UserId = uint64(artistInfoTmp[k].UserId)
data.ArtistId = artistInfoTmp[k].ArtistId
data.BankAccount = artistInfoTmp[k].BankAccount
data.BankName = artistInfoTmp[k].BankName
data.Introduct = artistInfoTmp[k].Introduct
data.CountryArtLevel = artistInfoTmp[k].CountryArtLevel
data.ArtistCertPic = artistInfoTmp[k].ArtistCertPic
data.Remark = artistInfoTmp[k].Remark
data.Remark2 = artistInfoTmp[k].Remark2
data.State = uint64(artistInfoTmp[k].State)
datas = append(datas, data)
}
rep.Data = datas
return
}
func GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
rep = &supplyinfo.GetArtistInfoListData{}
var artistInfoTmp model.ArtistInfo
if err := db.DB.Where("id = ?", req.ID).Find(&artistInfoTmp).Error; err != nil {
zap.L().Error("get artistInfo info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
rep.ID = uint64(artistInfoTmp.ID)
rep.UserId = uint64(artistInfoTmp.UserId)
rep.ArtistId = artistInfoTmp.ArtistId
rep.BankAccount = artistInfoTmp.BankAccount
rep.BankName = artistInfoTmp.BankName
rep.Introduct = artistInfoTmp.Introduct
rep.CountryArtLevel = artistInfoTmp.CountryArtLevel
rep.ArtistCertPic = artistInfoTmp.ArtistCertPic
rep.Remark = artistInfoTmp.Remark
rep.Remark2 = artistInfoTmp.Remark2
rep.State = uint64(artistInfoTmp.State)
return
}
func UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
rep = &supplyinfo.UpdateArtistInfoRespond{}
var artistInfoTmp model.ArtistInfo
if err := db.DB.Where("id = ? ", req.ID).Find(&artistInfoTmp).Error; err != nil {
zap.L().Error("get artistInfo info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
artistInfoTmp.BankAccount = req.BankAccount
artistInfoTmp.BankName = req.BankName
artistInfoTmp.Introduct = req.Introduct
artistInfoTmp.State = uint(req.State)
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
}
//
//func GetSupplyInfoList(id, num int32) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
// rep = &supplyinfo.GetSupplyInfoListRespond{}
// var datas []*supplyinfo.GetSupplyInfoData
//
// var supplyInfoList []model.SupplyInfo
// if err := db.DB.Where("user_id = ? and types <= ?", id, num).Find(&supplyInfoList).Error; err != nil {
// zap.L().Error("get supplyInfo infos err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// for i, v := range supplyInfoList {
// supplyInfoList[i].CreateTime = v.CreatedAt.Format("2006-01-02")
// data := &supplyinfo.GetSupplyInfoData{}
// data.ID = uint64(supplyInfoList[i].ID)
// data.ArtworkId = supplyInfoList[i].ArtworkId
// data.ArtistId = supplyInfoList[i].ArtistId
// data.UserId = uint64(supplyInfoList[i].UserId)
// data.Name = supplyInfoList[i].Name
// data.ModelYear = supplyInfoList[i].ModelYear
// data.Photo = supplyInfoList[i].Photo
// data.ArtistPhoto = supplyInfoList[i].ArtistPhoto
// data.Width = uint64(supplyInfoList[i].Width)
// data.Height = uint64(supplyInfoList[i].Height)
// data.Ruler = uint64(supplyInfoList[i].Ruler)
// data.ExhibitInfo = supplyInfoList[i].ExhibitInfo
// data.ExhibitPic1 = supplyInfoList[i].ExhibitPic1
// data.ExhibitPic2 = supplyInfoList[i].ExhibitPic2
// data.CreateTime = supplyInfoList[i].CreateTime
// data.Introduct = supplyInfoList[i].Introduct
// data.NetworkTrace = supplyInfoList[i].NetworkTrace
// data.CreateAddress = supplyInfoList[i].CreateAddress
// data.Url = supplyInfoList[i].Url
// data.Types = supplyInfoList[i].State
// data.Remark = supplyInfoList[i].Remark
// data.Remark2 = supplyInfoList[i].Remark2
// data.Enable = supplyInfoList[i].Enable
// datas = append(datas, data)
// }
// rep.Data = datas
//
// return
//}
//
//func GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
// rep = &supplyinfo.GetSupplyInfoData{}
//
// var supplyInfoTmp model.SupplyInfo
// if err := db.DB.Where("id = ?", req.Id).Find(&supplyInfoTmp).Error; err != nil {
// zap.L().Error("get supplyInfo infos err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
// rep.ID = uint64(supplyInfoTmp.ID)
// rep.ArtworkId = supplyInfoTmp.ArtworkId
// rep.ArtistId = supplyInfoTmp.ArtistId
// rep.UserId = uint64(supplyInfoTmp.UserId)
// rep.Name = supplyInfoTmp.Name
// rep.ModelYear = supplyInfoTmp.ModelYear
// rep.Photo = supplyInfoTmp.Photo
// rep.ArtistPhoto = supplyInfoTmp.ArtistPhoto
// rep.Width = uint64(supplyInfoTmp.Width)
// rep.Height = uint64(supplyInfoTmp.Height)
// rep.Ruler = uint64(supplyInfoTmp.Ruler)
// rep.ExhibitInfo = supplyInfoTmp.ExhibitInfo
// rep.ExhibitPic1 = supplyInfoTmp.ExhibitPic1
// rep.ExhibitPic2 = supplyInfoTmp.ExhibitPic2
// rep.CreateTime = supplyInfoTmp.CreateTime
// rep.Introduct = supplyInfoTmp.Introduct
// rep.NetworkTrace = supplyInfoTmp.NetworkTrace
// rep.CreateAddress = supplyInfoTmp.CreateAddress
// rep.Url = supplyInfoTmp.Url
// rep.Types = supplyInfoTmp.State
// rep.Remark = supplyInfoTmp.Remark
// rep.Remark2 = supplyInfoTmp.Remark2
// rep.Enable = supplyInfoTmp.Enable
//
// return
//}
//
//func UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
// var SupplyInfo model.SupplyInfo
// if err := db.DB.Where("id = ? ", req.ID).Find(&SupplyInfo).Error; err != nil {
// zap.L().Error("get supplyInfo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// SupplyInfo.CreateTime = req.CreateTime
// SupplyInfo.ModelYear = req.ModelYear
// SupplyInfo.NetworkTrace = req.NetworkTrace
// SupplyInfo.Url = req.Url
// SupplyInfo.Introduct = req.Introduct
// SupplyInfo.State = req.Types
// SupplyInfo.ExhibitInfo = req.ExhibitInfo
// SupplyInfo.ExhibitPic1 = req.ExhibitPic1
// SupplyInfo.ExhibitPic2 = req.ExhibitPic2
//
// if err = db.DB.Save(&SupplyInfo).Error; err != nil {
// zap.L().Error("save supplyInfo info err", zap.Error(err))
// err = errors.New(m.SAVE_ERROR)
// return
// }
//
// return
//}
//
//func GetVideoList(id int32) (rep *supplyinfo.GetVideoListRespond, err error) {
// rep = &supplyinfo.GetVideoListRespond{}
// var datas []*supplyinfo.GetVideoListData
//
// 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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// for _, v := range ExhVideo {
// var data supplyinfo.GetVideoListData
// data.ID = uint64(v.ID)
// data.UserId = uint64(v.UserId)
// data.Url = v.Url
// data.Types = v.State
// data.Remark = v.Remark
// data.Remark2 = v.Remark2
// data.Enable = v.Enable
//
// datas = append(datas, &data)
// }
//
// rep.Data = datas
//
// return
//}
//
//func GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
// rep = &supplyinfo.GetVideoListData{}
//
// var ExhVideo model.ExhVideo
// if err := db.DB.Where("id = ?", req.ID).First(&ExhVideo).Error; err != nil {
// zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// rep.ID = uint64(ExhVideo.ID)
// rep.UserId = uint64(ExhVideo.UserId)
// rep.Url = ExhVideo.Url
// rep.Types = ExhVideo.State
// rep.Remark = ExhVideo.Remark
// rep.Remark2 = ExhVideo.Remark2
// rep.Enable = ExhVideo.Enable
//
// return
//}
//
//func UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
// rep = &supplyinfo.UpdateVideoRespond{}
//
// var ExhVideo model.ExhVideo
// if err := db.DB.Where("id = ? ", req.ID).First(&ExhVideo).Error; err != nil {
// zap.L().Error("get exhVideo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// ExhVideo.Url = req.Url
// ExhVideo.State = req.Types
//
// if err := db.DB.Save(&ExhVideo).Error; err != nil {
// zap.L().Error("save exhVideo info err", zap.Error(err))
// err = errors.New(m.SAVE_ERROR)
// return nil, err
// }
//
// return
//}
//
//func GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
// rep = &supplyinfo.GetExamListData{}
//
// var ExhExam model.ExhExam
// 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 nil, err
// }
//
// rep.ID = uint64(ExhExam.ID)
// rep.UserId = uint64(ExhExam.UserId)
// rep.Title = ExhExam.Title
// rep.Class = ExhExam.Class
// rep.TitleScore = uint64(ExhExam.TitleScore)
// rep.Score = ExhExam.Score
// rep.Types = ExhExam.State
// rep.Remark = ExhExam.Remark
// rep.Remark2 = ExhExam.Remark2
// rep.Enable = ExhExam.Enable
// return
//}
//
//func GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
// rep = &supplyinfo.GetExamListRespond{}
// var datas []*supplyinfo.GetExamListData
//
// var ExhExam []model.ExhExam
// if err := db.DB.Where("user_id = ? and types <=4", req.ID).Find(&ExhExam).Error; err != nil {
// zap.L().Error("get exhVideo infos err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// for _, v := range ExhExam {
// var data supplyinfo.GetExamListData
//
// data.ID = uint64(v.ID)
// data.UserId = uint64(v.UserId)
// data.Title = v.Title
// data.Class = v.Class
// data.TitleScore = uint64(v.TitleScore)
// data.Score = v.Score
// data.Types = v.State
// data.Remark = v.Remark
// data.Remark2 = v.Remark2
// data.Enable = v.Enable
//
// datas = append(datas, &data)
// }
//
// rep.Data = datas
//
// return
//}
//
//func UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
// rep = &supplyinfo.UpdateExamRespond{}
//
// var ExhExam model.ExhExam
// 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 nil, err
// }
//
// ExhExam.Score = req.Score
// ExhExam.Class = req.Class
// ExhExam.State = req.Types
// ExhExam.Title = req.Title
// ExhExam.Class = req.Class
// ExhExam.TitleScore = uint(req.TitleScore)
// ExhExam.Score = req.Score
// ExhExam.State = req.Types
// ExhExam.Remark = req.Remark
// ExhExam.Remark2 = req.Remark2
//
// var score map[string]int32
// var titleScore int32
//
// json.Unmarshal([]byte(req.Score), &score)
//
// for _, v := range score {
// titleScore = titleScore + v
// }
//
// ExhExam.TitleScore = uint(titleScore)
//
// 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)
// return
// }
//
// if req.Types == "2" {
// type titleScore struct {
// UserId uint
// Score int
// }
//
// var tmp []model.ExhExam
// 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
// }
//
// var ranking int
// for k, v := range tmp {
// if v.UserId == uint(req.UserId) {
// ranking = k
// }
// }
//
// percent := (ranking + 1) / len(tmp) * 100
// rep.Percent = int32(percent)
// return
// }
//
// return
//}
//
//func GetArtistInfoList(id int32) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
// rep = &supplyinfo.GetArtistInfoListRespond{}
// var datas []*supplyinfo.GetArtistInfoListData
//
// 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))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// for k, v := range artistInfoTmp {
// artistInfoTmp[k].Model.ID = v.ID
// data := &supplyinfo.GetArtistInfoListData{}
//
// data.ID = uint64(artistInfoTmp[k].ID)
// data.UserId = uint64(artistInfoTmp[k].UserId)
// data.ArtistId = artistInfoTmp[k].ArtistId
// data.BankAccount = artistInfoTmp[k].BankAccount
// data.BankName = artistInfoTmp[k].BankName
// data.Introduct = artistInfoTmp[k].Introduct
// data.CountryArtLevel = artistInfoTmp[k].CountryArtLevel
// data.ArtistCertPic = artistInfoTmp[k].ArtistCertPic
// data.Remark = artistInfoTmp[k].Remark
// data.Remark2 = artistInfoTmp[k].Remark2
// data.State = uint64(artistInfoTmp[k].State)
//
// datas = append(datas, data)
// }
//
// rep.Data = datas
//
// return
//}
//
//func GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
// rep = &supplyinfo.GetArtistInfoListData{}
//
// var artistInfoTmp old.ArtistInfo
// if err := db.DB.Where("id = ?", req.ID).Find(&artistInfoTmp).Error; err != nil {
// zap.L().Error("get artistInfo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
// rep.ID = uint64(artistInfoTmp.ID)
// rep.UserId = uint64(artistInfoTmp.UserId)
// rep.ArtistId = artistInfoTmp.ArtistId
// rep.BankAccount = artistInfoTmp.BankAccount
// rep.BankName = artistInfoTmp.BankName
// rep.Introduct = artistInfoTmp.Introduct
// rep.CountryArtLevel = artistInfoTmp.CountryArtLevel
// rep.ArtistCertPic = artistInfoTmp.ArtistCertPic
// rep.Remark = artistInfoTmp.Remark
// rep.Remark2 = artistInfoTmp.Remark2
// rep.State = uint64(artistInfoTmp.State)
//
// return
//}
//
//func UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
// rep = &supplyinfo.UpdateArtistInfoRespond{}
//
// var artistInfoTmp old.ArtistInfo
// if err := db.DB.Where("id = ? ", req.ID).Find(&artistInfoTmp).Error; err != nil {
// zap.L().Error("get artistInfo info err", zap.Error(err))
// err = errors.New(m.ERROR_SELECT)
// return nil, err
// }
//
// artistInfoTmp.BankAccount = req.BankAccount
// artistInfoTmp.BankName = req.BankName
// artistInfoTmp.Introduct = req.Introduct
// artistInfoTmp.State = uint(req.State)
// 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,
UpdatedAt: v.UpdatedAt.Unix(),
CreatedAt: v.CreatedAt.Unix(),
LatestLockTime: v.LatestLockTime,
})
}
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/pkg/m"
"github.com/fonchain/fonchain-artistinfo/pkg/service"
"google.golang.org/protobuf/types/known/emptypb"
"strings"
)
@ -37,13 +38,22 @@ func (a ArtistInfoArtworkLogic) GetArtworkLockDetail(request *artistInfoArtwork.
return
}
res = &artistInfoArtwork.ArtistLockInfo{
ArtistUid: data.ArtistUid,
ArtworkUid: data.ArtworkUid,
Status: data.Status,
LockTime: data.LockTime,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
DeletedAt: int64(data.DeletedAt),
ArtistUid: data.ArtistUid,
ArtworkUid: data.ArtworkUid,
Status: data.Status,
LockTime: data.LockTime,
CreatedAt: data.CreatedAt.Unix(),
UpdatedAt: data.UpdatedAt.Unix(),
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
}
@ -60,7 +70,7 @@ func (ArtistInfoArtworkLogic) CreateArtworkLockRecord(req *artistInfoArtwork.Cre
func (ArtistInfoArtworkLogic) ArtworkLockAction(req *artistInfoArtwork.ArtworkLockActionRequest) (res *artistInfoArtwork.ArtworkCommonNoParams, err error) {
switch req.Lock {
case 2:
err = dao.BatchLockArtworks(req.ArtistUid)
err = dao.BatchLockArtworks(req.ArtistUid, req.LockTime)
case 3:
err = dao.BatchUnlockArtworks(req.ArtistUid)
default:
@ -118,23 +128,27 @@ func (a ArtistInfoArtworkLogic) GetArtworkLockHistoryGroup(request *artistInfoAr
}
for _, artwork := range previewListRes.Data {
res.GroupList[groupIndex].DataList = append(res.GroupList[groupIndex].DataList, &artistInfoArtwork.ArtworkPreviewInfo{
ArtistUuid: artwork.ArtistUuid,
ArtworkName: artwork.ArtworkName,
Length: artwork.Length,
Width: artwork.Width,
Ruler: artwork.Ruler,
CreatedAddress: strings.Split(artwork.CreatedAddress, ""),
ArtistPhoto: artwork.ArtistPhoto,
HdPic: artwork.HdPic,
ArtworkUid: artwork.ArtworkUid,
CreatedDate: artwork.CreateDate,
LockStatus: int32(v.Status),
AuditStatus: v.AuditStatus,
AuditMark: v.AuditMark,
AuditMark2: v.AuditMark2,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
DeletedAt: v.DeletedAt,
ArtistUuid: artwork.ArtistUuid,
ArtworkName: artwork.ArtworkName,
Length: artwork.Length,
Width: artwork.Width,
Ruler: artwork.Ruler,
CreatedAddress: strings.Split(artwork.CreatedAddress, ""),
ArtistPhoto: artwork.ArtistPhoto,
HdPic: artwork.HdPic,
ArtworkUid: artwork.ArtworkUid,
CreatedDate: artwork.CreateDate,
LockStatus: int32(v.Status),
BaseAuditStatus: v.BaseAuditStatus,
BaseAuditMark: v.BaseAuditMark,
BaseAuditMark2: v.BaseAuditMark2,
SupplementAuditStatus: v.SupplementAuditStatus,
SupplementAuditMark: v.SupplementAuditMark,
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) {
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
}
// 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
import (
"github.com/fonchain/fonchain-artistinfo/cmd/internal/dao"
"github.com/fonchain/fonchain-artistinfo/pb/supplyinfo"
)
type ISupply interface {
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)
GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error)
GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error)
UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error)
GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error)
GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, 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)
UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error)
}
func NewSupply() ISupply {
return &Supply{}
}
type Supply struct {
}
func (a *Supply) GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
rep, err = dao.GetSupplyInfoList(int32(req.ArtistId), int32(req.Types))
return
}
func (a *Supply) GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
rep, err = dao.GetSupplyInfo(req)
return
}
func (a *Supply) UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
rep, err = dao.UpdateSupplyInfo(req)
return
}
func (a *Supply) GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
rep, err = dao.GetVideoList(int32(req.UserId))
return
}
func (a *Supply) GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
rep, err = dao.GetVideo(req)
return
}
func (a *Supply) UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
rep, err = dao.UpdateVideo(req)
return
}
func (a *Supply) GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
rep, err = dao.GetExam(req)
return
}
func (a *Supply) GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
rep, err = dao.GetExamList(req)
return
}
func (a *Supply) UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
rep, err = dao.UpdateExam(req)
return
}
func (a *Supply) GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
rep, err = dao.GetArtistInfoList(int32(req.UserId))
return
}
func (a *Supply) GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
rep, err = dao.GetArtistInfo(req)
return
}
func (a *Supply) UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error) {
rep, err = dao.UpdateArtistInfo(req)
return
}
//
//type ISupply interface {
// 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)
// GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error)
// GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error)
// UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error)
// GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error)
// GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, 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)
// UpdateArtistInfo(req *supplyinfo.UpdateArtistInfoRequest) (rep *supplyinfo.UpdateArtistInfoRespond, err error)
//}
//
//func NewSupply() ISupply {
// return &Supply{}
//}
//
//type Supply struct {
//}
//
//func (a *Supply) GetSupplyInfoList(req *supplyinfo.GetSupplyInfoListRequest) (rep *supplyinfo.GetSupplyInfoListRespond, err error) {
// rep, err = dao.GetSupplyInfoList(int32(req.ArtistId), int32(req.Types))
// return
//}
//
//func (a *Supply) GetSupplyInfo(req *supplyinfo.GetSupplyInfoRequest) (rep *supplyinfo.GetSupplyInfoData, err error) {
// rep, err = dao.GetSupplyInfo(req)
// return
//}
//
//func (a *Supply) UpdateSupplyInfo(req *supplyinfo.UpdateSupplyInfoRequest) (rep *supplyinfo.UpdateSupplyInfoRespond, err error) {
// rep, err = dao.UpdateSupplyInfo(req)
// return
//}
//
//func (a *Supply) GetVideoList(req *supplyinfo.GetVideoListRequest) (rep *supplyinfo.GetVideoListRespond, err error) {
// rep, err = dao.GetVideoList(int32(req.UserId))
// return
//}
//
//func (a *Supply) GetVideo(req *supplyinfo.GetVideoRequest) (rep *supplyinfo.GetVideoListData, err error) {
// rep, err = dao.GetVideo(req)
// return
//}
//
//func (a *Supply) UpdateVideo(req *supplyinfo.UpdateVideoRequest) (rep *supplyinfo.UpdateVideoRespond, err error) {
// rep, err = dao.UpdateVideo(req)
// return
//}
//
//func (a *Supply) GetExam(req *supplyinfo.GetExamRequest) (rep *supplyinfo.GetExamListData, err error) {
// rep, err = dao.GetExam(req)
// return
//}
//
//func (a *Supply) GetExamList(req *supplyinfo.GetExamListRequest) (rep *supplyinfo.GetExamListRespond, err error) {
// rep, err = dao.GetExamList(req)
// return
//}
//
//func (a *Supply) UpdateExam(req *supplyinfo.UpdateExamRequest) (rep *supplyinfo.UpdateExamRespond, err error) {
// rep, err = dao.UpdateExam(req)
// return
//}
//
//func (a *Supply) GetArtistInfoList(req *supplyinfo.GetArtistInfoListRequest) (rep *supplyinfo.GetArtistInfoListRespond, err error) {
// rep, err = dao.GetArtistInfoList(int32(req.UserId))
// return
//}
//
//func (a *Supply) GetArtistInfo(req *supplyinfo.GetArtistInfoRequest) (rep *supplyinfo.GetArtistInfoListData, err error) {
// rep, err = dao.GetArtistInfo(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"
"errors"
"fmt"
"github.com/fonchain/fonchain-artistinfo/cmd/model/old"
"github.com/fonchain/fonchain-artistinfo/pb/old/artwork"
"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)
return
}
artwork := &model.Artwork{
artwork := &old.Artwork{
ArtistId: res.ArtistId,
Name: res.Name,
ModelYear: res.ModelYear,
@ -46,7 +47,7 @@ func ArtworkAdd(res *artwork.ArtworkAddRequest) (req *artwork.ArtworkAddRespond,
}
func UpdateArtwork(data *artwork.UpdateArtworkRequest) (err error) {
var artwork model.Artwork
var artwork old.Artwork
artwork.ID = int32(data.ID)
if err = db.DB.First(&artwork).Error; err != nil {
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) {
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))
err = errors.New(m.ERROR_DELETE)
return
@ -96,7 +97,7 @@ func DelArtwork(id int32) (err error) {
}
func ApproveArtwork(req *artwork.ApproveArtworkRequest) (rep *artwork.ApproveArtworkRespond, err error) {
var artwork model.Artwork
var artwork old.Artwork
artwork.ID = req.ArtworkId
var state int32
if req.IsApprove {
@ -104,7 +105,7 @@ func ApproveArtwork(req *artwork.ApproveArtworkRequest) (rep *artwork.ApproveArt
} else {
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))
err = errors.New(m.ERROR_SELECT)
return
@ -115,7 +116,7 @@ func GetArtworkList(req *artwork.GetArtworkListRequest) (rep *artwork.GetArtwork
rep = &artwork.GetArtworkListRespond{}
var datas []*artwork.UpdateArtworkRequest
fmt.Println("111")
var artworkList []model.Artwork
var artworkList []old.Artwork
//找到用户 p[]
if err = db.DB.Order("created_at desc").Where("artist_id = ?", req.ID).Find(&artworkList).Error; err != nil {
fmt.Println("222")
@ -154,7 +155,7 @@ func GetArtworkList(req *artwork.GetArtworkListRequest) (rep *artwork.GetArtwork
func GetArtwork(id int32) (rep *artwork.GetArtworkRespond, err error) {
rep = &artwork.GetArtworkRespond{}
var artworkRes model.Artwork
var artworkRes old.Artwork
if err = db.DB.Where("id = ?", id).First(&artworkRes).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err))
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) {
var artwork model.Artwork
var artwork old.Artwork
if err = db.DB.Find(&artwork, "id = ?", Id).Error; err != nil {
zap.L().Error("get artwork info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
@ -238,7 +239,7 @@ func GetMgmtArtworkList(req *artwork.GetMgmtArtworkListRequest) (rep *artwork.Ge
return
}
rep.Count = uint64(artworkCount)
var artworkList []model.Artwork
var artworkList []old.Artwork
//找到用户
sqlWhere = sqlWhere + " limit ?,? "
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"`
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 用户模型
type ArtistInfo struct {
Model
model.Model
UserId uint `gorm:"not null default:0" json:"userId"`
ArtistId string `gorm:"type:varchar(256) default ''" json:"artistId"`
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 用户模型
type Artwork struct {
Model
model.Model
ID int32 `gorm:"not null" json:"id"`
ArtistId uint64 `gorm:"not null" json:"artistId"`
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 {
Model
type ArtworkExExam struct {
model.Model
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"`
Class string `gorm:"column:class;type:varchar(25);default:''" json:"class"`
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"`
}
func (e ExhExam) TableName() string {
return "exh_exam"
func (e ArtworkExExam) TableName() string {
return "artwork_ex_exam"
}

View File

@ -1,8 +1,10 @@
package model
package old
import "github.com/fonchain/fonchain-artistinfo/cmd/model"
// ExhVideo 视频资料
type ExhVideo struct {
Model
model.Model
UserId uint `gorm:"not null default:0"`
Url string `gorm:"type:varchar(256) 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 {
Model
model.Model
ID int32 `gorm:"not null"`
BatchId 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 {
Model
model.Model
ID int32 `gorm:"not null"`
ArtworkId 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 用户模型
type Bank struct {
Model
model.Model
ID int32 `gorm:"not null"`
UserId int32 `gorm:" 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"
// Contract 用户模型
type Contract struct {
<<<<<<< HEAD:cmd/model/contract.go
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"`
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"`
UpdatedAt int32 `gorm:"column:updated_at;autoCreateTime"`
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 {

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"`
//用户状态
IsRead int64 `gorm:"column:is_read;not null;comment:条款阅读状态"`
IsLock bool `gorm:"column:is_lock;not null;comment:画家锁定状态"`
IsRead int64 `gorm:"column:is_read;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"`
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:法大大状态"`
IsRead int64 `json:"is_read" gorm:"column:is_read;comment:是否已读 0未读 1已读"`
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:真实姓名"`
IdNum string `json:"idNum" gorm:"column:id_num;comment:证件号码"`
Sex SexType `json:"sex" gorm:"column:sex;comment:性别"`
@ -66,7 +67,8 @@ SELECT
su.updated_at,
su.deleted_at,
inviter.invited_code inviter_invite_code,
inviter_rn.name inviter_name
inviter_rn.name inviter_name,
su.latest_lock_time
FROM sys_user su
LEFT JOIN real_name rn ON rn.id = su.real_name_id
-- 邀请者信息

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -137,6 +137,212 @@ var _ interface {
ErrorName() string
} = 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
// 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.
@ -273,6 +479,8 @@ func (m *ArtworkLockActionRequest) validate(all bool) error {
// no validation rules for Lock
// no validation rules for LockTime
if len(errors) > 0 {
return ArtworkLockActionRequestMultiError(errors)
}
@ -379,6 +587,8 @@ func (m *GetArtworkLockRecordsRequest) validate(all bool) error {
// no validation rules for QueryType
// no validation rules for AuditStatus
if len(errors) > 0 {
return GetArtworkLockRecordsRequestMultiError(errors)
}
@ -490,18 +700,30 @@ func (m *ArtistLockInfo) validate(all bool) error {
// 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 UpdatedAt
// 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 {
return ArtistLockInfoMultiError(errors)
}
@ -1168,11 +1390,19 @@ func (m *ArtworkPreviewInfo) validate(all bool) error {
// 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
@ -1565,6 +1795,8 @@ func (m *UpdateArtworkAuditStatusRequest) validate(all bool) error {
// no validation rules for AuditMark2
// no validation rules for FlowIndex
if len(errors) > 0 {
return UpdateArtworkAuditStatusRequestMultiError(errors)
}
@ -1645,3 +1877,108 @@ var _ interface {
Cause() error
ErrorName() string
} = 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"
constant "github.com/dubbogo/triple/pkg/common/constant"
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
@ -36,6 +37,9 @@ type ArtistInfoArtworkClient interface {
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)
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 {
@ -43,13 +47,16 @@ type artistInfoArtworkClient struct {
}
type ArtistInfoArtworkClientImpl struct {
CreateArtworkLockRecord func(ctx context.Context, in *CreateArtworkLockRecordReq) (*ArtworkCommonNoParams, error)
ArtworkLockAction func(ctx context.Context, in *ArtworkLockActionRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockRecords func(ctx context.Context, in *GetArtworkLockRecordsRequest) (*ArtworkLockList, error)
GetArtworkLockHistoryGroup func(ctx context.Context, in *GetArtworkLockHistoryRequest) (*GetArtworkLockHistoryResponse, error)
DeleteArtworkRecord func(ctx context.Context, in *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockDetail func(ctx context.Context, in *GetArtworkLockDetailRequest) (*ArtistLockInfo, error)
UpdateArtworkAuditStatus func(ctx context.Context, in *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error)
CreateArtworkLockRecord func(ctx context.Context, in *CreateArtworkLockRecordReq) (*ArtworkCommonNoParams, error)
ArtworkLockAction func(ctx context.Context, in *ArtworkLockActionRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockRecords func(ctx context.Context, in *GetArtworkLockRecordsRequest) (*ArtworkLockList, error)
GetArtworkLockHistoryGroup func(ctx context.Context, in *GetArtworkLockHistoryRequest) (*GetArtworkLockHistoryResponse, error)
DeleteArtworkRecord func(ctx context.Context, in *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockDetail func(ctx context.Context, in *GetArtworkLockDetailRequest) (*ArtistLockInfo, 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 {
@ -106,6 +113,24 @@ func (c *artistInfoArtworkClient) UpdateArtworkAuditStatus(ctx context.Context,
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.
// All implementations must embed UnimplementedArtistInfoArtworkServer
// for forward compatibility
@ -118,6 +143,9 @@ type ArtistInfoArtworkServer interface {
DeleteArtworkRecord(context.Context, *DeleteArtworkRecordRequest) (*ArtworkCommonNoParams, error)
GetArtworkLockDetail(context.Context, *GetArtworkLockDetailRequest) (*ArtistLockInfo, 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()
}
@ -147,6 +175,15 @@ func (UnimplementedArtistInfoArtworkServer) GetArtworkLockDetail(context.Context
func (UnimplementedArtistInfoArtworkServer) UpdateArtworkAuditStatus(context.Context, *UpdateArtworkAuditStatusRequest) (*ArtworkCommonNoParams, error) {
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) {
s.proxyImpl = impl
}
@ -378,6 +415,93 @@ func _ArtistInfoArtwork_UpdateArtworkAuditStatus_Handler(srv interface{}, ctx co
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.
// It's only intended for direct use with grpc_go.RegisterService,
// and not to be introspected or modified (even as a copy)
@ -413,6 +537,18 @@ var ArtistInfoArtwork_ServiceDesc = grpc_go.ServiceDesc{
MethodName: "UpdateArtworkAuditStatus",
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{},
Metadata: "pb/artistinfoArtwork.proto",

View File

@ -2318,6 +2318,8 @@ type CheckUserLockRespond struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
LockTime string `protobuf:"bytes,1,opt,name=lockTime,proto3" json:"lockTime,omitempty"`
}
func (x *CheckUserLockRespond) Reset() {
@ -2352,6 +2354,13 @@ func (*CheckUserLockRespond) Descriptor() ([]byte, []int) {
return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{30}
}
func (x *CheckUserLockRespond) GetLockTime() string {
if x != nil {
return x.LockTime
}
return ""
}
type ArtistSupplyListRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -2896,6 +2905,8 @@ type UserLockRespond struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
LockTime string `protobuf:"bytes,1,opt,name=lockTime,proto3" json:"lockTime,omitempty"`
}
func (x *UserLockRespond) Reset() {
@ -2930,6 +2941,13 @@ func (*UserLockRespond) Descriptor() ([]byte, []int) {
return file_pb_artistinfoUser_proto_rawDescGZIP(), []int{35}
}
func (x *UserLockRespond) GetLockTime() string {
if x != nil {
return x.LockTime
}
return ""
}
type BindInviteInvitedAccountRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -3276,13 +3294,15 @@ type FindUsersRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
MgmtArtistUid string `protobuf:"bytes,1,opt,name=mgmtArtistUid,proto3" json:"mgmtArtistUid,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"` //画家真是姓名
InvitedCode string `protobuf:"bytes,4,opt,name=invitedCode,proto3" json:"invitedCode,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"`
IsArtist bool `protobuf:"varint,9,opt,name=isArtist,proto3" json:"isArtist,omitempty"` //查询有艺术家uid的数据
MgmtArtistUid string `protobuf:"bytes,1,opt,name=mgmtArtistUid,proto3" json:"mgmtArtistUid,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"` //画家真是姓名
InvitedCode string `protobuf:"bytes,4,opt,name=invitedCode,proto3" json:"invitedCode,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"`
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() {
@ -3366,6 +3386,20 @@ func (x *FindUsersRequest) GetIsArtist() bool {
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 {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -3572,10 +3606,11 @@ type UserInfo struct {
HtmlType string `protobuf:"bytes,25,opt,name=htmlType,proto3" json:"htmlType,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"`
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"`
VerCode string `protobuf:"bytes,30,opt,name=verCode,proto3" json:"verCode,omitempty"`
Domain string `protobuf:"bytes,30,opt,name=domain,proto3" json:"domain,omitempty"`
VerCode string `protobuf:"bytes,31,opt,name=verCode,proto3" json:"verCode,omitempty"`
}
func (x *UserInfo) Reset() {
@ -3785,6 +3820,13 @@ func (x *UserInfo) GetMgmtArtistId() int64 {
return 0
}
func (x *UserInfo) GetLatestLockTime() string {
if x != nil {
return x.LatestLockTime
}
return ""
}
func (x *UserInfo) GetDomain() string {
if x != nil {
return x.Domain
@ -4021,6 +4063,7 @@ type UserView struct {
StageName string `protobuf:"bytes,25,opt,name=stageName,proto3" json:"stageName,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"`
LatestLockTime string `protobuf:"bytes,28,opt,name=latestLockTime,proto3" json:"latestLockTime,omitempty"`
}
func (x *UserView) Reset() {
@ -4244,6 +4287,13 @@ func (x *UserView) GetOpenBank() string {
return ""
}
func (x *UserView) GetLatestLockTime() string {
if x != nil {
return x.LatestLockTime
}
return ""
}
type FindUsersUserViewResponse struct {
state protoimpl.MessageState
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,
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,
0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x16, 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,
0x0a, 0x17, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69,
0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69,
0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69,
0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a,
0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x74, 0x0a,
0x17, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43,
0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64,
0x61, 0x74, 0x61, 0x22, 0xfb, 0x07, 0x0a, 0x23, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72,
0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52, 0x75, 0x6c,
0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70,
0x61, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a,
0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f,
0x72, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x70,
0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f,
0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70,
0x65, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x65,
0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
0x63, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74,
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69,
0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03,
0x73, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03,
0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75,
0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64,
0x75, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54,
0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54,
0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41,
0x73, 0x73, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67,
0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54,
0x69, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,
0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x14,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x69, 0x64, 0x65, 0x6f, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65,
0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65,
0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20,
0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69,
0x64, 0x43, 0x61, 0x72, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x64, 0x43,
0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18,
0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12,
0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52,
0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72,
0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64,
0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x43,
0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69,
0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e,
0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e,
0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b,
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69,
0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a,
0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x21, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x22, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e,
0x74, 0x22, 0x6d, 0x0a, 0x0f, 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, 0x03,
0x52, 0x02, 0x69, 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, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f,
0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b,
0x22, 0x11, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x1f, 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, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55,
0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43,
0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64,
0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x21, 0x0a, 0x1f, 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, 0x67, 0x0a, 0x13, 0x42, 0x69,
0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55,
0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x55, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x10, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73,
0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x13, 0x0a,
0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52,
0x65, 0x71, 0x75, 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, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69,
0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20,
0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01,
0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x22, 0xf0, 0x01, 0x0a,
0x10, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x72, 0x74,
0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43,
0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18,
0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x22,
0x71, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32,
0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61,
0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61,
0x67, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a,
0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x54,
0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46,
0x72, 0x6f, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x49, 0x64, 0x43, 0x61,
0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72,
0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x49, 0x64, 0x43,
0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x41, 0x67, 0x65, 0x18, 0x06,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x41, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78,
0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x53, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x42,
0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42,
0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49,
0x64, 0x22, 0xba, 0x06, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c,
0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72,
0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63,
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74,
0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d,
0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d,
0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06,
0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65,
0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43,
0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65,
0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x73,
0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c,
0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65,
0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x6c,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a,
0x0a, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03,
0x52, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75,
0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 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,
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, 0x12, 0x1a, 0x0a,
0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x17, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e,
0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70,
0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70,
0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01,
0x28, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x74, 0x0a, 0x17, 0x41, 0x72, 0x74,
0x69, 0x73, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x04, 0x64, 0x61,
0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22,
0xfb, 0x07, 0x0a, 0x23, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72,
0x6b, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x70, 0x61, 0x73, 0x73, 0x52,
0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x6e, 0x65,
0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41,
0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
0x03, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x65, 0x6e, 0x4e, 0x61,
0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
0x74, 0x65, 0x49, 0x6d, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x65, 0x72,
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b,
0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x73, 0x65, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12,
0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x61, 0x67,
0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x0e,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12,
0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x22, 0x0a, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x18,
0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x41, 0x73, 0x73, 0x6f, 0x54,
0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65,
0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f,
0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x20, 0x0a,
0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x16, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x16, 0x0a, 0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52,
0x06, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x64, 0x43, 0x61, 0x72,
0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x12,
0x1a, 0x0a, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28,
0x03, 0x52, 0x08, 0x69, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69,
0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c,
0x6f, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f,
0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64,
0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42,
0x61, 0x63, 0x6b, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x43, 0x61, 0x72,
0x64, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d,
0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6b, 0x41, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1f,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x21, 0x20, 0x01, 0x28, 0x03, 0x52,
0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a,
0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x22, 0x20, 0x01, 0x28,
0x03, 0x52, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6d, 0x0a,
0x0f, 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, 0x03, 0x52, 0x02, 0x69, 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, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x04,
0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x22, 0x2d, 0x0a, 0x0f,
0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x12,
0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x1f,
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, 0x12,
0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d,
0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a,
0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a,
0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x22,
0x21, 0x0a, 0x1f, 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, 0x67, 0x0a, 0x13, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74,
0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a,
0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x10, 0x42,
0x69, 0x6e, 0x64, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12,
0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44,
0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x46,
0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 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, 0x64, 0x12, 0x22, 0x0a, 0x0c,
0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64,
0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74,
0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x72,
0x74, 0x69, 0x73, 0x74, 0x22, 0xb0, 0x02, 0x0a, 0x10, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65,
0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x67, 0x6d,
0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x12,
0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x26, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e,
0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73,
0x74, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70,
0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12,
0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69,
0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69,
0x73, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6d, 0x67, 0x6d, 0x74, 0x41,
0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52,
0x0e, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52,
0x06, 0x69, 0x73, 0x4c, 0x6f, 0x63, 0x6b, 0x22, 0x71, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x64, 0x55,
0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04,
0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f,
0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66,
0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0c, 0x52,
0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x49, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a,
0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x12,
0x1e, 0x0a, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0a, 0x49, 0x64, 0x43, 0x61, 0x72, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x12,
0x10, 0x0a, 0x03, 0x41, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x41, 0x67,
0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x53, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18,
0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x42, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x12,
0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64, 0x22, 0xe2, 0x06, 0x0a, 0x08, 0x55, 0x73,
0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74,
0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41,
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18,
0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x18, 0x05, 0x20,
0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x63, 0x63, 0x49, 0x64, 0x12, 0x24,
0x0a, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x69, 0x64, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73,
0x74, 0x55, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x07,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b,
0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20,
0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a,
0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x73, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x0b,
0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64,
0x12, 0x34, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65,
0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61,
0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x64, 0x64, 0x53, 0x74, 0x61,
0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64,
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,
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, 0x65, 0x49, 0x6d, 0x67, 0x12, 0x14, 0x0a, 0x05,
0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f,
0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x19,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18,
0x0a, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c,
0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f,
0x65, 0x49, 0x6d, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x18, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x74,
0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74,
0x6d, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70,
0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x54, 0x79, 0x70, 0x65,
0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1b,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65,
0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x64,
0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x67, 0x6d, 0x74, 0x41, 0x72, 0x74, 0x69,
0x73, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f,
0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
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,
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,
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,
@ -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,
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,
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,
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,
@ -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,
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,
0x22, 0x79, 0x0a, 0x19, 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, 0x12, 0x28, 0x0a,
0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65,
0x77, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e,
0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67,
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x32, 0xbc, 0x0e, 0x0a, 0x0e,
0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x52,
0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69,
0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67,
0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 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,
0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69,
0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x4c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x79, 0x0a, 0x19, 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, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
0x32, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x70,
0x61, 0x67, 0x65, 0x32, 0xbc, 0x0e, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x6e,
0x66, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74,
0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65,
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,
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, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0c, 0x55, 0x6e, 0x46,
0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69,
0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c,
0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68,
0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a,
0x0a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x72,
0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74,
0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d,
0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x09, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73,
0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69,
0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73,
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,
0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x22,
0x00, 0x12, 0x52, 0x0a, 0x0c, 0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73,
0x74, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55,
0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x55, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x64, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
0x4d, 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f,
0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e,
0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x64, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67,
0x12, 0x1c, 0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
0x2e, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 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 (

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 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
service ArtistInfoArtwork {
//
rpc CreateArtworkLockRecord(CreateArtworkLockRecordReq)returns(ArtworkCommonNoParams){} //
@ -14,10 +16,18 @@ service ArtistInfoArtwork {
rpc DeleteArtworkRecord(DeleteArtworkRecordRequest)returns(ArtworkCommonNoParams){} //
rpc GetArtworkLockDetail(GetArtworkLockDetailRequest)returns(ArtistLockInfo){}//
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 ArtworkUidRequest{
string ArtworkUid =1 [(validate.rules).message.required = true]; //uid
}
message ArtworkUidsRequest{
repeated string ArtworkUids =1 [(validate.rules).message.required = true]; //uid列表
}
message CreateArtworkLockRecordReq{
string artistUid=1 [(validate.rules).message.required = true];//uid
string artworkUid=2 [(validate.rules).message.required = true];//uid
@ -28,16 +38,20 @@ message CreateArtworkLockRecordReq{
message ArtworkLockActionRequest{
string artistUid =1 ;//uid
int32 lock =2; //2= 3=
string lockTime=3;//sys_user表的latest_lock_time一致
}
enum ArtworkQueryMode {
NowPreSaveArtwork = 0; //
NowLockedArtwork = 1; //
ArtistCanSee = 2; //
AllUnlockArtwork = 3; //()
NowPreSaveAndLocked=2;//
NowAuditFlowOfBase= 3; //
NowAuditFlowOfSupplementing = 4; //
AllUnlockArtwork = 5; //()
}
message GetArtworkLockRecordsRequest{
string artistUid =1 [(validate.rules).message.required = true];//uid
ArtworkQueryMode queryType =2 ; //
int64 AuditStatus =3; //
}
message ArtistLockInfo{
@ -45,12 +59,24 @@ message ArtistLockInfo{
string artworkUid=2;
int64 status=3;
string lockTime=4;
int64 auditStatus=5;
string auditMark=6;
string auditMark2=7;
int64 createdAt=15;
int64 updatedAt=16;
int64 deletedAt=17;
int64 createdAt=5;
int64 updatedAt=6;
int64 deletedAt=7;
//
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{
@ -69,7 +95,7 @@ message GetArtworkLockHistoryRequest{
string artistUid=1;
}
message GetArtworkLockDetailRequest{
string artworkUid=1 [(validate.rules).message.required = true];//uid;
string artworkUid=1 [(validate.rules).message.required = true];//uid;
}
//----
message ArtworkPreviewInfo {
@ -84,12 +110,22 @@ message ArtworkPreviewInfo {
string artworkUid=9;
string createdDate=10;
int32 lockStatus=11;
int64 auditStatus=12;
string auditMark=13;
string auditMark2=14;
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;
int64 createdAt=19;
int64 updatedAt=20;
int64 deletedAt=21;
}
message GetArtworkLockHistoryResponse{
repeated ArtworkLockRecord groupList =1;
@ -103,4 +139,9 @@ message UpdateArtworkAuditStatusRequest{
int64 auditStatus=5;
string auditMark=6;
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 {
string lockTime =1;
}
@ -340,7 +340,7 @@ message UserLockRequest {
}
message UserLockRespond {
string lockTime =1;
}
@ -390,6 +390,8 @@ message FindUsersRequest{
int32 page=5;
int32 pageSize=6;
bool isArtist=9; //uid的数据
repeated string mgmtArtistUids =10;
bool isLock =11;
// string Account = 3;
// string TelNum = 4;
// bool IsLock = 5;
@ -443,10 +445,10 @@ message UserInfo{
string envType = 26;//
string inviteCode = 27;
int64 mgmtArtistId = 28; //id
string latestLockTime=29; //
//
string domain =29;
string verCode=30;
string domain =30;
string verCode=31;
}
message PreSaveArtistInfoData{
@ -497,6 +499,7 @@ message UserView{
string stageName=25;
string certificateNum=26;
string openBank=27;
string latestLockTime=28;
}
message FindUsersUserViewResponse{
repeated UserView data=1;

View File

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