From 86919d74fd378dde73fa3ad19b59c5027546cb1f Mon Sep 17 00:00:00 2001 From: jhc <9316338+wangyitao309@user.noreply.gitee.com> Date: Fri, 11 Nov 2022 13:13:19 +0800 Subject: [PATCH] ID->UID --- cmd/controller/art_show.go | 16 +- cmd/controller/show_apply.go | 20 +- cmd/dao/art_show.go | 48 +- cmd/dao/artwork_price.go | 58 +- cmd/dao/show_apply.go | 35 +- cmd/dao/show_rel.go | 61 +- cmd/main.go | 1 - cmd/model/art_show.go | 3 +- cmd/model/artwork_price.go | 31 +- cmd/model/show_apply.go | 3 +- cmd/model/show_rel.go | 9 +- cmd/runtime/log/artwork_server.log | 3 + cmd/service/art_show.go | 109 +- cmd/service/show_apply.go | 122 +- cmd/service/show_price.go | 2 +- conf/conf.ini | 28 +- conf/dubbogo.yaml | 4 +- go.mod | 2 + go.sum | 5 + pb/artShow/artshow.pb.go | 837 ++++--- pb/artShow/artshow.pb.validate.go | 3750 ++++++++++++++++++++++++++++ pb/artShow/artshow_grpc.pb.go | 609 +++++ pb/artshow.proto | 61 +- pkg/m/msg.go | 4 + pkg/serializer/art_show.go | 19 +- pkg/serializer/artwork_price.go | 32 +- pkg/serializer/show_apply.go | 17 +- pkg/serializer/show_rel.go | 24 +- template/applyInfo.xlsx | Bin 0 -> 18506 bytes 29 files changed, 5180 insertions(+), 733 deletions(-) create mode 100644 cmd/runtime/log/artwork_server.log create mode 100644 pb/artShow/artshow.pb.validate.go create mode 100644 pb/artShow/artshow_grpc.pb.go create mode 100644 template/applyInfo.xlsx diff --git a/cmd/controller/art_show.go b/cmd/controller/art_show.go index d917514..c08e9bc 100644 --- a/cmd/controller/art_show.go +++ b/cmd/controller/art_show.go @@ -23,26 +23,26 @@ func (p *ArtShowProvider) CreateShow(ctx context.Context, req *artShow.SaveShowR return nil, err } res = new(artShow.SaveShowRes) - err, showID := service.CreateArtShowWithArtworkPrice(req) + err, showUID := service.CreateArtShowWithArtworkPrice(req) if err != nil { res.Msg = err.Error() err = errors.New(m.ERROR_CREATE) return res, err } res.Msg = m.CREATE_SUCCESS - res.ShowID = int64(showID) + res.ShowUID = showUID return res, nil } func (p *ArtShowProvider) UpdateShow(ctx context.Context, req *artShow.SaveShowReq) (res *artShow.SaveShowRes, err error) { - if req.ID == 0 { + if req.ShowUID == "" { err = errors.New(m.ERROR_INVALID_ID) return } res = new(artShow.SaveShowRes) if req.IsShow == m.ARTSHOW_INSIDE { showRel := new(model.ShowRel) - err, showRel = service.QueryShowRel_showId(req.ID) + err, showRel = service.QueryShowRel_showUID(req.ShowUID) if err != nil { return res, err } @@ -52,20 +52,20 @@ func (p *ArtShowProvider) UpdateShow(ctx context.Context, req *artShow.SaveShowR } } - err, showID := service.UpdateArtShowWithArtworkPrice(req) + err, showUID := service.UpdateArtShowWithArtworkPrice(req) if err != nil { res.Msg = err.Error() err = errors.New(m.UPDATE_FAILED) return } res.Msg = m.UPDATE_SUCCESS - res.ShowID = int64(showID) + res.ShowUID = showUID return } func (p *ArtShowProvider) DelShow(ctx context.Context, req *artShow.DelShowReq) (res *artShow.CommonRes, err error) { res = new(artShow.CommonRes) - if len(req.ShowID) < 1 { + if len(req.ShowUID) < 1 { err = errors.New(m.ERROR_INVALID_ID) return } @@ -129,7 +129,7 @@ func (p *ArtShowProvider) ShowStatisticalInfo(ctx context.Context, req *artShow. } func (p *ArtShowProvider) ArtworkPrice(ctx context.Context, req *artShow.ArtworkPriceReq) (res *artShow.ArtworkPriceRes, err error) { - if req.ArtworkID == 0 { + if req.ArtworkUID == "" { err = errors.New(m.ERROR_INVALID_ID) return } diff --git a/cmd/controller/show_apply.go b/cmd/controller/show_apply.go index b73ed00..28c4703 100644 --- a/cmd/controller/show_apply.go +++ b/cmd/controller/show_apply.go @@ -18,31 +18,31 @@ func (p *ArtShowProvider) CreateApply(ctx context.Context, req *artShow.SaveAppl return } res = new(artShow.SaveApplyRes) - err, applyID := service.CreateShowApply(req) + err, applyUID := service.CreateShowApply(req) if err != nil { res.Msg = err.Error() err = errors.New(m.ERROR_CREATE) return } res.Msg = m.CREATE_SUCCESS - res.ApplyID = int64(applyID) + res.ApplyUID = applyUID return } func (p *ArtShowProvider) UpdateApply(ctx context.Context, req *artShow.SaveApplyReq) (res *artShow.SaveApplyRes, err error) { - if req.ID == 0 { + if req.ApplyUID == "" { err = errors.New(m.ERROR_INVALID_ID) return } res = new(artShow.SaveApplyRes) - err, showID := service.UpdateShowApplyWithShowRel(req) + err, applyUID := service.UpdateShowApplyWithShowRel(req) if err != nil { res.Msg = err.Error() err = errors.New(m.UPDATE_FAILED) return } res.Msg = m.UPDATE_SUCCESS - res.ApplyID = int64(showID) + res.ApplyUID = applyUID return } @@ -64,12 +64,12 @@ func (p *ArtShowProvider) ApplyList(ctx context.Context, req *artShow.ApplyListR } func (p *ArtShowProvider) ApplyDetail(ctx context.Context, req *artShow.ApplyShowReq) (res *artShow.ApplyShowRes, err error) { - if req.ApplyID == 0 { + if req.ApplyUID == "" { err = errors.New(m.ERROR_INVALID_ID) return } res = new(artShow.ApplyShowRes) - err, res = service.ShowApplyDetail(uint(req.ApplyID)) + err, res = service.ShowApplyDetail(req.ApplyUID) if err != nil { res.Msg = err.Error() err = errors.New(m.ERROR_QUERY) @@ -79,12 +79,12 @@ func (p *ArtShowProvider) ApplyDetail(ctx context.Context, req *artShow.ApplySho } func (p *ArtShowProvider) DelApply(ctx context.Context, req *artShow.DelApplyReq) (res *artShow.CommonRes, err error) { - if len(req.ApplyID) < 1 { + if len(req.ApplyUID) < 1 { err = errors.New(m.ERROR_INVALID_ID) return } res = new(artShow.CommonRes) - err = service.DelApplyByApplyID(req) + err = service.DelApplyByApplyUID(req) if err != nil { res.Msg = err.Error() err = errors.New(m.ERROR_DELETE) @@ -95,7 +95,7 @@ func (p *ArtShowProvider) DelApply(ctx context.Context, req *artShow.DelApplyReq } func (p *ArtShowProvider) UpdateApplyStatus(ctx context.Context, req *artShow.UpdateApplyStatusReq) (res *artShow.CommonRes, err error) { - if req.ApplyID == 0 { + if req.ApplyUID == "" { err = errors.New(m.ERROR_INVALID_ID) return } diff --git a/cmd/dao/art_show.go b/cmd/dao/art_show.go index 0d7cc8d..c8c4e2a 100644 --- a/cmd/dao/art_show.go +++ b/cmd/dao/art_show.go @@ -4,18 +4,22 @@ import ( "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" "fonchain-artshow/pkg/db" + "fonchain-artshow/pkg/m" + uuid "github.com/satori/go.uuid" "go.uber.org/zap" "gorm.io/gorm" - "log" + "strings" + "time" ) func SaveArtShow(tx *gorm.DB, artShow *model.ArtShow) (err error) { - - if artShow.ID != uint(0) { - err = tx.Model(&model.ArtShow{}).Omit("id").Where("id = ?", artShow.ID).Updates(artShow).Error - } else { - err = tx.Model(&model.ArtShow{}).Create(&artShow).Error + uid, err := uuid.NewV4() + if err != nil { + return nil } + artShow.ShowUID = uid.String() + artShow.ShowSeq = strings.Join([]string{m.ARTSHOW_PREFIX, time.Now().Format("20060102150405")}, "") + err = tx.Model(&model.ArtShow{}).Create(&artShow).Error if err != nil { zap.L().Error("ArtShow err", zap.Error(err)) return @@ -24,11 +28,20 @@ func SaveArtShow(tx *gorm.DB, artShow *model.ArtShow) (err error) { return } +func UpdateArtShow(tx *gorm.DB, artShow *model.ArtShow) (err error) { + err = tx.Model(&model.ArtShow{}).Omit("show_uid").Where("show_uid = ?", artShow.ShowUID).Updates(artShow).Error + if err != nil { + zap.L().Error("ArtShow err", zap.Error(err)) + return + } + return +} + func ArtShowList(in *artShow.ShowListReq) (err error, total int64, out []*model.ArtShow) { queryDB := db.DbArtShow.Model(&model.ArtShow{}) - if in.ArtistID != "" { - queryDB = queryDB.Where("artist_id = ? ", in.ArtistID) + if in.ArtistUID != "" { + queryDB = queryDB.Where("artist_uid = ? ", in.ArtistUID) } if in.StartTime != "" && in.EndTime != "" { queryDB = queryDB.Where("convert(show_time, date) between ? and ?", in.StartTime, in.EndTime) @@ -53,9 +66,9 @@ func ArtShowList(in *artShow.ShowListReq) (err error, total int64, out []*model. return } -func ArtShowList_apply(applyID uint) (err error, out []*model.ArtShow) { +func ArtShowList_apply(applyUID string) (err error, out []*model.ArtShow) { out = make([]*model.ArtShow, 0) - err = db.DbArtShow.Table("art_show as a ").Select("a.*").Distinct("a.id").Joins(" right join show_rel as b on a.id = b.show_id").Where("b.apply_id = ? ", applyID).Find(&out).Error + err = db.DbArtShow.Table("art_show as a ").Distinct("a.show_uid").Select("a.show_uid,a.show_seq,a.show_name,a.artist_name,a.artist_uid,a.artwork_num,a.ruler,a.price,a.reward,a.show_time,a.is_show").Joins(" right join show_rel as b on a.show_uid = b.show_uid").Where("b.apply_uid = ? ", applyUID).Find(&out).Error if err != nil { zap.L().Error("ArtShowList_apply Find err", zap.Error(err)) return @@ -67,7 +80,7 @@ func ArtShowListByApplyStatus(in *artShow.ShowListReq) (err error, total int64, out = make([]*model.ArtShow, 0) tx := db.DbArtShow.Table("art_show as a") - tx.Joins(" left join show_rel as b on b.show_id = a.id").Where("a.is_show = ?", in.IsShow) + tx.Joins(" left join show_rel as b on b.show_uid = a.show_uid").Where("a.is_show = ?", in.IsShow) err = tx.Count(&total).Error if err != nil { zap.L().Error("ArtShowListByApplyStatus Count err", zap.Error(err)) @@ -83,8 +96,8 @@ func ArtShowListByApplyStatus(in *artShow.ShowListReq) (err error, total int64, return } -func DelArtShow(tx *gorm.DB, show_id int64) (err error) { - err = tx.Where("id = ?", show_id).Delete(&model.ArtShow{}).Error +func DelArtShow(tx *gorm.DB, show_uid string) (err error) { + err = tx.Where("show_uid = ?", show_uid).Delete(&model.ArtShow{}).Error if err != nil { zap.L().Error("ArtShow delete err", zap.Error(err)) return @@ -92,13 +105,12 @@ func DelArtShow(tx *gorm.DB, show_id int64) (err error) { return } -func QueryArtShow(id uint) (err error, out *model.ArtShow) { - err = db.DbArtShow.Model(&model.ArtShow{}).Where("id = ?", id).Find(&out).Error +func QueryArtShow(show_uid string) (err error, out *model.ArtShow) { + err = db.DbArtShow.Model(&model.ArtShow{}).Where("show_uid = ?", show_uid).Find(&out).Error if err != nil { zap.L().Error("ArtShow Find err", zap.Error(err)) return } - log.Println(out) return } @@ -126,14 +138,14 @@ func ShowStatistical(isShow int32) (err error, artistNum, packageNum, totalNum, } NotShowNum = 0 - err = db.DbArtShow.Table("art_show as a").Distinct("b.artist_name").Joins(" join artwork_price as b on b.show_id = a.id").Where("a.is_show in (1,2)").Count(&NotShowNum).Error + err = db.DbArtShow.Table("art_show as a").Distinct("a.artist_uid").Joins(" join artwork_price as b on b.show_uid = a.show_uid").Where("a.is_show in (1,2)").Count(&NotShowNum).Error if err != nil { zap.L().Error("ShowStatistical totalNum count err", zap.Error(err)) return } ShowHisNum = 0 - err = db.DbArtShow.Table("art_show as a").Distinct("b.artist_name").Joins(" join artwork_price as b on b.show_id = a.id").Where("a.is_show = 3 ").Count(&ShowHisNum).Error + err = db.DbArtShow.Table("art_show as a").Distinct("a.artist_uid").Joins(" join artwork_price as b on b.show_uid = a.show_uid").Where("a.is_show = 3 ").Count(&ShowHisNum).Error if err != nil { zap.L().Error("ShowStatistical totalNum count err", zap.Error(err)) return diff --git a/cmd/dao/artwork_price.go b/cmd/dao/artwork_price.go index ee822b9..ccbc4c8 100644 --- a/cmd/dao/artwork_price.go +++ b/cmd/dao/artwork_price.go @@ -3,37 +3,37 @@ package dao import ( "fonchain-artshow/cmd/model" "fonchain-artshow/pkg/db" + uuid "github.com/satori/go.uuid" "go.uber.org/zap" "gorm.io/gorm" ) -func SaveArtworkPrice(tx *gorm.DB, artworks []*model.ArtworkPrice) (err error, ids []uint) { - ids = make([]uint, 0) // 用于记录 更新的记录ID +func SaveArtworkPrice(tx *gorm.DB, artwork *model.ArtworkPrice) (err error) { + uid, err := uuid.NewV4() + if err != nil { + return err + } + artwork.ArtworkPriceUID = uid.String() + err = tx.Model(&model.ArtworkPrice{}).Create(&artwork).Error + if err != nil { + zap.L().Error("Artwork price save err", zap.Error(err)) + return + } + return +} - for i := 0; i < len(artworks); i++ { - if artworks[i].ID != 0 { - err = tx.Model(&model.ArtworkPrice{}).Omit("id").Where("id = ?", artworks[i].ID).Updates(artworks[i]).Error - } else { - artworkPrice := new(model.ArtworkPrice) - results := tx.Model(&model.ArtworkPrice{}).Where("show_id = ? and artwork_id = ?", artworks[i].ShowID, artworks[i].ArtworkID).First(&artworkPrice) - if results.Error == nil || artworkPrice.ID == 0 { - err = tx.Model(&model.ArtworkPrice{}).Create(&artworks[i]).Error - } else { - err = tx.Model(&model.ArtworkPrice{}).Where("show_id = ? and artwork_id = ?", artworks[i].ShowID, artworks[i].ArtworkID).Updates(artworks[i]).Error - } - } - if err != nil { - zap.L().Error("Artwork price save err", zap.Error(err)) - return - } - ids = append(ids, artworks[i].ID) +func UpdateArtworkPrice(tx *gorm.DB, artwork *model.ArtworkPrice) (err error) { + err = tx.Model(&model.ArtworkPrice{}).Omit("artwork_price_uid").Where("artwork_price_uid = ?", artwork.ArtworkPriceUID).Updates(artwork).Error + if err != nil { + zap.L().Error("Artwork price save err", zap.Error(err)) + return } return } -func ArtworkPriceList(showID uint) (err error, out []*model.ArtworkPrice) { +func ArtworkPriceList(showUID string) (err error, out []*model.ArtworkPrice) { out = make([]*model.ArtworkPrice, 0) - err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("show_id = ? ", showID).Find(&out).Error + err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("show_uid = ? ", showUID).Find(&out).Error if err != nil { zap.L().Error("Artwork list err", zap.Error(err)) return @@ -41,9 +41,9 @@ func ArtworkPriceList(showID uint) (err error, out []*model.ArtworkPrice) { return } -func QueryArtworkPrice_artworkID(artworkID int64) (err error, out *model.ArtworkPrice) { +func QueryArtworkPrice_artworkUID(artworkUID string) (err error, out *model.ArtworkPrice) { out = new(model.ArtworkPrice) - err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("artwork_id = ? ", artworkID).Find(&out).Error + err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("artwork_uid = ? ", artworkUID).Find(&out).Error if err != nil { zap.L().Error("Artwork price artwork_id query err", zap.Error(err)) return @@ -51,9 +51,9 @@ func QueryArtworkPrice_artworkID(artworkID int64) (err error, out *model.Artwork return } -func QueryArtworkPrice_id(id uint) (err error, out *model.ArtworkPrice) { +func QueryArtworkPrice_uid(uid string) (err error, out *model.ArtworkPrice) { out = new(model.ArtworkPrice) - err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("id = ? ", id).Find(&out).Error + err = db.DbArtShow.Model(&model.ArtworkPrice{}).Where("artwork_price_uid = ? ", uid).Find(&out).Error if err != nil { zap.L().Error("Artwork price id query err", zap.Error(err)) return @@ -61,8 +61,8 @@ func QueryArtworkPrice_id(id uint) (err error, out *model.ArtworkPrice) { return } -func DelArtworkPrice(tx *gorm.DB, ids []int64) (err error) { - err = tx.Where("id in (?)", ids).Delete(&model.ArtworkPrice{}).Error +func DelArtworkPrice(tx *gorm.DB, artworkPriceUids []string) (err error) { + err = tx.Where("artwork_price_uid in (?)", artworkPriceUids).Delete(&model.ArtworkPrice{}).Error if err != nil { zap.L().Error("Artwork delete err", zap.Error(err)) return @@ -70,8 +70,8 @@ func DelArtworkPrice(tx *gorm.DB, ids []int64) (err error) { return } -func DelArtworkPrice_showId(tx *gorm.DB, id int64) (err error) { - err = tx.Where("show_id = ? ", id).Delete(&model.ArtworkPrice{}).Error +func DelArtworkPrice_showUID(tx *gorm.DB, show_uid string) (err error) { + err = tx.Where("show_uid = ? ", show_uid).Delete(&model.ArtworkPrice{}).Error if err != nil { zap.L().Error("Artwork delete err", zap.Error(err)) return diff --git a/cmd/dao/show_apply.go b/cmd/dao/show_apply.go index 1ec091b..e749279 100644 --- a/cmd/dao/show_apply.go +++ b/cmd/dao/show_apply.go @@ -5,23 +5,36 @@ import ( "fonchain-artshow/pb/artShow" "fonchain-artshow/pkg/db" "fonchain-artshow/pkg/m" + uuid "github.com/satori/go.uuid" "go.uber.org/zap" "gorm.io/gorm" + "strings" + "time" ) -func SaveShowApply(showApply *model.ShowApply) (tx *gorm.DB, err error) { - tx = db.DbArtShow.Begin() - - if showApply.ID != uint(0) { - err = tx.Model(&model.ShowApply{}).Omit("id").Where("id = ?", showApply.ID).Updates(showApply).Error - } else { - err = tx.Model(&model.ShowApply{}).Create(&showApply).Error +func SaveShowApply(showApply *model.ShowApply) (err error) { + uid, err := uuid.NewV4() + if err != nil { + return err } + showApply.ApplyUID = uid.String() + showApply.ApplySeq = strings.Join([]string{m.ARTSHOWAPPLY_PREFIX, time.Now().Format("20060102150405")}, "") + showApply.Status = m.SHOWAPPLYStatusDoing + err = db.DbArtShow.Model(&model.ShowApply{}).Create(&showApply).Error if err != nil { zap.L().Error("ShowApply err", zap.Error(err)) return } + return +} +func UpdateShowApply(showApply *model.ShowApply) (tx *gorm.DB, err error) { + tx = db.DbArtShow.Begin() + err = tx.Model(&model.ShowApply{}).Omit("apply_uid").Where("apply_uid = ?", showApply.ApplyUID).Updates(showApply).Error + if err != nil { + zap.L().Error("ShowApply err", zap.Error(err)) + return + } return } @@ -29,7 +42,7 @@ func ShowApplyList(in *artShow.ApplyListReq) (err error, total int64, out []*mod out = make([]*model.ShowApply, 0) queryDB := db.DbArtShow.Model(&model.ShowApply{}) if in.Status == 0 { - in.Status = m.SHOWAPPLY_ADD + in.Status = m.SHOWAPPLYStatusOk } queryDB.Where("status = ?", in.Status) @@ -51,9 +64,9 @@ func ShowApplyList(in *artShow.ApplyListReq) (err error, total int64, out []*mod return } -func ShowApplyDetail(applyID uint) (err error, out *model.ShowApply) { +func ShowApplyDetail(applyUID string) (err error, out *model.ShowApply) { out = new(model.ShowApply) - err = db.DbArtShow.Model(&model.ShowApply{}).Where("id = ?", applyID).Find(&out).Error + err = db.DbArtShow.Model(&model.ShowApply{}).Where("apply_uid = ?", applyUID).Find(&out).Error if err != nil { zap.L().Error("ShowApplyDetail err", zap.Error(err)) return @@ -63,7 +76,7 @@ func ShowApplyDetail(applyID uint) (err error, out *model.ShowApply) { func DelShowApply(in *artShow.DelApplyReq) (tx *gorm.DB, err error) { tx = db.DbArtShow.Begin() - err = tx.Delete(&model.ShowApply{}, in.ApplyID).Error + err = tx.Where("apply_uid = ?", in.ApplyUID).Delete(&model.ShowApply{}).Error if err != nil { zap.L().Error("ShowApply delete err", zap.Error(err)) return diff --git a/cmd/dao/show_rel.go b/cmd/dao/show_rel.go index eaa2191..ff37d5a 100644 --- a/cmd/dao/show_rel.go +++ b/cmd/dao/show_rel.go @@ -3,35 +3,44 @@ package dao import ( "fonchain-artshow/cmd/model" "fonchain-artshow/pkg/db" + uuid "github.com/satori/go.uuid" "go.uber.org/zap" "gorm.io/gorm" ) -func SaveShowRels(tx *gorm.DB, showRels []*model.ShowRel) (err error, out []uint) { - out = make([]uint, 0) +func SaveShowRels(tx *gorm.DB, showRels []*model.ShowRel) (err error, out []string) { + out = make([]string, 0) for i := 0; i < len(showRels); i++ { - if showRels[i].ID != 0 { - err = tx.Model(&model.ShowRel{}).Omit("id").Where("id = ?", showRels[i].ID).Updates(showRels[i]).Error - } else { - showRel := new(model.ShowRel) - results := tx.Model(&model.ArtworkPrice{}).Where("show_id = ? and apply_id = ?", showRels[i].ShowID, showRels[i].ApplyID).First(&showRel) - if results.Error == nil || showRel.ID == 0 { - err = tx.Model(&model.ArtworkPrice{}).Create(&showRels[i]).Error - } else { - err = tx.Model(&model.ArtworkPrice{}).Where("show_id = ? and apply_id = ?", showRels[i].ShowID, showRels[i].ApplyID).Updates(showRels[i]).Error - } + uid, err := uuid.NewV4() + if err != nil { + return err, out } + showRels[i].ShowRelUID = uid.String() + err = tx.Model(&model.ShowRel{}).Create(&showRels[i]).Error if err != nil { - zap.L().Error("ShowRels err", zap.Error(err)) + zap.L().Error("ShowRels save err", zap.Error(err)) + return err, nil + } + out = append(out, showRels[i].ApplyUID) + } + return +} + +func UpdateShowRels(tx *gorm.DB, showRels []*model.ShowRel) (err error, out []string) { + out = make([]string, 0) + for i := 0; i < len(showRels); i++ { + results := tx.Model(&model.ShowRel{}).Where("show_uid = ? and apply_uid = ?", showRels[i].ShowUID, showRels[i].ApplyUID).First(&showRels[i]) + if results.Error != nil { + zap.L().Error("ShowRels updates err", zap.Error(err)) return err, nil } - out = append(out, showRels[i].ID) + out = append(out, showRels[i].ApplyUID) } return } func SaveShowRel(tx *gorm.DB, showRel *model.ShowRel) (err error) { - err = tx.Model(&model.ShowRel{}).Where("show_id = ?", showRel.ShowID).Updates(showRel).Error + err = tx.Model(&model.ShowRel{}).Where("show_uid = ?", showRel.ShowUID).Updates(showRel).Error if err != nil { zap.L().Error("ShowRel err", zap.Error(err)) return err @@ -39,8 +48,8 @@ func SaveShowRel(tx *gorm.DB, showRel *model.ShowRel) (err error) { return } -func DelShowRel(tx *gorm.DB, ids []int64) (err error) { - err = tx.Where("id in (?)", ids).Delete(&model.ShowRel{}).Error +func DelShowRel(tx *gorm.DB, showRelUIDs []string) (err error) { + err = tx.Where("show_rel_uid in (?)", showRelUIDs).Delete(&model.ShowRel{}).Error if err != nil { zap.L().Error("ShowRel delete err", zap.Error(err)) return @@ -48,20 +57,20 @@ func DelShowRel(tx *gorm.DB, ids []int64) (err error) { return } -func DelShowRelByApplyID(tx *gorm.DB, applyID uint) (err error) { - err = tx.Where("apply_id = ? ", applyID).Delete(&model.ShowRel{}).Error +func DelShowRelByApplyUID(tx *gorm.DB, applyUID string) (err error) { + err = tx.Where("apply_uid = ? ", applyUID).Delete(&model.ShowRel{}).Error if err != nil { - zap.L().Error("ShowRel by applyID delete err", zap.Error(err)) + zap.L().Error("ShowRel by applyUID delete err", zap.Error(err)) return } return } -func QueryShowRel_showId(showID int64) (err error, out *model.ShowRel) { +func QueryShowRel_showUID(showUID string) (err error, out *model.ShowRel) { out = new(model.ShowRel) findDB := db.DbArtShow.Model(&model.ShowRel{}) - if showID != 0 { - findDB = findDB.Where("show_id = ? ", showID) + if showUID != "" { + findDB = findDB.Where("show_uid = ? ", showUID) } err = findDB.Find(&out).Error if err != nil { @@ -71,11 +80,11 @@ func QueryShowRel_showId(showID int64) (err error, out *model.ShowRel) { return } -func QueryShowRelList(applyID uint) (err error, out []*model.ShowRel) { +func QueryShowRelList(applyUID string) (err error, out []*model.ShowRel) { out = make([]*model.ShowRel, 0) findDB := db.DbArtShow.Model(&model.ShowRel{}) - if applyID != 0 { - findDB = findDB.Where("apply_id = ? ", applyID) + if applyUID != "" { + findDB = findDB.Where("apply_uid = ? ", applyUID) } err = findDB.Find(&out).Error if err != nil { diff --git a/cmd/main.go b/cmd/main.go index a06c451..3fbd214 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -3,7 +3,6 @@ package main import ( "fmt" grpc2 "fonchain-artshow/pb/grpc" - "net" "google.golang.org/grpc" diff --git a/cmd/model/art_show.go b/cmd/model/art_show.go index 5b48147..b289fda 100644 --- a/cmd/model/art_show.go +++ b/cmd/model/art_show.go @@ -5,10 +5,11 @@ import "gorm.io/gorm" type ArtShow struct { gorm.Model + ShowUID string `json:"show_uid" gorm:"show_uid"` ShowSeq string `json:"show_seq" gorm:"show_seq"` // 画展包序列 ShowName string `json:"show_name" gorm:"show_name"` // 画展包名称 ArtistName string `json:"artist_name" gorm:"artist_name"` // 画家 - ArtistID string `json:"artist_id" gorm:"artist_id"` // 画家ID + ArtistUID string `json:"artist_uid" gorm:"artist_uid"` // 画家ID ArtworkNum int32 `json:"artwork_num" gorm:"artwork_num"` // 画作数量 Ruler int32 `json:"ruler" gorm:"ruler"` // 画作总平尺 Price int64 `json:"price" gorm:"price"` // 画展包价格 diff --git a/cmd/model/artwork_price.go b/cmd/model/artwork_price.go index d74251c..fab9dae 100644 --- a/cmd/model/artwork_price.go +++ b/cmd/model/artwork_price.go @@ -5,19 +5,20 @@ import "gorm.io/gorm" type ArtworkPrice struct { gorm.Model - ShowID uint `json:"show_id" gorm:"show_id"` // 画展ID - ArtworkID int64 `json:"artwork_id" gorm:"artwork_id"` // 画作ID - ArtworkName string `json:"artwork_name" gorm:"artwork_name"` // 画作名称 - ArtistName string `json:"artist_name" gorm:"artist_name"` // 画家名称 - SmallPic string `json:"small_pic" gorm:"small_pic"` // 画作小图 - Price int64 `json:"price" gorm:"price"` // 总价 - RulerPrice int64 `json:"ruler_price" gorm:"ruler_price"` // 平尺价 - Length int32 `json:"length" gorm:"length"` // 画作长度 - Width int32 `json:"width" gorm:"width"` // 画作宽度 - Ruler int32 `json:"ruler" gorm:"ruler"` // 画作平尺 - ArtworkPrice int64 `json:"artwork_price" gorm:"artwork_price"` // 画作价格 - MarketPrice int64 `json:"market_price" gorm:"market_price"` // 市场价 - CopyrightPrice int64 `json:"copyright_price" gorm:"copyright_price"` // 版权价格 - ArtistPrice int64 `json:"artist_price" gorm:"artist_price"` // 画家价格 (润格 * 平尺) - FloatPrice int64 `json:"float_price" gorm:"float_price"` // 浮动价格 + ArtworkPriceUID string `json:"artwork_price_uid" gorm:"artwork_price_uid"` + ShowUID string `json:"show_uid" gorm:"show_uid"` // 画展ID + ArtworkUID string `json:"artwork_uid" gorm:"artwork_uid"` // 画作ID + ArtworkName string `json:"artwork_name" gorm:"artwork_name"` // 画作名称 + ArtistName string `json:"artist_name" gorm:"artist_name"` // 画家名称 + SmallPic string `json:"small_pic" gorm:"small_pic"` // 画作小图 + Price int64 `json:"price" gorm:"price"` // 总价 + RulerPrice int64 `json:"ruler_price" gorm:"ruler_price"` // 平尺价 + Length int32 `json:"length" gorm:"length"` // 画作长度 + Width int32 `json:"width" gorm:"width"` // 画作宽度 + Ruler int32 `json:"ruler" gorm:"ruler"` // 画作平尺 + ArtworkPrice int64 `json:"artwork_price" gorm:"artwork_price"` // 画作价格 + MarketPrice int64 `json:"market_price" gorm:"market_price"` // 市场价 + CopyrightPrice int64 `json:"copyright_price" gorm:"copyright_price"` // 版权价格 + ArtistPrice int64 `json:"artist_price" gorm:"artist_price"` // 画家价格 (润格 * 平尺) + FloatPrice int64 `json:"float_price" gorm:"float_price"` // 浮动价格 } diff --git a/cmd/model/show_apply.go b/cmd/model/show_apply.go index d7fecc3..5934f14 100644 --- a/cmd/model/show_apply.go +++ b/cmd/model/show_apply.go @@ -7,9 +7,10 @@ import ( type ShowApply struct { gorm.Model + ApplyUID string `json:"apply_uid" gorm:"apply_uid"` ApplySeq string `json:"apply_seq" gorm:"apply_seq"` // 画展包申请序列号 Applicant string `json:"applicant" gorm:"applicant"` // 申请人 - ApplicantID uint `json:"applicant_id" gorm:"applicant_id"` // 申请人 + ApplicantID string `json:"applicant_id" gorm:"applicant_id"` // 申请人 Num int32 `json:"num" gorm:"num"` // 申请画展包数量 ApplyTime string `json:"apply_time" gorm:"apply_time"` // 申请时间 Status int `json:"status" gorm:"status"` // 申请画展包状态 10,创建 11,数量审批 12,数量审批驳回 13,关联画展包 14,画展包关联审批 15,关联审批驳回 16,可展 diff --git a/cmd/model/show_rel.go b/cmd/model/show_rel.go index f519432..2f1f554 100644 --- a/cmd/model/show_rel.go +++ b/cmd/model/show_rel.go @@ -5,12 +5,13 @@ import "gorm.io/gorm" type ShowRel struct { gorm.Model + ShowRelUID string `json:"show_rel_uid" gorm:"show_rel_uid"` // 画展包申请关联画展UID + ShowUID string `json:"show_uid" gorm:"show_uid"` // 画展包ID + ApplyUID string `json:"apply_uid" gorm:"show_uid"` // 申请ID + Index int32 `json:"index" gorm:"index"` // 申请下标 + Address string `json:"address" gorm:"address"` // 参展地址 //ShowSeq string `json:"show_seq" gorm:"show_seq"` // 画展包序列 - ShowID uint `json:"show_id" gorm:"show_id"` // 画展包ID //ApplySeq string `json:"apply_seq" gorm:"apply_seq"` // 申请序列 - ApplyID uint `json:"apply_id" gorm:"apply_id"` // 申请ID - Index int32 `json:"index" gorm:"index"` // 申请下标 - Address string `json:"address" gorm:"address"` // 参展地址 //Status int32 `json:"status" gorm:"status"` // 参展状态 1、待展 2、驳回 3、可展 //Remark string `json:"remark" gorm:"remark"` // 备注 } diff --git a/cmd/runtime/log/artwork_server.log b/cmd/runtime/log/artwork_server.log new file mode 100644 index 0000000..16c8ceb --- /dev/null +++ b/cmd/runtime/log/artwork_server.log @@ -0,0 +1,3 @@ +{"level":"ERROR","time":"2022-11-08T10:50:49.304+0800","caller":"dao/art_show.go:144","msg":"ShowStatistical totalNum count err","error":"Error 1054: Unknown column 'b.show_id' in 'on clause'"} +{"level":"ERROR","time":"2022-11-08T10:56:33.377+0800","caller":"dao/art_show.go:144","msg":"ShowStatistical totalNum count err","error":"Error 1054: Unknown column 'b.artist_uid' in 'field list'"} +{"level":"ERROR","time":"2022-11-08T16:51:33.241+0800","caller":"dao/art_show.go:73","msg":"ArtShowList_apply Find err","error":"Error 1054: Unknown column 'b.show_id' in 'on clause'"} diff --git a/cmd/service/art_show.go b/cmd/service/art_show.go index a770471..902b31d 100644 --- a/cmd/service/art_show.go +++ b/cmd/service/art_show.go @@ -2,7 +2,6 @@ package service import ( "errors" - "fmt" "fonchain-artshow/cmd/dao" "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" @@ -11,7 +10,8 @@ import ( "fonchain-artshow/pkg/serializer" ) -func CreateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showID uint) { +// 创建 画展包 及 关联画作 +func CreateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showUID string) { artShowM := serializer.BuildArtShowM(in) tx := db.DbArtShow.Begin() @@ -23,7 +23,7 @@ func CreateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showID u } if len(in.ShowArtwork) > 0 { - artworks := serializer.BuildShowArtworkM(in.ShowArtwork, artShowM.ID) + artworks := serializer.BuildShowArtworkM(in.ShowArtwork, artShowM.ShowUID) artworks = serializer.CalcPrice(artShowM.Price, artShowM.Ruler, artworks) @@ -31,35 +31,42 @@ func CreateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showID u if err != nil { return } - - err, _ = dao.SaveArtworkPrice(tx, artworks) - if err != nil { - tx.Rollback() - return + for i := 0; i < len(artworks); i++ { + err = dao.SaveArtworkPrice(tx, artworks[i]) + if err != nil { + tx.Rollback() + return + } } } err = tx.Commit().Error - return err, artShowM.ID + return err, artShowM.ShowUID } -func UpdateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showID uint) { +// 更新 画展包 及 关联画作 +func UpdateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showUID string) { + tx := db.DbArtShow.Begin() + artShowM := serializer.BuildArtShowM(in) // 构建画展包数据 + artworks := make([]*model.ArtworkPrice, 0) - err, artworkPrices := dao.ArtworkPriceList(uint(in.ID)) + // 查询是否已有画作存在 + err, artworkPrices := dao.ArtworkPriceList(in.ShowUID) if err != nil { return } + if len(artworkPrices) > 0 { + artworks = append(artworks, artworkPrices...) + } - tx := db.DbArtShow.Begin() - artShowM := serializer.BuildArtShowM(in) // 构建画展包数据 - artworks := make([]*model.ArtworkPrice, 0) - if len(in.ShowArtwork) < 1 && (in.Price != 0 || in.Reward != 0) { - artworks = artworkPrices - } else { - artworks = serializer.BuildShowArtworkM(in.ShowArtwork, uint(in.ID)) + // 判断是否有新增画作 + if len(in.ShowArtwork) > 0 { + showArtwork := serializer.BuildShowArtworkM(in.ShowArtwork, in.ShowUID) + artworks = append(artworks, showArtwork...) } + // 更新 画作 if len(artworks) > 0 { if in.Price != 0 { artworks = serializer.CalcPrice(artShowM.Price, artShowM.Ruler, artworks) @@ -70,54 +77,66 @@ func UpdateArtShowWithArtworkPrice(in *artShow.SaveShowReq) (err error, showID u return } } - // 更新画作价格 - err, _ := dao.SaveArtworkPrice(tx, artworks) + + for i := 0; i < len(artworks); i++ { + if artworks[i].ArtworkPriceUID != "" { + // 更新画作价格 + err := dao.UpdateArtworkPrice(tx, artworks[i]) + if err != nil { + tx.Rollback() + return err, "" + } + } else { + err = dao.SaveArtworkPrice(tx, artworks[i]) + if err != nil { + tx.Rollback() + return err, "" + } + } + } + } + + // 删除旧画作 + if len(in.DelShowArtwork) > 0 { + del := make([]string, 0) + for i := 0; i < len(in.DelShowArtwork); i++ { + del = append(del, in.DelShowArtwork[i].ArtworkPriceUID) + } + err = dao.DelArtworkPrice(tx, del) if err != nil { tx.Rollback() - return err, 0 - } - // 删除旧画作 - //_, del, _ := utils.BeUniqueSlice_uint(serializer.BuildArtworkPriceIDs(artworkPrices), newIDs) - if len(in.DelShowArtwork) > 0 { - del := make([]int64, 0) - for i := 0; i < len(in.DelShowArtwork); i++ { - del = append(del, in.DelShowArtwork[i].ID) - } - err = dao.DelArtworkPrice(tx, del) - if err != nil { - tx.Rollback() - return err, 0 - } + return err, "" } } // 更新画展包 - err = dao.SaveArtShow(tx, artShowM) + err = dao.UpdateArtShow(tx, artShowM) if err != nil { tx.Rollback() return } err = tx.Commit().Error - return err, artShowM.ID + return err, artShowM.ShowUID } +// 删除画展包 func DelArtShow(in *artShow.DelShowReq) (err error) { tx := db.DbArtShow.Begin() - for i := 0; i < len(in.ShowID); i++ { - queryShowRelErr, show_rel := dao.QueryShowRel_showId(in.ShowID[i]) + for i := 0; i < len(in.ShowUID); i++ { + queryShowRelErr, show_rel := dao.QueryShowRel_showUID(in.ShowUID[i]) if queryShowRelErr == nil && show_rel.ID == 0 { - delArtShowErr := dao.DelArtShow(tx, in.ShowID[i]) + delArtShowErr := dao.DelArtShow(tx, in.ShowUID[i]) if err != nil { tx.Rollback() return delArtShowErr } - delArtworkPriceErr := dao.DelArtworkPrice_showId(tx, in.ShowID[i]) + delArtworkPriceErr := dao.DelArtworkPrice_showUID(tx, in.ShowUID[i]) if err != nil { tx.Rollback() return delArtworkPriceErr } - } else if show_rel.ShowID != 0 { + } else if show_rel.ShowUID != "" { tx.Rollback() return errors.New("存在画展包被使用,无法删除") } @@ -127,6 +146,7 @@ func DelArtShow(in *artShow.DelShowReq) (err error) { return } +// 画展包列表 func ArtShowList(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) { out = new(artShow.ShowListRes) artShows := make([]*model.ArtShow, 0) @@ -142,10 +162,11 @@ func ArtShowList(in *artShow.ShowListReq) (err error, out *artShow.ShowListRes) return } +// 画展包关联画作信息 func ShowArtworkInfo(in *artShow.ShowDetailReq) (err error, out *artShow.ShowArtworkDetailRes) { out = new(artShow.ShowArtworkDetailRes) artworkPriceS := make([]*model.ArtworkPrice, 0) - err, artworkPriceS = dao.ArtworkPriceList(uint(in.ShowID)) + err, artworkPriceS = dao.ArtworkPriceList(in.ShowUID) if err != nil { return } @@ -153,15 +174,15 @@ func ShowArtworkInfo(in *artShow.ShowDetailReq) (err error, out *artShow.ShowArt return } +// 画展包详情 func ShowDetail(in *artShow.ShowDetailReq) (err error, out *artShow.ShowDetailRes) { out = new(artShow.ShowDetailRes) show := new(model.ArtShow) - err, show = dao.QueryArtShow(uint(in.ShowID)) + err, show = dao.QueryArtShow(in.ShowUID) if err != nil { return } out.Data = serializer.BuildArtShowRpc(show) - fmt.Println(out.Data) return } diff --git a/cmd/service/show_apply.go b/cmd/service/show_apply.go index 9daed55..31b3bfd 100644 --- a/cmd/service/show_apply.go +++ b/cmd/service/show_apply.go @@ -1,95 +1,91 @@ package service import ( + "fmt" "fonchain-artshow/cmd/dao" "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" "fonchain-artshow/pkg/m" "fonchain-artshow/pkg/serializer" - "gorm.io/gorm" ) -func CreateShowApply(in *artShow.SaveApplyReq) (err error, applyID uint) { +// 创建画展包申请 +func CreateShowApply(in *artShow.SaveApplyReq) (err error, applyUID string) { showApply := serializer.BuildShowApply(in) - - tx, err := dao.SaveShowApply(showApply) + err = dao.SaveShowApply(showApply) if err != nil { - tx.Rollback() return } - err = tx.Commit().Error - - // 申请画展包时,暂时不携带画展包信息 - /* showRels := serializer.BuildShowRel(in.Rel, showApply.ID) - err = dao.SaveShowRels(tx, showRels) - if err != nil { - tx.Rollback() - return - } - err = tx.Commit().Error*/ - return err, showApply.ID + return err, showApply.ApplyUID } -func UpdateShowApplyWithShowRel(in *artShow.SaveApplyReq) (err error, applyID uint) { +// 更新画展包申请 及 关联记录 +func UpdateShowApplyWithShowRel(in *artShow.SaveApplyReq) (err error, applyUID string) { // 更新画展包申请 showApply := serializer.BuildShowApply(in) - tx, err := dao.SaveShowApply(showApply) + tx, err := dao.UpdateShowApply(showApply) if err != nil { tx.Rollback() return } - // 更新画展包申请关系 + // 更新 关联的 画展包的状态 为 已展 if len(in.Rel) > 0 { // 保存 新 show_rel - newShowRelS := serializer.BuildShowRelM(in.Rel, showApply.ID) + newShowRelS := serializer.BuildShowRelM(in.Rel, showApply.ApplyUID) err, _ := dao.SaveShowRels(tx, newShowRelS) + if err != nil { + tx.Rollback() + return err, showApply.ApplyUID + } for i := 0; i < len(newShowRelS); i++ { // 更新 画展包状态 为 已展 - show := serializer.BuildArtShowIsShowM(newShowRelS[i].ShowID, m.ARTSHOW_SHOWING) - err := dao.SaveArtShow(tx, show) + show := serializer.BuildArtShowIsShowM(newShowRelS[i].ShowUID, m.ARTSHOW_SHOWING) + err := dao.UpdateArtShow(tx, show) if err != nil { tx.Rollback() - return err, showApply.ID + return err, showApply.ApplyUID } } + } - if len(in.DelRel) > 0 { // 如果 旧 show_rel 有数据 则 删除 旧记录(去除 保留下来的) - del := make([]int64, 0) - for i := 0; i < len(in.DelRel); i++ { - del = append(del, in.DelRel[i].ID) + // 更新 取消关联的 画展包的状态 为 可展 + if len(in.DelRel) > 0 { + del := make([]string, 0) + for i := 0; i < len(in.DelRel); i++ { + del = append(del, in.DelRel[i].ShowRelUID) - // 更新 画展包状态 为 可展 - show := serializer.BuildArtShowIsShowM(newShowRelS[i].ShowID, m.ARTSHOW_PASS) - err := dao.SaveArtShow(tx, show) - if err != nil { - tx.Rollback() - return err, showApply.ID - } - } - err = dao.DelShowRel(tx, del) + // 更新 画展包状态 为 可展 + show := serializer.BuildArtShowIsShowM(in.DelRel[i].ShowUID, m.ARTSHOW_PASS) + err := dao.UpdateArtShow(tx, show) if err != nil { tx.Rollback() - return err, showApply.ID + return err, showApply.ApplyUID } + } + // 删除关联记录 + err = dao.DelShowRel(tx, del) + if err != nil { + tx.Rollback() + return err, showApply.ApplyUID } } + err = tx.Commit().Error - return err, showApply.ID + return err, showApply.ApplyUID } +// 更新画展包申请状态 func UpdateShowApplyStatus(in *artShow.UpdateApplyStatusReq) (err error) { - - // 更新画展包申请 状态 showApply := &model.ShowApply{ - Model: gorm.Model{ID: uint(in.ApplyID)}, - Status: int(in.Status), - Remark: in.Remark, + ApplyUID: in.ApplyUID, + Status: int(in.Status), + Remark: in.Remark, } - tx, err := dao.SaveShowApply(showApply) + tx, err := dao.UpdateShowApply(showApply) if err != nil { tx.Rollback() return @@ -98,6 +94,7 @@ func UpdateShowApplyStatus(in *artShow.UpdateApplyStatusReq) (err error) { return } +// 查询画展包申请列表 func ShowApplyList(in *artShow.ApplyListReq) (err error, total int64, out []*artShow.ApplyDetail) { out = make([]*artShow.ApplyDetail, 0) err, total, applyList := dao.ShowApplyList(in) @@ -113,44 +110,65 @@ func ShowApplyList(in *artShow.ApplyListReq) (err error, total int64, out []*art return } -func ShowApplyDetail(applyID uint) (err error, out *artShow.ApplyShowRes) { +// 查询画展包申请详情 +func ShowApplyDetail(applyUID string) (err error, out *artShow.ApplyShowRes) { out = new(artShow.ApplyShowRes) - err, showApply := dao.ShowApplyDetail(applyID) + err, showApply := dao.ShowApplyDetail(applyUID) if err != nil { return } out.Apply = serializer.BuildShowApplyRes(showApply) - err, artShow := dao.ArtShowList_apply(applyID) + err, artShow := dao.ArtShowList_apply(applyUID) if err != nil { return } out.Show = serializer.BuildArtShowListRes(artShow) + fmt.Println(out.Show) return } -func DelApplyByApplyID(in *artShow.DelApplyReq) (err error) { +// 删除画展包申请记录 +func DelApplyByApplyUID(in *artShow.DelApplyReq) (err error) { tx, err := dao.DelShowApply(in) if err != nil { tx.Rollback() return } - for i := 0; i < len(in.ApplyID); i++ { - err = dao.DelShowRelByApplyID(tx, uint(in.ApplyID[i])) + for i := 0; i < len(in.ApplyUID); i++ { + err = dao.DelShowRelByApplyUID(tx, in.ApplyUID[i]) if err != nil { tx.Rollback() return } + + queryShowRelErr, showRels := dao.QueryShowRelList(in.ApplyUID[i]) + if queryShowRelErr != nil { + tx.Rollback() + return queryShowRelErr + } + if len(showRels) > 0 { + for i := 0; i < len(showRels); i++ { + // 更新 画展包状态 为 可展 + show := serializer.BuildArtShowIsShowM(showRels[i].ShowUID, m.ARTSHOW_PASS) + updateArtShowErr := dao.UpdateArtShow(tx, show) + if updateArtShowErr != nil { + tx.Rollback() + return updateArtShowErr + } + } + } } err = tx.Commit().Error return } -func QueryShowRel_showId(showID int64) (err error, out *model.ShowRel) { +// 查询画展包申请关联记录 +func QueryShowRel_showUID(showUID string) (err error, out *model.ShowRel) { out = new(model.ShowRel) - err, out = dao.QueryShowRel_showId(showID) + err, out = dao.QueryShowRel_showUID(showUID) if err != nil { return err, nil } diff --git a/cmd/service/show_price.go b/cmd/service/show_price.go index a26e3aa..65b5879 100644 --- a/cmd/service/show_price.go +++ b/cmd/service/show_price.go @@ -7,7 +7,7 @@ import ( ) func ArtworkPriceInfo(in *artShow.ArtworkPriceReq) (err error, artworkPriceRes *artShow.ArtworkPriceRes) { - err, artworkPrice := dao.QueryArtworkPrice_artworkID(in.ArtworkID) + err, artworkPrice := dao.QueryArtworkPrice_artworkUID(in.ArtworkUID) if err != nil { return } diff --git a/conf/conf.ini b/conf/conf.ini index 4383fec..0fc6455 100644 --- a/conf/conf.ini +++ b/conf/conf.ini @@ -3,13 +3,13 @@ mode = dev #正式prod #测试dev ;本地测试 -;[mysql] -;Db = mysql -;DbHost = 127.0.0.1 -;DbPort = 3306 -;DbUser = root -;DbPassWord = 123456 -;DbName = art_show +[mysql] +Db = mysql +DbHost = 127.0.0.1 +DbPort = 3306 +DbUser = root +DbPassWord = 123456 +DbName = art_show ;正式服 ;[mysql] @@ -30,13 +30,13 @@ mode = dev #正式prod #测试dev ;DbName = art_show ;214 -[mysql] -Db = mysql -DbHost = 172.16.100.99 #214 -DbPort = 9007 -DbUser = artuser -DbPassWord = "C250PflXIWv2SQm8" -DbName = art_show +;[mysql] +;Db = mysql +;DbHost = 172.16.100.99 #214 +;DbPort = 9007 +;DbUser = artuser +;DbPassWord = "C250PflXIWv2SQm8" +;DbName = art_show ;[mysql] ;Db = mysql diff --git a/conf/dubbogo.yaml b/conf/dubbogo.yaml index 378db6c..1cd70be 100644 --- a/conf/dubbogo.yaml +++ b/conf/dubbogo.yaml @@ -3,8 +3,8 @@ dubbo: demoZK: protocol: zookeeper timeout: 3s -# address: zookeeper:2181 - address: 127.0.0.1:2181 +# address: zookeeper:2181 # 正式服务 + address: 127.0.0.1:2181 # 测试服务 protocols: triple: #triple name: tri diff --git a/go.mod b/go.mod index 600287c..feba760 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ replace github.com/fonchain_enterprise/utils/aes => ../utils/aes require ( dubbo.apache.org/dubbo-go/v3 v3.0.2 + github.com/360EntSecGroup-Skylar/excelize v1.4.1 github.com/dubbogo/grpc-go v1.42.10 github.com/dubbogo/triple v1.1.8 github.com/fonchain_enterprise/utils/aes v0.0.0-00010101000000-000000000000 @@ -96,6 +97,7 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/nacos-group/nacos-sdk-go v1.1.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect diff --git a/go.sum b/go.sum index c6cb223..a1f6290 100644 --- a/go.sum +++ b/go.sum @@ -37,6 +37,8 @@ contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dubbo.apache.org/dubbo-go/v3 v3.0.2 h1:+WuMFN6RSjXHT41QS1Xi5tFfaPuczIVoeQuKq7pISYI= dubbo.apache.org/dubbo-go/v3 v3.0.2/go.mod h1:bODgByAf72kzG/5YIfZIODXx81pY3gaAdIQ8B4mN/Yk= +github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks= +github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -567,6 +569,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= @@ -740,6 +744,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= diff --git a/pb/artShow/artshow.pb.go b/pb/artShow/artshow.pb.go index 2cf4780..2d8d8b9 100644 --- a/pb/artShow/artshow.pb.go +++ b/pb/artShow/artshow.pb.go @@ -28,16 +28,16 @@ type SaveShowReq struct { ShowName string `protobuf:"bytes,1,opt,name=ShowName,json=show_name,proto3" json:"ShowName,omitempty"` ArtistName string `protobuf:"bytes,2,opt,name=ArtistName,json=artist_name,proto3" json:"ArtistName,omitempty"` - ArtistID string `protobuf:"bytes,3,opt,name=ArtistID,json=artist_id,proto3" json:"ArtistID,omitempty"` + ArtistUID string `protobuf:"bytes,3,opt,name=ArtistUID,json=artist_uid,proto3" json:"ArtistUID,omitempty"` ArtworkNum int32 `protobuf:"varint,4,opt,name=ArtworkNum,json=artwork_num,proto3" json:"ArtworkNum,omitempty"` Ruler int32 `protobuf:"varint,5,opt,name=Ruler,json=ruler,proto3" json:"Ruler,omitempty"` Price int64 `protobuf:"varint,6,opt,name=Price,json=price,proto3" json:"Price,omitempty"` Reward int64 `protobuf:"varint,7,opt,name=Reward,json=reward,proto3" json:"Reward,omitempty"` IsShow int32 `protobuf:"varint,8,opt,name=IsShow,json=is_show,proto3" json:"IsShow,omitempty"` ShowTime string `protobuf:"bytes,9,opt,name=ShowTime,json=show_time,proto3" json:"ShowTime,omitempty"` - ShowArtwork []*ShowArtworkDetail `protobuf:"bytes,10,rep,name=ShowArtwork,json=show_artwork,proto3" json:"ShowArtwork,omitempty"` - DelShowArtwork []*DelArtworkDetail `protobuf:"bytes,11,rep,name=DelShowArtwork,json=del_show_artwork,proto3" json:"DelShowArtwork,omitempty"` - ID int64 `protobuf:"varint,12,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + ShowUID string `protobuf:"bytes,10,opt,name=ShowUID,json=id,proto3" json:"ShowUID,omitempty"` + ShowArtwork []*ShowArtworkDetail `protobuf:"bytes,11,rep,name=ShowArtwork,json=show_artwork,proto3" json:"ShowArtwork,omitempty"` + DelShowArtwork []*DelArtworkDetail `protobuf:"bytes,12,rep,name=DelShowArtwork,json=del_show_artwork,proto3" json:"DelShowArtwork,omitempty"` } func (x *SaveShowReq) Reset() { @@ -86,9 +86,9 @@ func (x *SaveShowReq) GetArtistName() string { return "" } -func (x *SaveShowReq) GetArtistID() string { +func (x *SaveShowReq) GetArtistUID() string { if x != nil { - return x.ArtistID + return x.ArtistUID } return "" } @@ -135,6 +135,13 @@ func (x *SaveShowReq) GetShowTime() string { return "" } +func (x *SaveShowReq) GetShowUID() string { + if x != nil { + return x.ShowUID + } + return "" +} + func (x *SaveShowReq) GetShowArtwork() []*ShowArtworkDetail { if x != nil { return x.ShowArtwork @@ -149,20 +156,13 @@ func (x *SaveShowReq) GetDelShowArtwork() []*DelArtworkDetail { return nil } -func (x *SaveShowReq) GetID() int64 { - if x != nil { - return x.ID - } - return 0 -} - type SaveShowRes struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Msg string `protobuf:"bytes,1,opt,name=Msg,json=msg,proto3" json:"Msg,omitempty"` - ShowID int64 `protobuf:"varint,2,opt,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` + Msg string `protobuf:"bytes,1,opt,name=Msg,json=msg,proto3" json:"Msg,omitempty"` + ShowUID string `protobuf:"bytes,2,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` } func (x *SaveShowRes) Reset() { @@ -204,11 +204,11 @@ func (x *SaveShowRes) GetMsg() string { return "" } -func (x *SaveShowRes) GetShowID() int64 { +func (x *SaveShowRes) GetShowUID() string { if x != nil { - return x.ShowID + return x.ShowUID } - return 0 + return "" } type CommonRes struct { @@ -264,7 +264,7 @@ type ShowDetailReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ShowID int64 `protobuf:"varint,1,opt,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` + ShowUID string `protobuf:"bytes,1,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` } func (x *ShowDetailReq) Reset() { @@ -299,11 +299,11 @@ func (*ShowDetailReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{3} } -func (x *ShowDetailReq) GetShowID() int64 { +func (x *ShowDetailReq) GetShowUID() string { if x != nil { - return x.ShowID + return x.ShowUID } - return 0 + return "" } type ShowDetail struct { @@ -311,11 +311,11 @@ type ShowDetail struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + ShowUID string `protobuf:"bytes,1,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` ShowSeq string `protobuf:"bytes,2,opt,name=ShowSeq,json=show_seq,proto3" json:"ShowSeq,omitempty"` ShowName string `protobuf:"bytes,3,opt,name=ShowName,json=show_name,proto3" json:"ShowName,omitempty"` ArtistName string `protobuf:"bytes,4,opt,name=ArtistName,json=artist_name,proto3" json:"ArtistName,omitempty"` - ArtistID string `protobuf:"bytes,5,opt,name=ArtistID,json=artist_id,proto3" json:"ArtistID,omitempty"` + ArtistUID string `protobuf:"bytes,5,opt,name=ArtistUID,json=artist_uid,proto3" json:"ArtistUID,omitempty"` ArtworkNum int32 `protobuf:"varint,6,opt,name=ArtworkNum,json=artwork_num,proto3" json:"ArtworkNum,omitempty"` Ruler int32 `protobuf:"varint,7,opt,name=Ruler,json=ruler,proto3" json:"Ruler,omitempty"` Price int64 `protobuf:"varint,8,opt,name=Price,json=price,proto3" json:"Price,omitempty"` @@ -356,11 +356,11 @@ func (*ShowDetail) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{4} } -func (x *ShowDetail) GetID() int64 { +func (x *ShowDetail) GetShowUID() string { if x != nil { - return x.ID + return x.ShowUID } - return 0 + return "" } func (x *ShowDetail) GetShowSeq() string { @@ -384,9 +384,9 @@ func (x *ShowDetail) GetArtistName() string { return "" } -func (x *ShowDetail) GetArtistID() string { +func (x *ShowDetail) GetArtistUID() string { if x != nil { - return x.ArtistID + return x.ArtistUID } return "" } @@ -553,7 +553,7 @@ type ShowListReq struct { PageSize int32 `protobuf:"varint,2,opt,name=PageSize,json=page_size,proto3" json:"PageSize,omitempty"` StartTime string `protobuf:"bytes,3,opt,name=StartTime,json=start_time,proto3" json:"StartTime,omitempty"` EndTime string `protobuf:"bytes,4,opt,name=EndTime,json=end_time,proto3" json:"EndTime,omitempty"` - ArtistID string `protobuf:"bytes,5,opt,name=ArtistID,json=artist_id,proto3" json:"ArtistID,omitempty"` + ArtistUID string `protobuf:"bytes,5,opt,name=ArtistUID,json=artist_uid,proto3" json:"ArtistUID,omitempty"` IsShow int32 `protobuf:"varint,6,opt,name=IsShow,json=is_show,proto3" json:"IsShow,omitempty"` } @@ -617,9 +617,9 @@ func (x *ShowListReq) GetEndTime() string { return "" } -func (x *ShowListReq) GetArtistID() string { +func (x *ShowListReq) GetArtistUID() string { if x != nil { - return x.ArtistID + return x.ArtistUID } return "" } @@ -716,7 +716,7 @@ type DelShowReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ShowID []int64 `protobuf:"varint,1,rep,packed,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` + ShowUID []string `protobuf:"bytes,1,rep,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` } func (x *DelShowReq) Reset() { @@ -751,9 +751,9 @@ func (*DelShowReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{9} } -func (x *DelShowReq) GetShowID() []int64 { +func (x *DelShowReq) GetShowUID() []string { if x != nil { - return x.ShowID + return x.ShowUID } return nil } @@ -764,15 +764,15 @@ type ShowArtworkDetail struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` - ShowID int64 `protobuf:"varint,2,opt,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` - ArtworkID int64 `protobuf:"varint,3,opt,name=ArtworkID,json=artwork_id,proto3" json:"ArtworkID,omitempty"` - ArtworkName string `protobuf:"bytes,4,opt,name=ArtworkName,json=artwork_name,proto3" json:"ArtworkName,omitempty"` - ArtistName string `protobuf:"bytes,5,opt,name=ArtistName,json=artist_name,proto3" json:"ArtistName,omitempty"` - Length int32 `protobuf:"varint,6,opt,name=Length,json=length,proto3" json:"Length,omitempty"` - Width int32 `protobuf:"varint,7,opt,name=Width,json=width,proto3" json:"Width,omitempty"` - Ruler int32 `protobuf:"varint,8,opt,name=Ruler,json=ruler,proto3" json:"Ruler,omitempty"` - SmallPic string `protobuf:"bytes,9,opt,name=SmallPic,json=small_pic,proto3" json:"SmallPic,omitempty"` + ArtworkPriceUID string `protobuf:"bytes,1,opt,name=ArtworkPriceUID,json=artwork_price_uid,proto3" json:"ArtworkPriceUID,omitempty"` + ShowUID string `protobuf:"bytes,2,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` + ArtworkUID string `protobuf:"bytes,3,opt,name=ArtworkUID,json=artwork_uid,proto3" json:"ArtworkUID,omitempty"` + ArtworkName string `protobuf:"bytes,4,opt,name=ArtworkName,json=artwork_name,proto3" json:"ArtworkName,omitempty"` + ArtistName string `protobuf:"bytes,5,opt,name=ArtistName,json=artist_name,proto3" json:"ArtistName,omitempty"` + Length int32 `protobuf:"varint,6,opt,name=Length,json=length,proto3" json:"Length,omitempty"` + Width int32 `protobuf:"varint,7,opt,name=Width,json=width,proto3" json:"Width,omitempty"` + Ruler int32 `protobuf:"varint,8,opt,name=Ruler,json=ruler,proto3" json:"Ruler,omitempty"` + SmallPic string `protobuf:"bytes,9,opt,name=SmallPic,json=small_pic,proto3" json:"SmallPic,omitempty"` } func (x *ShowArtworkDetail) Reset() { @@ -807,25 +807,25 @@ func (*ShowArtworkDetail) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{10} } -func (x *ShowArtworkDetail) GetID() int64 { +func (x *ShowArtworkDetail) GetArtworkPriceUID() string { if x != nil { - return x.ID + return x.ArtworkPriceUID } - return 0 + return "" } -func (x *ShowArtworkDetail) GetShowID() int64 { +func (x *ShowArtworkDetail) GetShowUID() string { if x != nil { - return x.ShowID + return x.ShowUID } - return 0 + return "" } -func (x *ShowArtworkDetail) GetArtworkID() int64 { +func (x *ShowArtworkDetail) GetArtworkUID() string { if x != nil { - return x.ArtworkID + return x.ArtworkUID } - return 0 + return "" } func (x *ShowArtworkDetail) GetArtworkName() string { @@ -876,8 +876,8 @@ type DelArtworkDetail struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` - ArtworkID int64 `protobuf:"varint,2,opt,name=ArtworkID,json=artwork_id,proto3" json:"ArtworkID,omitempty"` + ArtworkPriceUID string `protobuf:"bytes,1,opt,name=ArtworkPriceUID,json=artwork_price_uid,proto3" json:"ArtworkPriceUID,omitempty"` + ArtworkUID string `protobuf:"bytes,2,opt,name=ArtworkUID,json=artwork_uid,proto3" json:"ArtworkUID,omitempty"` } func (x *DelArtworkDetail) Reset() { @@ -912,18 +912,18 @@ func (*DelArtworkDetail) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{11} } -func (x *DelArtworkDetail) GetID() int64 { +func (x *DelArtworkDetail) GetArtworkPriceUID() string { if x != nil { - return x.ID + return x.ArtworkPriceUID } - return 0 + return "" } -func (x *DelArtworkDetail) GetArtworkID() int64 { +func (x *DelArtworkDetail) GetArtworkUID() string { if x != nil { - return x.ArtworkID + return x.ArtworkUID } - return 0 + return "" } // 画展包 画家 画作 统计数据 @@ -1034,7 +1034,7 @@ type ArtworkPriceReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ArtworkID int64 `protobuf:"varint,1,opt,name=ArtworkID,json=artwork_id,proto3" json:"ArtworkID,omitempty"` + ArtworkUID string `protobuf:"bytes,1,opt,name=ArtworkUID,json=artwork_uid,proto3" json:"ArtworkUID,omitempty"` } func (x *ArtworkPriceReq) Reset() { @@ -1069,11 +1069,11 @@ func (*ArtworkPriceReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{14} } -func (x *ArtworkPriceReq) GetArtworkID() int64 { +func (x *ArtworkPriceReq) GetArtworkUID() string { if x != nil { - return x.ArtworkID + return x.ArtworkUID } - return 0 + return "" } type ArtworkPriceRes struct { @@ -1136,11 +1136,11 @@ type ShowRel struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` - ApplyID int64 `protobuf:"varint,2,opt,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` - ShowID int64 `protobuf:"varint,3,opt,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` - Index int32 `protobuf:"varint,4,opt,name=Index,json=index,proto3" json:"Index,omitempty"` - Address string `protobuf:"bytes,5,opt,name=Address,json=address,proto3" json:"Address,omitempty"` + ShowRelUID string `protobuf:"bytes,1,opt,name=ShowRelUID,json=show_rel_uid,proto3" json:"ShowRelUID,omitempty"` + ApplyUID string `protobuf:"bytes,2,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` + ShowUID string `protobuf:"bytes,3,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` + Index int32 `protobuf:"varint,4,opt,name=Index,json=index,proto3" json:"Index,omitempty"` + Address string `protobuf:"bytes,5,opt,name=Address,json=address,proto3" json:"Address,omitempty"` } func (x *ShowRel) Reset() { @@ -1175,25 +1175,25 @@ func (*ShowRel) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{16} } -func (x *ShowRel) GetID() int64 { +func (x *ShowRel) GetShowRelUID() string { if x != nil { - return x.ID + return x.ShowRelUID } - return 0 + return "" } -func (x *ShowRel) GetApplyID() int64 { +func (x *ShowRel) GetApplyUID() string { if x != nil { - return x.ApplyID + return x.ApplyUID } - return 0 + return "" } -func (x *ShowRel) GetShowID() int64 { +func (x *ShowRel) GetShowUID() string { if x != nil { - return x.ShowID + return x.ShowUID } - return 0 + return "" } func (x *ShowRel) GetIndex() int32 { @@ -1215,8 +1215,8 @@ type DelShowRel struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` - ShowID int64 `protobuf:"varint,2,opt,name=ShowID,json=show_id,proto3" json:"ShowID,omitempty"` + ShowRelUID string `protobuf:"bytes,1,opt,name=ShowRelUID,json=show_rel_uid,proto3" json:"ShowRelUID,omitempty"` + ShowUID string `protobuf:"bytes,2,opt,name=ShowUID,json=show_uid,proto3" json:"ShowUID,omitempty"` } func (x *DelShowRel) Reset() { @@ -1251,18 +1251,18 @@ func (*DelShowRel) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{17} } -func (x *DelShowRel) GetID() int64 { +func (x *DelShowRel) GetShowRelUID() string { if x != nil { - return x.ID + return x.ShowRelUID } - return 0 + return "" } -func (x *DelShowRel) GetShowID() int64 { +func (x *DelShowRel) GetShowUID() string { if x != nil { - return x.ShowID + return x.ShowUID } - return 0 + return "" } type SaveApplyReq struct { @@ -1271,10 +1271,10 @@ type SaveApplyReq struct { unknownFields protoimpl.UnknownFields Applicant string `protobuf:"bytes,1,opt,name=Applicant,json=applicant,proto3" json:"Applicant,omitempty"` - ApplicantID int64 `protobuf:"varint,2,opt,name=ApplicantID,json=applicant_id,proto3" json:"ApplicantID,omitempty"` + ApplicantID string `protobuf:"bytes,2,opt,name=ApplicantID,json=applicant_id,proto3" json:"ApplicantID,omitempty"` Num int32 `protobuf:"varint,3,opt,name=Num,json=num,proto3" json:"Num,omitempty"` ApplyTime string `protobuf:"bytes,4,opt,name=ApplyTime,json=apply_time,proto3" json:"ApplyTime,omitempty"` - ID int64 `protobuf:"varint,5,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + ApplyUID string `protobuf:"bytes,5,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` Status int32 `protobuf:"varint,6,opt,name=Status,json=status,proto3" json:"Status,omitempty"` Remark string `protobuf:"bytes,7,opt,name=Remark,json=remark,proto3" json:"Remark,omitempty"` Rel []*ShowRel `protobuf:"bytes,8,rep,name=Rel,json=rel,proto3" json:"Rel,omitempty"` @@ -1320,11 +1320,11 @@ func (x *SaveApplyReq) GetApplicant() string { return "" } -func (x *SaveApplyReq) GetApplicantID() int64 { +func (x *SaveApplyReq) GetApplicantID() string { if x != nil { return x.ApplicantID } - return 0 + return "" } func (x *SaveApplyReq) GetNum() int32 { @@ -1341,11 +1341,11 @@ func (x *SaveApplyReq) GetApplyTime() string { return "" } -func (x *SaveApplyReq) GetID() int64 { +func (x *SaveApplyReq) GetApplyUID() string { if x != nil { - return x.ID + return x.ApplyUID } - return 0 + return "" } func (x *SaveApplyReq) GetStatus() int32 { @@ -1381,8 +1381,8 @@ type SaveApplyRes struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Msg string `protobuf:"bytes,1,opt,name=Msg,json=msg,proto3" json:"Msg,omitempty"` - ApplyID int64 `protobuf:"varint,2,opt,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` + Msg string `protobuf:"bytes,1,opt,name=Msg,json=msg,proto3" json:"Msg,omitempty"` + ApplyUID string `protobuf:"bytes,2,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` } func (x *SaveApplyRes) Reset() { @@ -1424,11 +1424,11 @@ func (x *SaveApplyRes) GetMsg() string { return "" } -func (x *SaveApplyRes) GetApplyID() int64 { +func (x *SaveApplyRes) GetApplyUID() string { if x != nil { - return x.ApplyID + return x.ApplyUID } - return 0 + return "" } type ApplyListReq struct { @@ -1562,7 +1562,7 @@ type ApplyShowReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ApplyID int64 `protobuf:"varint,1,opt,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` + ApplyUID string `protobuf:"bytes,1,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` } func (x *ApplyShowReq) Reset() { @@ -1597,11 +1597,11 @@ func (*ApplyShowReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{22} } -func (x *ApplyShowReq) GetApplyID() int64 { +func (x *ApplyShowReq) GetApplyUID() string { if x != nil { - return x.ApplyID + return x.ApplyUID } - return 0 + return "" } type ApplyShowRes struct { @@ -1672,10 +1672,10 @@ type ApplyDetail struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + ApplyUID string `protobuf:"bytes,1,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` ApplySeq string `protobuf:"bytes,2,opt,name=ApplySeq,json=apply_seq,proto3" json:"ApplySeq,omitempty"` Applicant string `protobuf:"bytes,3,opt,name=Applicant,json=applicant,proto3" json:"Applicant,omitempty"` - ApplicantID int64 `protobuf:"varint,4,opt,name=ApplicantID,json=applicant_id,proto3" json:"ApplicantID,omitempty"` + ApplicantID string `protobuf:"bytes,4,opt,name=ApplicantID,json=applicant_id,proto3" json:"ApplicantID,omitempty"` Num int32 `protobuf:"varint,5,opt,name=Num,json=num,proto3" json:"Num,omitempty"` ApplyTime string `protobuf:"bytes,6,opt,name=ApplyTime,json=apply_time,proto3" json:"ApplyTime,omitempty"` Status int32 `protobuf:"varint,7,opt,name=Status,json=status,proto3" json:"Status,omitempty"` @@ -1714,11 +1714,11 @@ func (*ApplyDetail) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{24} } -func (x *ApplyDetail) GetID() int64 { +func (x *ApplyDetail) GetApplyUID() string { if x != nil { - return x.ID + return x.ApplyUID } - return 0 + return "" } func (x *ApplyDetail) GetApplySeq() string { @@ -1735,11 +1735,11 @@ func (x *ApplyDetail) GetApplicant() string { return "" } -func (x *ApplyDetail) GetApplicantID() int64 { +func (x *ApplyDetail) GetApplicantID() string { if x != nil { return x.ApplicantID } - return 0 + return "" } func (x *ApplyDetail) GetNum() int32 { @@ -1775,7 +1775,7 @@ type ShowRelListReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ApplyID int64 `protobuf:"varint,1,opt,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` + ApplyUID string `protobuf:"bytes,1,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` } func (x *ShowRelListReq) Reset() { @@ -1810,11 +1810,11 @@ func (*ShowRelListReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{25} } -func (x *ShowRelListReq) GetApplyID() int64 { +func (x *ShowRelListReq) GetApplyUID() string { if x != nil { - return x.ApplyID + return x.ApplyUID } - return 0 + return "" } type ShowRelListRes struct { @@ -1877,9 +1877,9 @@ type UpdateApplyStatusReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status int32 `protobuf:"varint,1,opt,name=Status,json=status,proto3" json:"Status,omitempty"` - Remark string `protobuf:"bytes,2,opt,name=Remark,json=remark,proto3" json:"Remark,omitempty"` - ApplyID int64 `protobuf:"varint,3,opt,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` + Status int32 `protobuf:"varint,1,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Remark string `protobuf:"bytes,2,opt,name=Remark,json=remark,proto3" json:"Remark,omitempty"` + ApplyUID string `protobuf:"bytes,3,opt,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` } func (x *UpdateApplyStatusReq) Reset() { @@ -1928,11 +1928,11 @@ func (x *UpdateApplyStatusReq) GetRemark() string { return "" } -func (x *UpdateApplyStatusReq) GetApplyID() int64 { +func (x *UpdateApplyStatusReq) GetApplyUID() string { if x != nil { - return x.ApplyID + return x.ApplyUID } - return 0 + return "" } type DelApplyReq struct { @@ -1940,7 +1940,7 @@ type DelApplyReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ApplyID []int64 `protobuf:"varint,1,rep,packed,name=ApplyID,json=apply_id,proto3" json:"ApplyID,omitempty"` + ApplyUID []string `protobuf:"bytes,1,rep,name=ApplyUID,json=apply_uid,proto3" json:"ApplyUID,omitempty"` } func (x *DelApplyReq) Reset() { @@ -1975,9 +1975,9 @@ func (*DelApplyReq) Descriptor() ([]byte, []int) { return file_pb_artshow_proto_rawDescGZIP(), []int{28} } -func (x *DelApplyReq) GetApplyID() []int64 { +func (x *DelApplyReq) GetApplyUID() []string { if x != nil { - return x.ApplyID + return x.ApplyUID } return nil } @@ -2144,304 +2144,315 @@ var File_pb_artshow_proto protoreflect.FileDescriptor var file_pb_artshow_proto_rawDesc = []byte{ 0x0a, 0x10, 0x70, 0x62, 0x2f, 0x61, 0x72, 0x74, 0x73, 0x68, 0x6f, 0x77, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x07, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x97, 0x03, 0x0a, 0x0b, + 0x74, 0x6f, 0x12, 0x07, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x22, 0x9e, 0x03, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, - 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x73, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x49, - 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x73, 0x5f, - 0x73, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, - 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x12, 0x43, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, - 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x61, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, - 0x77, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x44, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x22, - 0x1d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x28, - 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, - 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x22, 0xad, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x6f, - 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, 0x53, - 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x73, - 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x1f, 0x0a, - 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x14, - 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x17, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x22, 0x4a, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, - 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x41, 0x72, 0x74, - 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, - 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xae, - 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, - 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, - 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, - 0x1d, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x19, - 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x73, 0x74, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x72, 0x74, - 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x22, - 0xb4, 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2a, 0x0a, 0x0f, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x75, - 0x6d, 0x12, 0x28, 0x0a, 0x0e, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, - 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x25, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, - 0x77, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x22, 0x80, 0x02, - 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x09, - 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0b, 0x41, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x57, 0x69, 0x64, 0x74, 0x68, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x14, 0x0a, - 0x05, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, - 0x6c, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x50, 0x69, 0x63, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x69, 0x63, - 0x22, 0x41, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x5f, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x16, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, - 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, - 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x16, 0x53, 0x68, 0x6f, 0x77, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x12, 0x37, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x2e, 0x4e, 0x75, 0x6d, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x1a, 0xa6, 0x01, 0x0a, - 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, - 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0a, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 0x75, - 0x6d, 0x12, 0x20, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, - 0x6e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x48, 0x69, 0x73, 0x4e, 0x75, - 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x68, 0x69, - 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x22, 0x30, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x72, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x22, 0x91, 0x02, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x04, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x1a, 0xb3, 0x01, 0x0a, 0x09, 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x52, 0x75, 0x6c, - 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, - 0x75, 0x6c, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x41, 0x72, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0d, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, - 0x21, 0x0a, 0x0b, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, 0x7d, 0x0a, 0x07, 0x53, - 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x69, - 0x64, 0x12, 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x35, 0x0a, 0x0a, 0x44, 0x65, - 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x77, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x69, - 0x64, 0x22, 0x92, 0x02, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, + 0x69, 0x73, 0x74, 0x55, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, + 0x74, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x75, 0x6c, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x12, + 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x17, 0x0a, + 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, + 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x13, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, + 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, + 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x43, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x53, 0x68, + 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x5f, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x3a, 0x0a, 0x0b, + 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, + 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x19, 0x0a, + 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x2a, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x5f, + 0x75, 0x69, 0x64, 0x22, 0xba, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x19, 0x0a, + 0x07, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x77, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x69, 0x73, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, + 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, + 0x74, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x08, 0x53, 0x68, + 0x6f, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, + 0x6f, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, + 0x77, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, + 0x22, 0x4a, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x73, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x58, 0x0a, 0x14, + 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, + 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xb0, 0x01, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x50, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x69, 0x64, + 0x12, 0x17, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x22, 0xb4, 0x01, 0x0a, 0x0b, 0x53, 0x68, + 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x2a, 0x0a, 0x0f, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, + 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x0e, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x73, + 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, + 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, + 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x22, 0x27, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x12, 0x19, + 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x22, 0xa0, 0x02, 0x0a, 0x11, 0x53, 0x68, + 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, + 0x2a, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x55, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x07, 0x53, + 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, + 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x55, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0b, 0x41, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, + 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x75, 0x6c, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x72, 0x12, + 0x1b, 0x0a, 0x08, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x50, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x69, 0x63, 0x22, 0x5f, 0x0a, 0x10, + 0x44, 0x65, 0x6c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x12, 0x2a, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x72, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0a, + 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x75, 0x69, 0x64, 0x22, 0x31, 0x0a, + 0x16, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x17, 0x0a, 0x06, 0x49, 0x73, 0x53, 0x68, 0x6f, + 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x68, 0x6f, 0x77, + 0x22, 0x8c, 0x02, 0x0a, 0x16, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x41, 0x72, 0x74, 0x53, + 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x2e, 0x4e, 0x75, 0x6d, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x1a, 0xa6, 0x01, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x1d, + 0x0a, 0x09, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, + 0x0a, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x1b, + 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0a, 0x4e, + 0x6f, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x6e, 0x6f, 0x74, 0x5f, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6e, 0x75, 0x6d, 0x12, 0x20, 0x0a, + 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x48, 0x69, 0x73, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x68, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x22, + 0x32, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x1f, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, + 0x75, 0x69, 0x64, 0x22, 0x91, 0x02, 0x0a, 0x0f, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x2e, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x1a, 0xb3, 0x01, 0x0a, 0x09, 0x50, 0x72, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x52, 0x75, 0x6c, 0x65, 0x72, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x75, 0x6c, 0x65, 0x72, + 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x4d, + 0x61, 0x72, 0x6b, 0x65, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x27, + 0x0a, 0x0e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, + 0x52, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x55, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x72, 0x65, + 0x6c, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, + 0x69, 0x64, 0x12, 0x19, 0x0a, 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x49, 0x0a, + 0x0a, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0a, 0x53, + 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x6c, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x19, 0x0a, + 0x07, 0x53, 0x68, 0x6f, 0x77, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x75, 0x69, 0x64, 0x22, 0x9f, 0x02, 0x0a, 0x0c, 0x53, 0x61, 0x76, + 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x09, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x03, 0x52, 0x65, 0x6c, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x52, 0x03, 0x72, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x52, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, + 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, + 0x6c, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x22, 0x3d, 0x0a, 0x0c, 0x53, 0x61, + 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1b, 0x0a, 0x08, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x0c, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, + 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x60, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x22, 0x2b, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, + 0x77, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, 0x69, + 0x64, 0x22, 0x75, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, + 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, + 0x04, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, + 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xe9, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, + 0x79, 0x5f, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x65, + 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x22, 0x0a, 0x03, 0x52, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, - 0x52, 0x65, 0x6c, 0x52, 0x03, 0x72, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x52, - 0x65, 0x6c, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, - 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x52, 0x07, 0x64, - 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x6c, 0x22, 0x3b, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x19, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, - 0x5f, 0x69, 0x64, 0x22, 0x57, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, - 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x60, 0x0a, 0x0c, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, - 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x29, - 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x12, 0x19, - 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x75, 0x0a, 0x0c, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, - 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, - 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x10, - 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x22, 0xdc, 0x01, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x65, 0x71, 0x12, 0x1c, 0x0a, - 0x09, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0b, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6e, 0x75, 0x6d, - 0x12, 0x1d, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, - 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, - 0x2b, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x12, 0x19, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x0e, - 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x24, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x19, - 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x0b, 0x44, 0x65, 0x6c, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x12, 0x19, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, - 0x5f, 0x69, 0x64, 0x32, 0xdd, 0x07, 0x0a, 0x07, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, - 0x3a, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x14, 0x2e, - 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, - 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, - 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, - 0x6f, 0x77, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x07, 0x44, 0x65, 0x6c, 0x53, 0x68, - 0x6f, 0x77, 0x12, 0x13, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, - 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, - 0x77, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x38, 0x0a, - 0x08, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x77, 0x41, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x41, 0x72, 0x74, - 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, - 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x73, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x12, 0x16, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x73, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x41, 0x72, 0x74, - 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x41, 0x72, - 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x44, - 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x18, - 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, - 0x6f, 0x77, 0x2e, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x12, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, - 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, - 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, - 0x73, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x12, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, - 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, - 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, - 0x22, 0x00, 0x12, 0x36, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x14, - 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x11, 0x53, 0x68, - 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, - 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, - 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x48, 0x0a, - 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1d, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x12, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, - 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x12, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, - 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, - 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, - 0x73, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x2e, 0x2f, 0x61, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, - 0x3b, 0x61, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x2d, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, + 0x75, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, + 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, + 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, + 0x69, 0x64, 0x22, 0x2a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, + 0x71, 0x12, 0x1b, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x75, 0x69, 0x64, 0x32, 0xdd, + 0x07, 0x0a, 0x07, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x3a, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, + 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x14, + 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, + 0x77, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x68, 0x6f, 0x77, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, + 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x41, 0x72, 0x74, + 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, + 0x22, 0x00, 0x12, 0x34, 0x0a, 0x07, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x13, 0x2e, + 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x53, 0x68, 0x6f, 0x77, 0x52, + 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x77, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, + 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x41, 0x72, 0x74, + 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, + 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x41, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x3e, + 0x0a, 0x0a, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x2e, 0x41, + 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, + 0x68, 0x6f, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x59, + 0x0a, 0x13, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, + 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x41, 0x72, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x41, 0x72, 0x74, 0x53, + 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x72, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, + 0x3d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x15, + 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x3d, + 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x15, 0x2e, + 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, + 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, + 0x08, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, + 0x68, 0x6f, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x1a, + 0x12, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x11, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x69, 0x74, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x2e, 0x41, 0x72, 0x74, + 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x14, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x2e, + 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x41, + 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x22, 0x00, 0x12, + 0x3d, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x15, + 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, + 0x6f, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x41, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x2e, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x22, 0x00, 0x42, 0x13, + 0x5a, 0x11, 0x2e, 0x2f, 0x61, 0x72, 0x74, 0x53, 0x68, 0x6f, 0x77, 0x3b, 0x61, 0x72, 0x74, 0x53, + 0x68, 0x6f, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pb/artShow/artshow.pb.validate.go b/pb/artShow/artshow.pb.validate.go new file mode 100644 index 0000000..882fc7a --- /dev/null +++ b/pb/artShow/artshow.pb.validate.go @@ -0,0 +1,3750 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: pb/artshow.proto + +package artShow + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on SaveShowReq 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 *SaveShowReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SaveShowReq 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 SaveShowReqMultiError, or +// nil if none found. +func (m *SaveShowReq) ValidateAll() error { + return m.validate(true) +} + +func (m *SaveShowReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ShowName + + // no validation rules for ArtistName + + // no validation rules for ArtistUID + + // no validation rules for ArtworkNum + + // no validation rules for Ruler + + // no validation rules for Price + + // no validation rules for Reward + + // no validation rules for IsShow + + // no validation rules for ShowTime + + // no validation rules for ShowUID + + for idx, item := range m.GetShowArtwork() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SaveShowReqValidationError{ + field: fmt.Sprintf("ShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SaveShowReqValidationError{ + field: fmt.Sprintf("ShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SaveShowReqValidationError{ + field: fmt.Sprintf("ShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetDelShowArtwork() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SaveShowReqValidationError{ + field: fmt.Sprintf("DelShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SaveShowReqValidationError{ + field: fmt.Sprintf("DelShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SaveShowReqValidationError{ + field: fmt.Sprintf("DelShowArtwork[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return SaveShowReqMultiError(errors) + } + + return nil +} + +// SaveShowReqMultiError is an error wrapping multiple validation errors +// returned by SaveShowReq.ValidateAll() if the designated constraints aren't met. +type SaveShowReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SaveShowReqMultiError) 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 SaveShowReqMultiError) AllErrors() []error { return m } + +// SaveShowReqValidationError is the validation error returned by +// SaveShowReq.Validate if the designated constraints aren't met. +type SaveShowReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SaveShowReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SaveShowReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SaveShowReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SaveShowReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SaveShowReqValidationError) ErrorName() string { return "SaveShowReqValidationError" } + +// Error satisfies the builtin error interface +func (e SaveShowReqValidationError) 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 %sSaveShowReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SaveShowReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SaveShowReqValidationError{} + +// Validate checks the field values on SaveShowRes 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 *SaveShowRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SaveShowRes 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 SaveShowResMultiError, or +// nil if none found. +func (m *SaveShowRes) ValidateAll() error { + return m.validate(true) +} + +func (m *SaveShowRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Msg + + // no validation rules for ShowUID + + if len(errors) > 0 { + return SaveShowResMultiError(errors) + } + + return nil +} + +// SaveShowResMultiError is an error wrapping multiple validation errors +// returned by SaveShowRes.ValidateAll() if the designated constraints aren't met. +type SaveShowResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SaveShowResMultiError) 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 SaveShowResMultiError) AllErrors() []error { return m } + +// SaveShowResValidationError is the validation error returned by +// SaveShowRes.Validate if the designated constraints aren't met. +type SaveShowResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SaveShowResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SaveShowResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SaveShowResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SaveShowResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SaveShowResValidationError) ErrorName() string { return "SaveShowResValidationError" } + +// Error satisfies the builtin error interface +func (e SaveShowResValidationError) 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 %sSaveShowRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SaveShowResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SaveShowResValidationError{} + +// Validate checks the field values on CommonRes 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 *CommonRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonRes 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 CommonResMultiError, or nil +// if none found. +func (m *CommonRes) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Msg + + if len(errors) > 0 { + return CommonResMultiError(errors) + } + + return nil +} + +// CommonResMultiError is an error wrapping multiple validation errors returned +// by CommonRes.ValidateAll() if the designated constraints aren't met. +type CommonResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonResMultiError) 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 CommonResMultiError) AllErrors() []error { return m } + +// CommonResValidationError is the validation error returned by +// CommonRes.Validate if the designated constraints aren't met. +type CommonResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CommonResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CommonResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CommonResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CommonResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CommonResValidationError) ErrorName() string { return "CommonResValidationError" } + +// Error satisfies the builtin error interface +func (e CommonResValidationError) 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 %sCommonRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CommonResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CommonResValidationError{} + +// Validate checks the field values on ShowDetailReq 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 *ShowDetailReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowDetailReq 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 ShowDetailReqMultiError, or +// nil if none found. +func (m *ShowDetailReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowDetailReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ShowUID + + if len(errors) > 0 { + return ShowDetailReqMultiError(errors) + } + + return nil +} + +// ShowDetailReqMultiError is an error wrapping multiple validation errors +// returned by ShowDetailReq.ValidateAll() if the designated constraints +// aren't met. +type ShowDetailReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowDetailReqMultiError) 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 ShowDetailReqMultiError) AllErrors() []error { return m } + +// ShowDetailReqValidationError is the validation error returned by +// ShowDetailReq.Validate if the designated constraints aren't met. +type ShowDetailReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowDetailReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowDetailReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowDetailReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowDetailReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowDetailReqValidationError) ErrorName() string { return "ShowDetailReqValidationError" } + +// Error satisfies the builtin error interface +func (e ShowDetailReqValidationError) 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 %sShowDetailReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowDetailReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowDetailReqValidationError{} + +// Validate checks the field values on ShowDetail 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 *ShowDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowDetail 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 ShowDetailMultiError, or +// nil if none found. +func (m *ShowDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowDetail) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ShowUID + + // no validation rules for ShowSeq + + // no validation rules for ShowName + + // no validation rules for ArtistName + + // no validation rules for ArtistUID + + // no validation rules for ArtworkNum + + // no validation rules for Ruler + + // no validation rules for Price + + // no validation rules for Reward + + // no validation rules for ShowTime + + // no validation rules for IsShow + + if len(errors) > 0 { + return ShowDetailMultiError(errors) + } + + return nil +} + +// ShowDetailMultiError is an error wrapping multiple validation errors +// returned by ShowDetail.ValidateAll() if the designated constraints aren't met. +type ShowDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowDetailMultiError) 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 ShowDetailMultiError) AllErrors() []error { return m } + +// ShowDetailValidationError is the validation error returned by +// ShowDetail.Validate if the designated constraints aren't met. +type ShowDetailValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowDetailValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowDetailValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowDetailValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowDetailValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowDetailValidationError) ErrorName() string { return "ShowDetailValidationError" } + +// Error satisfies the builtin error interface +func (e ShowDetailValidationError) 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 %sShowDetail.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowDetailValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowDetailValidationError{} + +// Validate checks the field values on ShowDetailRes 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 *ShowDetailRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowDetailRes 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 ShowDetailResMultiError, or +// nil if none found. +func (m *ShowDetailRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowDetailRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShowDetailResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShowDetailResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShowDetailResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ShowDetailResMultiError(errors) + } + + return nil +} + +// ShowDetailResMultiError is an error wrapping multiple validation errors +// returned by ShowDetailRes.ValidateAll() if the designated constraints +// aren't met. +type ShowDetailResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowDetailResMultiError) 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 ShowDetailResMultiError) AllErrors() []error { return m } + +// ShowDetailResValidationError is the validation error returned by +// ShowDetailRes.Validate if the designated constraints aren't met. +type ShowDetailResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowDetailResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowDetailResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowDetailResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowDetailResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowDetailResValidationError) ErrorName() string { return "ShowDetailResValidationError" } + +// Error satisfies the builtin error interface +func (e ShowDetailResValidationError) 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 %sShowDetailRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowDetailResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowDetailResValidationError{} + +// Validate checks the field values on ShowArtworkDetailRes 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 *ShowArtworkDetailRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowArtworkDetailRes 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 +// ShowArtworkDetailResMultiError, or nil if none found. +func (m *ShowArtworkDetailRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowArtworkDetailRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShowArtworkDetailResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShowArtworkDetailResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShowArtworkDetailResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ShowArtworkDetailResMultiError(errors) + } + + return nil +} + +// ShowArtworkDetailResMultiError is an error wrapping multiple validation +// errors returned by ShowArtworkDetailRes.ValidateAll() if the designated +// constraints aren't met. +type ShowArtworkDetailResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowArtworkDetailResMultiError) 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 ShowArtworkDetailResMultiError) AllErrors() []error { return m } + +// ShowArtworkDetailResValidationError is the validation error returned by +// ShowArtworkDetailRes.Validate if the designated constraints aren't met. +type ShowArtworkDetailResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowArtworkDetailResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowArtworkDetailResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowArtworkDetailResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowArtworkDetailResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowArtworkDetailResValidationError) ErrorName() string { + return "ShowArtworkDetailResValidationError" +} + +// Error satisfies the builtin error interface +func (e ShowArtworkDetailResValidationError) 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 %sShowArtworkDetailRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowArtworkDetailResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowArtworkDetailResValidationError{} + +// Validate checks the field values on ShowListReq 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 *ShowListReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowListReq 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 ShowListReqMultiError, or +// nil if none found. +func (m *ShowListReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowListReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Page + + // no validation rules for PageSize + + // no validation rules for StartTime + + // no validation rules for EndTime + + // no validation rules for ArtistUID + + // no validation rules for IsShow + + if len(errors) > 0 { + return ShowListReqMultiError(errors) + } + + return nil +} + +// ShowListReqMultiError is an error wrapping multiple validation errors +// returned by ShowListReq.ValidateAll() if the designated constraints aren't met. +type ShowListReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowListReqMultiError) 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 ShowListReqMultiError) AllErrors() []error { return m } + +// ShowListReqValidationError is the validation error returned by +// ShowListReq.Validate if the designated constraints aren't met. +type ShowListReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowListReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowListReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowListReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowListReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowListReqValidationError) ErrorName() string { return "ShowListReqValidationError" } + +// Error satisfies the builtin error interface +func (e ShowListReqValidationError) 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 %sShowListReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowListReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowListReqValidationError{} + +// Validate checks the field values on ShowListRes 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 *ShowListRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowListRes 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 ShowListResMultiError, or +// nil if none found. +func (m *ShowListRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowListRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Total + + // no validation rules for TotalPackageNum + + // no validation rules for TotalArtistNum + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShowListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShowListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShowListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ShowListResMultiError(errors) + } + + return nil +} + +// ShowListResMultiError is an error wrapping multiple validation errors +// returned by ShowListRes.ValidateAll() if the designated constraints aren't met. +type ShowListResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowListResMultiError) 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 ShowListResMultiError) AllErrors() []error { return m } + +// ShowListResValidationError is the validation error returned by +// ShowListRes.Validate if the designated constraints aren't met. +type ShowListResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowListResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowListResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowListResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowListResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowListResValidationError) ErrorName() string { return "ShowListResValidationError" } + +// Error satisfies the builtin error interface +func (e ShowListResValidationError) 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 %sShowListRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowListResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowListResValidationError{} + +// Validate checks the field values on DelShowReq 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 *DelShowReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DelShowReq 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 DelShowReqMultiError, or +// nil if none found. +func (m *DelShowReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DelShowReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return DelShowReqMultiError(errors) + } + + return nil +} + +// DelShowReqMultiError is an error wrapping multiple validation errors +// returned by DelShowReq.ValidateAll() if the designated constraints aren't met. +type DelShowReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DelShowReqMultiError) 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 DelShowReqMultiError) AllErrors() []error { return m } + +// DelShowReqValidationError is the validation error returned by +// DelShowReq.Validate if the designated constraints aren't met. +type DelShowReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DelShowReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DelShowReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DelShowReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DelShowReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DelShowReqValidationError) ErrorName() string { return "DelShowReqValidationError" } + +// Error satisfies the builtin error interface +func (e DelShowReqValidationError) 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 %sDelShowReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DelShowReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DelShowReqValidationError{} + +// Validate checks the field values on ShowArtworkDetail 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 *ShowArtworkDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowArtworkDetail 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 +// ShowArtworkDetailMultiError, or nil if none found. +func (m *ShowArtworkDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowArtworkDetail) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ArtworkPriceUID + + // no validation rules for ShowUID + + // no validation rules for ArtworkUID + + // no validation rules for ArtworkName + + // no validation rules for ArtistName + + // no validation rules for Length + + // no validation rules for Width + + // no validation rules for Ruler + + // no validation rules for SmallPic + + if len(errors) > 0 { + return ShowArtworkDetailMultiError(errors) + } + + return nil +} + +// ShowArtworkDetailMultiError is an error wrapping multiple validation errors +// returned by ShowArtworkDetail.ValidateAll() if the designated constraints +// aren't met. +type ShowArtworkDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowArtworkDetailMultiError) 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 ShowArtworkDetailMultiError) AllErrors() []error { return m } + +// ShowArtworkDetailValidationError is the validation error returned by +// ShowArtworkDetail.Validate if the designated constraints aren't met. +type ShowArtworkDetailValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowArtworkDetailValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowArtworkDetailValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowArtworkDetailValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowArtworkDetailValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowArtworkDetailValidationError) ErrorName() string { + return "ShowArtworkDetailValidationError" +} + +// Error satisfies the builtin error interface +func (e ShowArtworkDetailValidationError) 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 %sShowArtworkDetail.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowArtworkDetailValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowArtworkDetailValidationError{} + +// Validate checks the field values on DelArtworkDetail 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 *DelArtworkDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DelArtworkDetail 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 +// DelArtworkDetailMultiError, or nil if none found. +func (m *DelArtworkDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *DelArtworkDetail) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ArtworkPriceUID + + // no validation rules for ArtworkUID + + if len(errors) > 0 { + return DelArtworkDetailMultiError(errors) + } + + return nil +} + +// DelArtworkDetailMultiError is an error wrapping multiple validation errors +// returned by DelArtworkDetail.ValidateAll() if the designated constraints +// aren't met. +type DelArtworkDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DelArtworkDetailMultiError) 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 DelArtworkDetailMultiError) AllErrors() []error { return m } + +// DelArtworkDetailValidationError is the validation error returned by +// DelArtworkDetail.Validate if the designated constraints aren't met. +type DelArtworkDetailValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DelArtworkDetailValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DelArtworkDetailValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DelArtworkDetailValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DelArtworkDetailValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DelArtworkDetailValidationError) ErrorName() string { return "DelArtworkDetailValidationError" } + +// Error satisfies the builtin error interface +func (e DelArtworkDetailValidationError) 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 %sDelArtworkDetail.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DelArtworkDetailValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DelArtworkDetailValidationError{} + +// Validate checks the field values on ShowStatisticalInfoReq 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 *ShowStatisticalInfoReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowStatisticalInfoReq 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 +// ShowStatisticalInfoReqMultiError, or nil if none found. +func (m *ShowStatisticalInfoReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowStatisticalInfoReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for IsShow + + if len(errors) > 0 { + return ShowStatisticalInfoReqMultiError(errors) + } + + return nil +} + +// ShowStatisticalInfoReqMultiError is an error wrapping multiple validation +// errors returned by ShowStatisticalInfoReq.ValidateAll() if the designated +// constraints aren't met. +type ShowStatisticalInfoReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowStatisticalInfoReqMultiError) 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 ShowStatisticalInfoReqMultiError) AllErrors() []error { return m } + +// ShowStatisticalInfoReqValidationError is the validation error returned by +// ShowStatisticalInfoReq.Validate if the designated constraints aren't met. +type ShowStatisticalInfoReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowStatisticalInfoReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowStatisticalInfoReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowStatisticalInfoReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowStatisticalInfoReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowStatisticalInfoReqValidationError) ErrorName() string { + return "ShowStatisticalInfoReqValidationError" +} + +// Error satisfies the builtin error interface +func (e ShowStatisticalInfoReqValidationError) 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 %sShowStatisticalInfoReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowStatisticalInfoReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowStatisticalInfoReqValidationError{} + +// Validate checks the field values on ShowStatisticalInfoRes 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 *ShowStatisticalInfoRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowStatisticalInfoRes 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 +// ShowStatisticalInfoResMultiError, or nil if none found. +func (m *ShowStatisticalInfoRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowStatisticalInfoRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShowStatisticalInfoResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShowStatisticalInfoResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShowStatisticalInfoResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ShowStatisticalInfoResMultiError(errors) + } + + return nil +} + +// ShowStatisticalInfoResMultiError is an error wrapping multiple validation +// errors returned by ShowStatisticalInfoRes.ValidateAll() if the designated +// constraints aren't met. +type ShowStatisticalInfoResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowStatisticalInfoResMultiError) 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 ShowStatisticalInfoResMultiError) AllErrors() []error { return m } + +// ShowStatisticalInfoResValidationError is the validation error returned by +// ShowStatisticalInfoRes.Validate if the designated constraints aren't met. +type ShowStatisticalInfoResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowStatisticalInfoResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowStatisticalInfoResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowStatisticalInfoResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowStatisticalInfoResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowStatisticalInfoResValidationError) ErrorName() string { + return "ShowStatisticalInfoResValidationError" +} + +// Error satisfies the builtin error interface +func (e ShowStatisticalInfoResValidationError) 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 %sShowStatisticalInfoRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowStatisticalInfoResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowStatisticalInfoResValidationError{} + +// Validate checks the field values on ArtworkPriceReq 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 *ArtworkPriceReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ArtworkPriceReq 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 +// ArtworkPriceReqMultiError, or nil if none found. +func (m *ArtworkPriceReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ArtworkPriceReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ArtworkUID + + if len(errors) > 0 { + return ArtworkPriceReqMultiError(errors) + } + + return nil +} + +// ArtworkPriceReqMultiError is an error wrapping multiple validation errors +// returned by ArtworkPriceReq.ValidateAll() if the designated constraints +// aren't met. +type ArtworkPriceReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ArtworkPriceReqMultiError) 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 ArtworkPriceReqMultiError) AllErrors() []error { return m } + +// ArtworkPriceReqValidationError is the validation error returned by +// ArtworkPriceReq.Validate if the designated constraints aren't met. +type ArtworkPriceReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ArtworkPriceReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ArtworkPriceReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ArtworkPriceReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ArtworkPriceReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ArtworkPriceReqValidationError) ErrorName() string { return "ArtworkPriceReqValidationError" } + +// Error satisfies the builtin error interface +func (e ArtworkPriceReqValidationError) 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 %sArtworkPriceReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ArtworkPriceReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ArtworkPriceReqValidationError{} + +// Validate checks the field values on ArtworkPriceRes 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 *ArtworkPriceRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ArtworkPriceRes 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 +// ArtworkPriceResMultiError, or nil if none found. +func (m *ArtworkPriceRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ArtworkPriceRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ArtworkPriceResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ArtworkPriceResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ArtworkPriceResValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ArtworkPriceResMultiError(errors) + } + + return nil +} + +// ArtworkPriceResMultiError is an error wrapping multiple validation errors +// returned by ArtworkPriceRes.ValidateAll() if the designated constraints +// aren't met. +type ArtworkPriceResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ArtworkPriceResMultiError) 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 ArtworkPriceResMultiError) AllErrors() []error { return m } + +// ArtworkPriceResValidationError is the validation error returned by +// ArtworkPriceRes.Validate if the designated constraints aren't met. +type ArtworkPriceResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ArtworkPriceResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ArtworkPriceResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ArtworkPriceResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ArtworkPriceResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ArtworkPriceResValidationError) ErrorName() string { return "ArtworkPriceResValidationError" } + +// Error satisfies the builtin error interface +func (e ArtworkPriceResValidationError) 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 %sArtworkPriceRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ArtworkPriceResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ArtworkPriceResValidationError{} + +// Validate checks the field values on ShowRel 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 *ShowRel) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowRel 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 ShowRelMultiError, or nil if none found. +func (m *ShowRel) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowRel) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ShowRelUID + + // no validation rules for ApplyUID + + // no validation rules for ShowUID + + // no validation rules for Index + + // no validation rules for Address + + if len(errors) > 0 { + return ShowRelMultiError(errors) + } + + return nil +} + +// ShowRelMultiError is an error wrapping multiple validation errors returned +// by ShowRel.ValidateAll() if the designated constraints aren't met. +type ShowRelMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowRelMultiError) 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 ShowRelMultiError) AllErrors() []error { return m } + +// ShowRelValidationError is the validation error returned by ShowRel.Validate +// if the designated constraints aren't met. +type ShowRelValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowRelValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowRelValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowRelValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowRelValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowRelValidationError) ErrorName() string { return "ShowRelValidationError" } + +// Error satisfies the builtin error interface +func (e ShowRelValidationError) 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 %sShowRel.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowRelValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowRelValidationError{} + +// Validate checks the field values on DelShowRel 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 *DelShowRel) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DelShowRel 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 DelShowRelMultiError, or +// nil if none found. +func (m *DelShowRel) ValidateAll() error { + return m.validate(true) +} + +func (m *DelShowRel) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ShowRelUID + + // no validation rules for ShowUID + + if len(errors) > 0 { + return DelShowRelMultiError(errors) + } + + return nil +} + +// DelShowRelMultiError is an error wrapping multiple validation errors +// returned by DelShowRel.ValidateAll() if the designated constraints aren't met. +type DelShowRelMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DelShowRelMultiError) 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 DelShowRelMultiError) AllErrors() []error { return m } + +// DelShowRelValidationError is the validation error returned by +// DelShowRel.Validate if the designated constraints aren't met. +type DelShowRelValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DelShowRelValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DelShowRelValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DelShowRelValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DelShowRelValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DelShowRelValidationError) ErrorName() string { return "DelShowRelValidationError" } + +// Error satisfies the builtin error interface +func (e DelShowRelValidationError) 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 %sDelShowRel.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DelShowRelValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DelShowRelValidationError{} + +// Validate checks the field values on SaveApplyReq 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 *SaveApplyReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SaveApplyReq 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 SaveApplyReqMultiError, or +// nil if none found. +func (m *SaveApplyReq) ValidateAll() error { + return m.validate(true) +} + +func (m *SaveApplyReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Applicant + + // no validation rules for ApplicantID + + // no validation rules for Num + + // no validation rules for ApplyTime + + // no validation rules for ApplyUID + + // no validation rules for Status + + // no validation rules for Remark + + for idx, item := range m.GetRel() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SaveApplyReqValidationError{ + field: fmt.Sprintf("Rel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SaveApplyReqValidationError{ + field: fmt.Sprintf("Rel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SaveApplyReqValidationError{ + field: fmt.Sprintf("Rel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetDelRel() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SaveApplyReqValidationError{ + field: fmt.Sprintf("DelRel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SaveApplyReqValidationError{ + field: fmt.Sprintf("DelRel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SaveApplyReqValidationError{ + field: fmt.Sprintf("DelRel[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return SaveApplyReqMultiError(errors) + } + + return nil +} + +// SaveApplyReqMultiError is an error wrapping multiple validation errors +// returned by SaveApplyReq.ValidateAll() if the designated constraints aren't met. +type SaveApplyReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SaveApplyReqMultiError) 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 SaveApplyReqMultiError) AllErrors() []error { return m } + +// SaveApplyReqValidationError is the validation error returned by +// SaveApplyReq.Validate if the designated constraints aren't met. +type SaveApplyReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SaveApplyReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SaveApplyReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SaveApplyReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SaveApplyReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SaveApplyReqValidationError) ErrorName() string { return "SaveApplyReqValidationError" } + +// Error satisfies the builtin error interface +func (e SaveApplyReqValidationError) 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 %sSaveApplyReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SaveApplyReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SaveApplyReqValidationError{} + +// Validate checks the field values on SaveApplyRes 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 *SaveApplyRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SaveApplyRes 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 SaveApplyResMultiError, or +// nil if none found. +func (m *SaveApplyRes) ValidateAll() error { + return m.validate(true) +} + +func (m *SaveApplyRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Msg + + // no validation rules for ApplyUID + + if len(errors) > 0 { + return SaveApplyResMultiError(errors) + } + + return nil +} + +// SaveApplyResMultiError is an error wrapping multiple validation errors +// returned by SaveApplyRes.ValidateAll() if the designated constraints aren't met. +type SaveApplyResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SaveApplyResMultiError) 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 SaveApplyResMultiError) AllErrors() []error { return m } + +// SaveApplyResValidationError is the validation error returned by +// SaveApplyRes.Validate if the designated constraints aren't met. +type SaveApplyResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SaveApplyResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SaveApplyResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SaveApplyResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SaveApplyResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SaveApplyResValidationError) ErrorName() string { return "SaveApplyResValidationError" } + +// Error satisfies the builtin error interface +func (e SaveApplyResValidationError) 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 %sSaveApplyRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SaveApplyResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SaveApplyResValidationError{} + +// Validate checks the field values on ApplyListReq 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 *ApplyListReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ApplyListReq 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 ApplyListReqMultiError, or +// nil if none found. +func (m *ApplyListReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ApplyListReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Page + + // no validation rules for PageSize + + // no validation rules for Status + + if len(errors) > 0 { + return ApplyListReqMultiError(errors) + } + + return nil +} + +// ApplyListReqMultiError is an error wrapping multiple validation errors +// returned by ApplyListReq.ValidateAll() if the designated constraints aren't met. +type ApplyListReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ApplyListReqMultiError) 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 ApplyListReqMultiError) AllErrors() []error { return m } + +// ApplyListReqValidationError is the validation error returned by +// ApplyListReq.Validate if the designated constraints aren't met. +type ApplyListReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApplyListReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApplyListReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApplyListReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApplyListReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApplyListReqValidationError) ErrorName() string { return "ApplyListReqValidationError" } + +// Error satisfies the builtin error interface +func (e ApplyListReqValidationError) 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 %sApplyListReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApplyListReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApplyListReqValidationError{} + +// Validate checks the field values on ApplyListRes 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 *ApplyListRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ApplyListRes 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 ApplyListResMultiError, or +// nil if none found. +func (m *ApplyListRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ApplyListRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Total + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ApplyListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ApplyListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApplyListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ApplyListResMultiError(errors) + } + + return nil +} + +// ApplyListResMultiError is an error wrapping multiple validation errors +// returned by ApplyListRes.ValidateAll() if the designated constraints aren't met. +type ApplyListResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ApplyListResMultiError) 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 ApplyListResMultiError) AllErrors() []error { return m } + +// ApplyListResValidationError is the validation error returned by +// ApplyListRes.Validate if the designated constraints aren't met. +type ApplyListResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApplyListResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApplyListResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApplyListResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApplyListResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApplyListResValidationError) ErrorName() string { return "ApplyListResValidationError" } + +// Error satisfies the builtin error interface +func (e ApplyListResValidationError) 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 %sApplyListRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApplyListResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApplyListResValidationError{} + +// Validate checks the field values on ApplyShowReq 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 *ApplyShowReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ApplyShowReq 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 ApplyShowReqMultiError, or +// nil if none found. +func (m *ApplyShowReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ApplyShowReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ApplyUID + + if len(errors) > 0 { + return ApplyShowReqMultiError(errors) + } + + return nil +} + +// ApplyShowReqMultiError is an error wrapping multiple validation errors +// returned by ApplyShowReq.ValidateAll() if the designated constraints aren't met. +type ApplyShowReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ApplyShowReqMultiError) 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 ApplyShowReqMultiError) AllErrors() []error { return m } + +// ApplyShowReqValidationError is the validation error returned by +// ApplyShowReq.Validate if the designated constraints aren't met. +type ApplyShowReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApplyShowReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApplyShowReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApplyShowReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApplyShowReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApplyShowReqValidationError) ErrorName() string { return "ApplyShowReqValidationError" } + +// Error satisfies the builtin error interface +func (e ApplyShowReqValidationError) 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 %sApplyShowReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApplyShowReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApplyShowReqValidationError{} + +// Validate checks the field values on ApplyShowRes 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 *ApplyShowRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ApplyShowRes 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 ApplyShowResMultiError, or +// nil if none found. +func (m *ApplyShowRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ApplyShowRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetApply()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ApplyShowResValidationError{ + field: "Apply", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ApplyShowResValidationError{ + field: "Apply", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetApply()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApplyShowResValidationError{ + field: "Apply", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetShow() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ApplyShowResValidationError{ + field: fmt.Sprintf("Show[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ApplyShowResValidationError{ + field: fmt.Sprintf("Show[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ApplyShowResValidationError{ + field: fmt.Sprintf("Show[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for Msg + + if len(errors) > 0 { + return ApplyShowResMultiError(errors) + } + + return nil +} + +// ApplyShowResMultiError is an error wrapping multiple validation errors +// returned by ApplyShowRes.ValidateAll() if the designated constraints aren't met. +type ApplyShowResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ApplyShowResMultiError) 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 ApplyShowResMultiError) AllErrors() []error { return m } + +// ApplyShowResValidationError is the validation error returned by +// ApplyShowRes.Validate if the designated constraints aren't met. +type ApplyShowResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApplyShowResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApplyShowResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApplyShowResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApplyShowResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApplyShowResValidationError) ErrorName() string { return "ApplyShowResValidationError" } + +// Error satisfies the builtin error interface +func (e ApplyShowResValidationError) 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 %sApplyShowRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApplyShowResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApplyShowResValidationError{} + +// Validate checks the field values on ApplyDetail 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 *ApplyDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ApplyDetail 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 ApplyDetailMultiError, or +// nil if none found. +func (m *ApplyDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *ApplyDetail) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ApplyUID + + // no validation rules for ApplySeq + + // no validation rules for Applicant + + // no validation rules for ApplicantID + + // no validation rules for Num + + // no validation rules for ApplyTime + + // no validation rules for Status + + // no validation rules for Remark + + if len(errors) > 0 { + return ApplyDetailMultiError(errors) + } + + return nil +} + +// ApplyDetailMultiError is an error wrapping multiple validation errors +// returned by ApplyDetail.ValidateAll() if the designated constraints aren't met. +type ApplyDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ApplyDetailMultiError) 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 ApplyDetailMultiError) AllErrors() []error { return m } + +// ApplyDetailValidationError is the validation error returned by +// ApplyDetail.Validate if the designated constraints aren't met. +type ApplyDetailValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ApplyDetailValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ApplyDetailValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ApplyDetailValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ApplyDetailValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ApplyDetailValidationError) ErrorName() string { return "ApplyDetailValidationError" } + +// Error satisfies the builtin error interface +func (e ApplyDetailValidationError) 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 %sApplyDetail.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ApplyDetailValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ApplyDetailValidationError{} + +// Validate checks the field values on ShowRelListReq 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 *ShowRelListReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowRelListReq 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 ShowRelListReqMultiError, +// or nil if none found. +func (m *ShowRelListReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowRelListReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ApplyUID + + if len(errors) > 0 { + return ShowRelListReqMultiError(errors) + } + + return nil +} + +// ShowRelListReqMultiError is an error wrapping multiple validation errors +// returned by ShowRelListReq.ValidateAll() if the designated constraints +// aren't met. +type ShowRelListReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowRelListReqMultiError) 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 ShowRelListReqMultiError) AllErrors() []error { return m } + +// ShowRelListReqValidationError is the validation error returned by +// ShowRelListReq.Validate if the designated constraints aren't met. +type ShowRelListReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowRelListReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowRelListReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowRelListReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowRelListReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowRelListReqValidationError) ErrorName() string { return "ShowRelListReqValidationError" } + +// Error satisfies the builtin error interface +func (e ShowRelListReqValidationError) 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 %sShowRelListReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowRelListReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowRelListReqValidationError{} + +// Validate checks the field values on ShowRelListRes 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 *ShowRelListRes) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowRelListRes 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 ShowRelListResMultiError, +// or nil if none found. +func (m *ShowRelListRes) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowRelListRes) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Msg + + for idx, item := range m.GetData() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShowRelListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShowRelListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShowRelListResValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ShowRelListResMultiError(errors) + } + + return nil +} + +// ShowRelListResMultiError is an error wrapping multiple validation errors +// returned by ShowRelListRes.ValidateAll() if the designated constraints +// aren't met. +type ShowRelListResMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowRelListResMultiError) 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 ShowRelListResMultiError) AllErrors() []error { return m } + +// ShowRelListResValidationError is the validation error returned by +// ShowRelListRes.Validate if the designated constraints aren't met. +type ShowRelListResValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowRelListResValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowRelListResValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowRelListResValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowRelListResValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowRelListResValidationError) ErrorName() string { return "ShowRelListResValidationError" } + +// Error satisfies the builtin error interface +func (e ShowRelListResValidationError) 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 %sShowRelListRes.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowRelListResValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowRelListResValidationError{} + +// Validate checks the field values on UpdateApplyStatusReq 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 *UpdateApplyStatusReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateApplyStatusReq 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 +// UpdateApplyStatusReqMultiError, or nil if none found. +func (m *UpdateApplyStatusReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateApplyStatusReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Status + + // no validation rules for Remark + + // no validation rules for ApplyUID + + if len(errors) > 0 { + return UpdateApplyStatusReqMultiError(errors) + } + + return nil +} + +// UpdateApplyStatusReqMultiError is an error wrapping multiple validation +// errors returned by UpdateApplyStatusReq.ValidateAll() if the designated +// constraints aren't met. +type UpdateApplyStatusReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateApplyStatusReqMultiError) 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 UpdateApplyStatusReqMultiError) AllErrors() []error { return m } + +// UpdateApplyStatusReqValidationError is the validation error returned by +// UpdateApplyStatusReq.Validate if the designated constraints aren't met. +type UpdateApplyStatusReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UpdateApplyStatusReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UpdateApplyStatusReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UpdateApplyStatusReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UpdateApplyStatusReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UpdateApplyStatusReqValidationError) ErrorName() string { + return "UpdateApplyStatusReqValidationError" +} + +// Error satisfies the builtin error interface +func (e UpdateApplyStatusReqValidationError) 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 %sUpdateApplyStatusReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UpdateApplyStatusReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UpdateApplyStatusReqValidationError{} + +// Validate checks the field values on DelApplyReq 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 *DelApplyReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DelApplyReq 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 DelApplyReqMultiError, or +// nil if none found. +func (m *DelApplyReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DelApplyReq) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return DelApplyReqMultiError(errors) + } + + return nil +} + +// DelApplyReqMultiError is an error wrapping multiple validation errors +// returned by DelApplyReq.ValidateAll() if the designated constraints aren't met. +type DelApplyReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DelApplyReqMultiError) 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 DelApplyReqMultiError) AllErrors() []error { return m } + +// DelApplyReqValidationError is the validation error returned by +// DelApplyReq.Validate if the designated constraints aren't met. +type DelApplyReqValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DelApplyReqValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DelApplyReqValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DelApplyReqValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DelApplyReqValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DelApplyReqValidationError) ErrorName() string { return "DelApplyReqValidationError" } + +// Error satisfies the builtin error interface +func (e DelApplyReqValidationError) 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 %sDelApplyReq.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DelApplyReqValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DelApplyReqValidationError{} + +// Validate checks the field values on ShowStatisticalInfoRes_Num 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 *ShowStatisticalInfoRes_Num) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShowStatisticalInfoRes_Num 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 +// ShowStatisticalInfoRes_NumMultiError, or nil if none found. +func (m *ShowStatisticalInfoRes_Num) ValidateAll() error { + return m.validate(true) +} + +func (m *ShowStatisticalInfoRes_Num) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ArtistNum + + // no validation rules for PackageNum + + // no validation rules for TotalNum + + // no validation rules for NotShowNum + + // no validation rules for ShowHisNum + + if len(errors) > 0 { + return ShowStatisticalInfoRes_NumMultiError(errors) + } + + return nil +} + +// ShowStatisticalInfoRes_NumMultiError is an error wrapping multiple +// validation errors returned by ShowStatisticalInfoRes_Num.ValidateAll() if +// the designated constraints aren't met. +type ShowStatisticalInfoRes_NumMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShowStatisticalInfoRes_NumMultiError) 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 ShowStatisticalInfoRes_NumMultiError) AllErrors() []error { return m } + +// ShowStatisticalInfoRes_NumValidationError is the validation error returned +// by ShowStatisticalInfoRes_Num.Validate if the designated constraints aren't met. +type ShowStatisticalInfoRes_NumValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShowStatisticalInfoRes_NumValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShowStatisticalInfoRes_NumValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShowStatisticalInfoRes_NumValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShowStatisticalInfoRes_NumValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShowStatisticalInfoRes_NumValidationError) ErrorName() string { + return "ShowStatisticalInfoRes_NumValidationError" +} + +// Error satisfies the builtin error interface +func (e ShowStatisticalInfoRes_NumValidationError) 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 %sShowStatisticalInfoRes_Num.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShowStatisticalInfoRes_NumValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShowStatisticalInfoRes_NumValidationError{} + +// Validate checks the field values on ArtworkPriceRes_PriceInfo 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 *ArtworkPriceRes_PriceInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ArtworkPriceRes_PriceInfo 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 +// ArtworkPriceRes_PriceInfoMultiError, or nil if none found. +func (m *ArtworkPriceRes_PriceInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ArtworkPriceRes_PriceInfo) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Price + + // no validation rules for RulerPrice + + // no validation rules for ArtworkPrice + + // no validation rules for MarketPrice + + // no validation rules for CopyrightPrice + + if len(errors) > 0 { + return ArtworkPriceRes_PriceInfoMultiError(errors) + } + + return nil +} + +// ArtworkPriceRes_PriceInfoMultiError is an error wrapping multiple validation +// errors returned by ArtworkPriceRes_PriceInfo.ValidateAll() if the +// designated constraints aren't met. +type ArtworkPriceRes_PriceInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ArtworkPriceRes_PriceInfoMultiError) 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 ArtworkPriceRes_PriceInfoMultiError) AllErrors() []error { return m } + +// ArtworkPriceRes_PriceInfoValidationError is the validation error returned by +// ArtworkPriceRes_PriceInfo.Validate if the designated constraints aren't met. +type ArtworkPriceRes_PriceInfoValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ArtworkPriceRes_PriceInfoValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ArtworkPriceRes_PriceInfoValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ArtworkPriceRes_PriceInfoValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ArtworkPriceRes_PriceInfoValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ArtworkPriceRes_PriceInfoValidationError) ErrorName() string { + return "ArtworkPriceRes_PriceInfoValidationError" +} + +// Error satisfies the builtin error interface +func (e ArtworkPriceRes_PriceInfoValidationError) 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 %sArtworkPriceRes_PriceInfo.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ArtworkPriceRes_PriceInfoValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ArtworkPriceRes_PriceInfoValidationError{} diff --git a/pb/artShow/artshow_grpc.pb.go b/pb/artShow/artshow_grpc.pb.go new file mode 100644 index 0000000..19434d6 --- /dev/null +++ b/pb/artShow/artshow_grpc.pb.go @@ -0,0 +1,609 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.10.1 +// source: pb/artshow.proto + +package artShow + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// ArtShowClient is the client API for ArtShow service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ArtShowClient interface { + CreateShow(ctx context.Context, in *SaveShowReq, opts ...grpc.CallOption) (*SaveShowRes, error) + UpdateShow(ctx context.Context, in *SaveShowReq, opts ...grpc.CallOption) (*SaveShowRes, error) + DelShow(ctx context.Context, in *DelShowReq, opts ...grpc.CallOption) (*CommonRes, error) + ShowList(ctx context.Context, in *ShowListReq, opts ...grpc.CallOption) (*ShowListRes, error) + ShowArtworkInfo(ctx context.Context, in *ShowDetailReq, opts ...grpc.CallOption) (*ShowArtworkDetailRes, error) + ShowDetail(ctx context.Context, in *ShowDetailReq, opts ...grpc.CallOption) (*ShowDetailRes, error) + ShowStatisticalInfo(ctx context.Context, in *ShowStatisticalInfoReq, opts ...grpc.CallOption) (*ShowStatisticalInfoRes, error) + ArtworkPrice(ctx context.Context, in *ArtworkPriceReq, opts ...grpc.CallOption) (*ArtworkPriceRes, error) + CreateApply(ctx context.Context, in *SaveApplyReq, opts ...grpc.CallOption) (*SaveApplyRes, error) + UpdateApply(ctx context.Context, in *SaveApplyReq, opts ...grpc.CallOption) (*SaveApplyRes, error) + DelApply(ctx context.Context, in *DelApplyReq, opts ...grpc.CallOption) (*CommonRes, error) + ShowListWithApply(ctx context.Context, in *ShowListReq, opts ...grpc.CallOption) (*ShowListRes, error) + UpdateApplyStatus(ctx context.Context, in *UpdateApplyStatusReq, opts ...grpc.CallOption) (*CommonRes, error) + ApplyList(ctx context.Context, in *ApplyListReq, opts ...grpc.CallOption) (*ApplyListRes, error) + ApplyDetail(ctx context.Context, in *ApplyShowReq, opts ...grpc.CallOption) (*ApplyShowRes, error) +} + +type artShowClient struct { + cc grpc.ClientConnInterface +} + +func NewArtShowClient(cc grpc.ClientConnInterface) ArtShowClient { + return &artShowClient{cc} +} + +func (c *artShowClient) CreateShow(ctx context.Context, in *SaveShowReq, opts ...grpc.CallOption) (*SaveShowRes, error) { + out := new(SaveShowRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/CreateShow", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) UpdateShow(ctx context.Context, in *SaveShowReq, opts ...grpc.CallOption) (*SaveShowRes, error) { + out := new(SaveShowRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/UpdateShow", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) DelShow(ctx context.Context, in *DelShowReq, opts ...grpc.CallOption) (*CommonRes, error) { + out := new(CommonRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/DelShow", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ShowList(ctx context.Context, in *ShowListReq, opts ...grpc.CallOption) (*ShowListRes, error) { + out := new(ShowListRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ShowList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ShowArtworkInfo(ctx context.Context, in *ShowDetailReq, opts ...grpc.CallOption) (*ShowArtworkDetailRes, error) { + out := new(ShowArtworkDetailRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ShowArtworkInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ShowDetail(ctx context.Context, in *ShowDetailReq, opts ...grpc.CallOption) (*ShowDetailRes, error) { + out := new(ShowDetailRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ShowDetail", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ShowStatisticalInfo(ctx context.Context, in *ShowStatisticalInfoReq, opts ...grpc.CallOption) (*ShowStatisticalInfoRes, error) { + out := new(ShowStatisticalInfoRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ShowStatisticalInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ArtworkPrice(ctx context.Context, in *ArtworkPriceReq, opts ...grpc.CallOption) (*ArtworkPriceRes, error) { + out := new(ArtworkPriceRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ArtworkPrice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) CreateApply(ctx context.Context, in *SaveApplyReq, opts ...grpc.CallOption) (*SaveApplyRes, error) { + out := new(SaveApplyRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/CreateApply", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) UpdateApply(ctx context.Context, in *SaveApplyReq, opts ...grpc.CallOption) (*SaveApplyRes, error) { + out := new(SaveApplyRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/UpdateApply", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) DelApply(ctx context.Context, in *DelApplyReq, opts ...grpc.CallOption) (*CommonRes, error) { + out := new(CommonRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/DelApply", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ShowListWithApply(ctx context.Context, in *ShowListReq, opts ...grpc.CallOption) (*ShowListRes, error) { + out := new(ShowListRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ShowListWithApply", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) UpdateApplyStatus(ctx context.Context, in *UpdateApplyStatusReq, opts ...grpc.CallOption) (*CommonRes, error) { + out := new(CommonRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/UpdateApplyStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ApplyList(ctx context.Context, in *ApplyListReq, opts ...grpc.CallOption) (*ApplyListRes, error) { + out := new(ApplyListRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ApplyList", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *artShowClient) ApplyDetail(ctx context.Context, in *ApplyShowReq, opts ...grpc.CallOption) (*ApplyShowRes, error) { + out := new(ApplyShowRes) + err := c.cc.Invoke(ctx, "/ArtShow.ArtShow/ApplyDetail", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ArtShowServer is the server API for ArtShow service. +// All implementations must embed UnimplementedArtShowServer +// for forward compatibility +type ArtShowServer interface { + CreateShow(context.Context, *SaveShowReq) (*SaveShowRes, error) + UpdateShow(context.Context, *SaveShowReq) (*SaveShowRes, error) + DelShow(context.Context, *DelShowReq) (*CommonRes, error) + ShowList(context.Context, *ShowListReq) (*ShowListRes, error) + ShowArtworkInfo(context.Context, *ShowDetailReq) (*ShowArtworkDetailRes, error) + ShowDetail(context.Context, *ShowDetailReq) (*ShowDetailRes, error) + ShowStatisticalInfo(context.Context, *ShowStatisticalInfoReq) (*ShowStatisticalInfoRes, error) + ArtworkPrice(context.Context, *ArtworkPriceReq) (*ArtworkPriceRes, error) + CreateApply(context.Context, *SaveApplyReq) (*SaveApplyRes, error) + UpdateApply(context.Context, *SaveApplyReq) (*SaveApplyRes, error) + DelApply(context.Context, *DelApplyReq) (*CommonRes, error) + ShowListWithApply(context.Context, *ShowListReq) (*ShowListRes, error) + UpdateApplyStatus(context.Context, *UpdateApplyStatusReq) (*CommonRes, error) + ApplyList(context.Context, *ApplyListReq) (*ApplyListRes, error) + ApplyDetail(context.Context, *ApplyShowReq) (*ApplyShowRes, error) + mustEmbedUnimplementedArtShowServer() +} + +// UnimplementedArtShowServer must be embedded to have forward compatible implementations. +type UnimplementedArtShowServer struct { +} + +func (UnimplementedArtShowServer) CreateShow(context.Context, *SaveShowReq) (*SaveShowRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateShow not implemented") +} +func (UnimplementedArtShowServer) UpdateShow(context.Context, *SaveShowReq) (*SaveShowRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateShow not implemented") +} +func (UnimplementedArtShowServer) DelShow(context.Context, *DelShowReq) (*CommonRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelShow not implemented") +} +func (UnimplementedArtShowServer) ShowList(context.Context, *ShowListReq) (*ShowListRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShowList not implemented") +} +func (UnimplementedArtShowServer) ShowArtworkInfo(context.Context, *ShowDetailReq) (*ShowArtworkDetailRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShowArtworkInfo not implemented") +} +func (UnimplementedArtShowServer) ShowDetail(context.Context, *ShowDetailReq) (*ShowDetailRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShowDetail not implemented") +} +func (UnimplementedArtShowServer) ShowStatisticalInfo(context.Context, *ShowStatisticalInfoReq) (*ShowStatisticalInfoRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShowStatisticalInfo not implemented") +} +func (UnimplementedArtShowServer) ArtworkPrice(context.Context, *ArtworkPriceReq) (*ArtworkPriceRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ArtworkPrice not implemented") +} +func (UnimplementedArtShowServer) CreateApply(context.Context, *SaveApplyReq) (*SaveApplyRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateApply not implemented") +} +func (UnimplementedArtShowServer) UpdateApply(context.Context, *SaveApplyReq) (*SaveApplyRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateApply not implemented") +} +func (UnimplementedArtShowServer) DelApply(context.Context, *DelApplyReq) (*CommonRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method DelApply not implemented") +} +func (UnimplementedArtShowServer) ShowListWithApply(context.Context, *ShowListReq) (*ShowListRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShowListWithApply not implemented") +} +func (UnimplementedArtShowServer) UpdateApplyStatus(context.Context, *UpdateApplyStatusReq) (*CommonRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateApplyStatus not implemented") +} +func (UnimplementedArtShowServer) ApplyList(context.Context, *ApplyListReq) (*ApplyListRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyList not implemented") +} +func (UnimplementedArtShowServer) ApplyDetail(context.Context, *ApplyShowReq) (*ApplyShowRes, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyDetail not implemented") +} +func (UnimplementedArtShowServer) mustEmbedUnimplementedArtShowServer() {} + +// UnsafeArtShowServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ArtShowServer will +// result in compilation errors. +type UnsafeArtShowServer interface { + mustEmbedUnimplementedArtShowServer() +} + +func RegisterArtShowServer(s grpc.ServiceRegistrar, srv ArtShowServer) { + s.RegisterService(&ArtShow_ServiceDesc, srv) +} + +func _ArtShow_CreateShow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveShowReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).CreateShow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/CreateShow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).CreateShow(ctx, req.(*SaveShowReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_UpdateShow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveShowReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).UpdateShow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/UpdateShow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).UpdateShow(ctx, req.(*SaveShowReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_DelShow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DelShowReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).DelShow(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/DelShow", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).DelShow(ctx, req.(*DelShowReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ShowList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShowListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ShowList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ShowList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ShowList(ctx, req.(*ShowListReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ShowArtworkInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShowDetailReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ShowArtworkInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ShowArtworkInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ShowArtworkInfo(ctx, req.(*ShowDetailReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ShowDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShowDetailReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ShowDetail(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ShowDetail", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ShowDetail(ctx, req.(*ShowDetailReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ShowStatisticalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShowStatisticalInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ShowStatisticalInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ShowStatisticalInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ShowStatisticalInfo(ctx, req.(*ShowStatisticalInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ArtworkPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ArtworkPriceReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ArtworkPrice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ArtworkPrice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ArtworkPrice(ctx, req.(*ArtworkPriceReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_CreateApply_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveApplyReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).CreateApply(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/CreateApply", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).CreateApply(ctx, req.(*SaveApplyReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_UpdateApply_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveApplyReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).UpdateApply(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/UpdateApply", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).UpdateApply(ctx, req.(*SaveApplyReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_DelApply_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DelApplyReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).DelApply(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/DelApply", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).DelApply(ctx, req.(*DelApplyReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ShowListWithApply_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShowListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ShowListWithApply(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ShowListWithApply", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ShowListWithApply(ctx, req.(*ShowListReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_UpdateApplyStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateApplyStatusReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).UpdateApplyStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/UpdateApplyStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).UpdateApplyStatus(ctx, req.(*UpdateApplyStatusReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ApplyList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ApplyListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ApplyList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ApplyList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ApplyList(ctx, req.(*ApplyListReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArtShow_ApplyDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ApplyShowReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArtShowServer).ApplyDetail(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ArtShow.ArtShow/ApplyDetail", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArtShowServer).ApplyDetail(ctx, req.(*ApplyShowReq)) + } + return interceptor(ctx, in, info, handler) +} + +// ArtShow_ServiceDesc is the grpc.ServiceDesc for ArtShow service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ArtShow_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "ArtShow.ArtShow", + HandlerType: (*ArtShowServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateShow", + Handler: _ArtShow_CreateShow_Handler, + }, + { + MethodName: "UpdateShow", + Handler: _ArtShow_UpdateShow_Handler, + }, + { + MethodName: "DelShow", + Handler: _ArtShow_DelShow_Handler, + }, + { + MethodName: "ShowList", + Handler: _ArtShow_ShowList_Handler, + }, + { + MethodName: "ShowArtworkInfo", + Handler: _ArtShow_ShowArtworkInfo_Handler, + }, + { + MethodName: "ShowDetail", + Handler: _ArtShow_ShowDetail_Handler, + }, + { + MethodName: "ShowStatisticalInfo", + Handler: _ArtShow_ShowStatisticalInfo_Handler, + }, + { + MethodName: "ArtworkPrice", + Handler: _ArtShow_ArtworkPrice_Handler, + }, + { + MethodName: "CreateApply", + Handler: _ArtShow_CreateApply_Handler, + }, + { + MethodName: "UpdateApply", + Handler: _ArtShow_UpdateApply_Handler, + }, + { + MethodName: "DelApply", + Handler: _ArtShow_DelApply_Handler, + }, + { + MethodName: "ShowListWithApply", + Handler: _ArtShow_ShowListWithApply_Handler, + }, + { + MethodName: "UpdateApplyStatus", + Handler: _ArtShow_UpdateApplyStatus_Handler, + }, + { + MethodName: "ApplyList", + Handler: _ArtShow_ApplyList_Handler, + }, + { + MethodName: "ApplyDetail", + Handler: _ArtShow_ApplyDetail_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "pb/artshow.proto", +} diff --git a/pb/artshow.proto b/pb/artshow.proto index 6b4f17e..ce2a79f 100644 --- a/pb/artshow.proto +++ b/pb/artshow.proto @@ -25,7 +25,7 @@ service ArtShow { message SaveShowReq { string ShowName = 1 [json_name = "show_name"]; string ArtistName = 2 [json_name = "artist_name"]; - string ArtistID = 3 [json_name = "artist_id"]; + string ArtistUID = 3 [json_name = "artist_uid"]; int32 ArtworkNum = 4 [json_name = "artwork_num"]; int32 Ruler = 5 [json_name = "ruler"]; int64 Price = 6 [json_name = "price"]; @@ -33,15 +33,16 @@ message SaveShowReq { int32 IsShow = 8 [json_name = "is_show"]; string ShowTime = 9 [json_name = "show_time"]; - repeated ShowArtworkDetail ShowArtwork = 10 [json_name = "show_artwork"]; - repeated DelArtworkDetail DelShowArtwork = 11 [json_name = "del_show_artwork"]; + string ShowUID = 10 [json_name = "id"]; + + repeated ShowArtworkDetail ShowArtwork = 11 [json_name = "show_artwork"]; + repeated DelArtworkDetail DelShowArtwork = 12 [json_name = "del_show_artwork"]; - int64 ID = 12 [json_name = "id"]; } message SaveShowRes { string Msg = 1 [json_name = "msg"]; - int64 ShowID = 2 [json_name = "show_id"]; + string ShowUID = 2 [json_name = "show_uid"]; } message CommonRes { @@ -50,15 +51,15 @@ message CommonRes { // 画展包详情 message ShowDetailReq { - int64 ShowID = 1 [json_name = "show_id"]; + string ShowUID = 1 [json_name = "show_uid"]; } message ShowDetail { - int64 ID = 1 [json_name = "id"]; + string ShowUID = 1 [json_name = "show_uid"]; string ShowSeq = 2 [json_name = "show_seq"]; string ShowName = 3 [json_name = "show_name"]; string ArtistName = 4 [json_name = "artist_name"]; - string ArtistID = 5 [json_name = "artist_id"]; + string ArtistUID = 5 [json_name = "artist_uid"]; int32 ArtworkNum = 6 [json_name = "artwork_num"]; int32 Ruler = 7 [json_name = "ruler"]; int64 Price = 8 [json_name = "price"]; @@ -84,7 +85,7 @@ message ShowListReq { string StartTime = 3 [json_name = "start_time"]; string EndTime = 4 [json_name = "end_time"]; - string ArtistID = 5 [json_name = "artist_id"]; + string ArtistUID = 5 [json_name = "artist_uid"]; int32 IsShow = 6 [json_name = "is_show"]; } @@ -99,14 +100,14 @@ message ShowListRes { // 删除画展包 message DelShowReq { - repeated int64 ShowID = 1 [json_name = "show_id"]; + repeated string ShowUID = 1 [json_name = "show_uid"]; } // 画展包中画作详情 除价格 message ShowArtworkDetail { - int64 ID = 1 [json_name = "id"]; - int64 ShowID =2 [json_name = "show_id"]; - int64 ArtworkID = 3 [json_name = "artwork_id"]; + string ArtworkPriceUID = 1 [json_name = "artwork_price_uid"]; + string ShowUID =2 [json_name = "show_uid"]; + string ArtworkUID = 3 [json_name = "artwork_uid"]; string ArtworkName = 4 [json_name = "artwork_name"]; string ArtistName = 5 [json_name = "artist_name"]; int32 Length = 6 [json_name = "length"]; @@ -117,8 +118,8 @@ message ShowArtworkDetail { // 画展包 删除的画作信息 message DelArtworkDetail { - int64 ID = 1 [json_name = "id"]; - int64 ArtworkID = 2 [json_name = "artwork_id"]; + string ArtworkPriceUID = 1 [json_name = "artwork_price_uid"]; + string ArtworkUID = 2 [json_name = "artwork_uid"]; } // 画展包 画家 画作 统计数据 @@ -140,7 +141,7 @@ message ShowStatisticalInfoRes { } message ArtworkPriceReq { - int64 ArtworkID = 1 [json_name = "artwork_id"]; + string ArtworkUID = 1 [json_name = "artwork_uid"]; } message ArtworkPriceRes { @@ -157,25 +158,25 @@ message ArtworkPriceRes { message ShowRel { - int64 ID = 1 [json_name = "id"]; - int64 ApplyID = 2 [json_name = "apply_id"]; - int64 ShowID = 3 [json_name = "show_id"]; + string ShowRelUID = 1 [json_name = "show_rel_uid"]; + string ApplyUID = 2 [json_name = "apply_uid"]; + string ShowUID = 3 [json_name = "show_uid"]; int32 Index = 4 [json_name = "index"]; string Address = 5 [json_name = "address"]; } message DelShowRel { - int64 ID = 1 [json_name = "id"]; - int64 ShowID = 2 [json_name = "show_id"]; + string ShowRelUID = 1 [json_name = "show_rel_uid"]; + string ShowUID = 2 [json_name = "show_uid"]; } message SaveApplyReq { string Applicant = 1 [json_name = "applicant"]; - int64 ApplicantID = 2 [json_name = "applicant_id"]; + string ApplicantID = 2 [json_name = "applicant_id"]; int32 Num = 3 [json_name = "num"]; string ApplyTime = 4 [json_name = "apply_time"]; - int64 ID = 5 [json_name = "id"]; + string ApplyUID = 5 [json_name = "apply_uid"]; int32 Status = 6 [json_name = "status"]; string Remark = 7 [json_name = "remark"]; @@ -185,7 +186,7 @@ message SaveApplyReq { message SaveApplyRes { string Msg = 1 [json_name = "msg"]; - int64 ApplyID = 2 [json_name = "apply_id"]; + string ApplyUID = 2 [json_name = "apply_uid"]; } message ApplyListReq { @@ -201,7 +202,7 @@ message ApplyListRes { } message ApplyShowReq { - int64 ApplyID = 1 [json_name = "apply_id"]; + string ApplyUID = 1 [json_name = "apply_uid"]; } message ApplyShowRes { @@ -211,10 +212,10 @@ message ApplyShowRes { } message ApplyDetail { - int64 ID = 1 [json_name = "id"]; + string ApplyUID = 1 [json_name = "apply_uid"]; string ApplySeq = 2 [json_name = "apply_seq"]; string Applicant = 3 [json_name = "applicant"]; - int64 ApplicantID = 4 [json_name = "applicant_id"]; + string ApplicantID = 4 [json_name = "applicant_id"]; int32 Num = 5 [json_name = "num"]; string ApplyTime = 6 [json_name = "apply_time"]; int32 Status = 7 [json_name = "status"]; @@ -222,7 +223,7 @@ message ApplyDetail { } message ShowRelListReq { - int64 ApplyID = 1 [json_name = "apply_id"]; + string ApplyUID = 1 [json_name = "apply_uid"]; } message ShowRelListRes { @@ -233,9 +234,9 @@ message ShowRelListRes { message UpdateApplyStatusReq { int32 Status = 1 [json_name = "status"]; string Remark = 2 [json_name = "remark"]; - int64 ApplyID = 3 [json_name = "apply_id"]; + string ApplyUID = 3 [json_name = "apply_uid"]; } message DelApplyReq { - repeated int64 ApplyID = 1 [json_name = "apply_id"]; + repeated string ApplyUID = 1 [json_name = "apply_uid"]; } diff --git a/pkg/m/msg.go b/pkg/m/msg.go index fef2302..fff5f98 100644 --- a/pkg/m/msg.go +++ b/pkg/m/msg.go @@ -43,6 +43,10 @@ const ( SHOWAPPLY_SHOW // 画展包关联审批 SHOWAPPLY_SHOW_REJECT // 关联审批驳回 SHOWAPPLY_PASS // 可展 + + SHOWAPPLYStatusDoing = 1 + SHOWAPPLYStatusOk = 2 + SHOWAPPLYStatusFail = 3 ) const ( diff --git a/pkg/serializer/art_show.go b/pkg/serializer/art_show.go index 58f742d..02f04ab 100644 --- a/pkg/serializer/art_show.go +++ b/pkg/serializer/art_show.go @@ -4,20 +4,15 @@ import ( "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" "fonchain-artshow/pkg/m" - "strings" - "time" ) func BuildArtShowM(in *artShow.SaveShowReq) (out *model.ArtShow) { out = new(model.ArtShow) - if in.ID == 0 { - out.ShowSeq = strings.Join([]string{m.ARTSHOW_PREFIX, time.Now().Format("20060102150405")}, "") - } else { - out.ID = uint(in.ID) - } + + out.ShowUID = in.ShowUID out.ShowName = in.ShowName out.ArtistName = in.ArtistName - out.ArtistID = in.ArtistID + out.ArtistUID = in.ArtistUID out.ArtworkNum = in.ArtworkNum out.Price = in.Price out.Ruler = in.Ruler @@ -43,11 +38,11 @@ func BuildArtShowListRes(artShows []*model.ArtShow) (out []*artShow.ShowDetail) func BuildArtShowRpc(artShowM *model.ArtShow) (out *artShow.ShowDetail) { out = new(artShow.ShowDetail) - out.ID = int64(artShowM.ID) + out.ShowUID = artShowM.ShowUID out.ShowSeq = artShowM.ShowSeq out.ShowName = artShowM.ShowName out.ArtistName = artShowM.ArtistName - out.ArtistID = artShowM.ArtistID + out.ArtistUID = artShowM.ArtistUID out.ArtworkNum = artShowM.ArtworkNum out.Ruler = artShowM.Ruler out.Price = artShowM.Price @@ -57,9 +52,9 @@ func BuildArtShowRpc(artShowM *model.ArtShow) (out *artShow.ShowDetail) { return } -func BuildArtShowIsShowM(artShowIds uint, isShow int8) (out *model.ArtShow) { +func BuildArtShowIsShowM(show_uid string, isShow int8) (out *model.ArtShow) { out = new(model.ArtShow) - out.ID = artShowIds + out.ShowUID = show_uid out.IsShow = isShow return } diff --git a/pkg/serializer/artwork_price.go b/pkg/serializer/artwork_price.go index 3dcdfd5..47a823c 100644 --- a/pkg/serializer/artwork_price.go +++ b/pkg/serializer/artwork_price.go @@ -5,24 +5,22 @@ import ( "fonchain-artshow/pb/artShow" ) -func BuildShowArtworkM(in []*artShow.ShowArtworkDetail, showID uint) (out []*model.ArtworkPrice) { +func BuildShowArtworkM(in []*artShow.ShowArtworkDetail, showUID string) (out []*model.ArtworkPrice) { out = make([]*model.ArtworkPrice, len(in)) for i := 0; i < len(in); i++ { artworkPrice := new(model.ArtworkPrice) - artworkPrice.ArtworkID = in[i].ArtworkID + artworkPrice.ArtworkUID = in[i].ArtworkUID artworkPrice.ArtworkName = in[i].ArtworkName artworkPrice.ArtistName = in[i].ArtistName artworkPrice.SmallPic = in[i].SmallPic artworkPrice.Ruler = in[i].Ruler artworkPrice.Length = in[i].Length artworkPrice.Width = in[i].Width - if in[i].ID != 0 { - artworkPrice.ID = uint(in[i].ID) - } - if in[i].ShowID == 0 { - artworkPrice.ShowID = showID + artworkPrice.ArtworkPriceUID = in[i].ArtworkPriceUID + if showUID != "" { + artworkPrice.ShowUID = showUID } else { - artworkPrice.ShowID = uint(in[i].ShowID) + artworkPrice.ShowUID = in[i].ShowUID } out[i] = artworkPrice } @@ -33,9 +31,9 @@ func BuildShowArtworkRpc(in []*model.ArtworkPrice) (out []*artShow.ShowArtworkDe out = make([]*artShow.ShowArtworkDetail, len(in)) for i := 0; i < len(in); i++ { artworkPrice := new(artShow.ShowArtworkDetail) - artworkPrice.ID = int64(in[i].ID) - artworkPrice.ShowID = int64(in[i].ShowID) - artworkPrice.ArtworkID = in[i].ArtworkID + artworkPrice.ArtworkPriceUID = in[i].ArtworkPriceUID + artworkPrice.ShowUID = in[i].ShowUID + artworkPrice.ArtworkUID = in[i].ArtworkUID artworkPrice.ArtworkName = in[i].ArtworkName artworkPrice.ArtistName = in[i].ArtistName artworkPrice.SmallPic = in[i].SmallPic @@ -59,18 +57,18 @@ func BuildArtworkPriceRes(artworkPrice *model.ArtworkPrice) (out *artShow.Artwor return } -func BuildArtworkPriceIDs(in []*model.ArtworkPrice) (out []uint) { - out = make([]uint, len(in)) +func BuildArtworkPriceIDs(in []*model.ArtworkPrice) (out []string) { + out = make([]string, len(in)) for i := 0; i < len(in); i++ { - out[i] = in[i].ID + out[i] = in[i].ArtworkPriceUID } return } -func BuildArtworkIDs(in []*model.ArtworkPrice) (out []int64) { - out = make([]int64, len(in)) +func BuildArtworkIDs(in []*model.ArtworkPrice) (out []string) { + out = make([]string, len(in)) for i := 0; i < len(in); i++ { - out[i] = in[i].ArtworkID + out[i] = in[i].ArtworkUID } return } diff --git a/pkg/serializer/show_apply.go b/pkg/serializer/show_apply.go index 57ad8fb..a24428f 100644 --- a/pkg/serializer/show_apply.go +++ b/pkg/serializer/show_apply.go @@ -3,21 +3,14 @@ package serializer import ( "fonchain-artshow/cmd/model" "fonchain-artshow/pb/artShow" - "fonchain-artshow/pkg/m" - "strings" - "time" ) func BuildShowApply(in *artShow.SaveApplyReq) (out *model.ShowApply) { out = new(model.ShowApply) - if in.ID == 0 { - out.ApplySeq = strings.Join([]string{m.ARTSHOWAPPLY_PREFIX, time.Now().Format("20060102150405")}, "") - out.Status = m.SHOWAPPLY_ADD - } else { - out.ID = uint(in.ID) - } + out.ApplyUID = in.ApplyUID + out.Status = int(in.Status) out.Applicant = in.Applicant - out.ApplicantID = uint(in.ApplicantID) + out.ApplicantID = in.ApplicantID out.Num = in.Num out.ApplyTime = in.ApplyTime out.Remark = in.Remark @@ -28,10 +21,10 @@ func BuildShowApply(in *artShow.SaveApplyReq) (out *model.ShowApply) { func BuildShowApplyRes(in *model.ShowApply) (out *artShow.ApplyDetail) { out = new(artShow.ApplyDetail) - out.ID = int64(in.ID) + out.ApplyUID = in.ApplyUID out.ApplySeq = in.ApplySeq out.Applicant = in.Applicant - out.ApplicantID = int64(in.ApplicantID) + out.ApplicantID = in.ApplicantID out.Num = in.Num out.ApplyTime = in.ApplyTime out.Status = int32(in.Status) diff --git a/pkg/serializer/show_rel.go b/pkg/serializer/show_rel.go index 34e91dc..d787058 100644 --- a/pkg/serializer/show_rel.go +++ b/pkg/serializer/show_rel.go @@ -5,16 +5,16 @@ import ( "fonchain-artshow/pb/artShow" ) -func BuildShowRelM(in []*artShow.ShowRel, applyID uint) (out []*model.ShowRel) { +func BuildShowRelM(in []*artShow.ShowRel, applyUID string) (out []*model.ShowRel) { for i := 0; i < len(in); i++ { showRel := &model.ShowRel{ - ShowID: uint(in[i].ShowID), - ApplyID: applyID, - Index: in[i].Index, - Address: in[i].Address, + ShowUID: in[i].ShowUID, + ApplyUID: applyUID, + Index: in[i].Index, + Address: in[i].Address, } - if in[i].ID != 0 { - showRel.ID = uint(in[i].ID) + if in[i].ShowRelUID != "" { + showRel.ShowRelUID = in[i].ShowRelUID } out = append(out, showRel) } @@ -24,11 +24,11 @@ func BuildShowRelM(in []*artShow.ShowRel, applyID uint) (out []*model.ShowRel) { func BuildShowRelRes(in []*model.ShowRel) (out []*artShow.ShowRel) { for i := 0; i < len(in); i++ { showRel := &artShow.ShowRel{ - ID: int64(in[i].ID), - ApplyID: int64(in[i].ApplyID), - ShowID: int64(in[i].ShowID), - Index: in[i].Index, - Address: in[i].Address, + ShowRelUID: in[i].ShowRelUID, + ApplyUID: in[i].ApplyUID, + ShowUID: in[i].ShowUID, + Index: in[i].Index, + Address: in[i].Address, } out = append(out, showRel) } diff --git a/template/applyInfo.xlsx b/template/applyInfo.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6b1870f4acec149c7b1e7c2f7dbf2de3c4bfc098 GIT binary patch literal 18506 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 syg)$zk%av&{_mmj@8WCxe-r;#pp=sWfAiL#K@