1.圆桌讨论模型
2.圆桌讨论-观点模型 3.圆桌讨论-采纳模型 4.小组件模型
正在显示
16 个修改的文件
包含
1140 行增加
和
0 行删除
cmd/discuss/doc/dsl/api/discussion.api
0 → 100644
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "圆桌讨论" | ||
| 6 | + desc: "圆桌讨论" | ||
| 7 | + author: "zz" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: discussion/v1 | ||
| 14 | + group: discussion | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getDiscussion | ||
| 19 | + post /discussion/:id (DiscussionGetRequest) returns (DiscussionGetResponse) | ||
| 20 | + @handler saveDiscussion | ||
| 21 | + post /discussion (DiscussionSaveRequest) returns (DiscussionSaveResponse) | ||
| 22 | + @handler deleteDiscussion | ||
| 23 | + delete /discussion/:id (DiscussionDeleteRequest) returns (DiscussionDeleteResponse) | ||
| 24 | + @handler updateDiscussion | ||
| 25 | + put /discussion/:id (DiscussionUpdateRequest) returns (DiscussionUpdateResponse) | ||
| 26 | + @handler searchDiscussion | ||
| 27 | + post /discussion/search (DiscussionSearchRequest) returns (DiscussionSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + DiscussionGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + DiscussionGetResponse struct{ | ||
| 35 | + Discussion DiscussionItem `json:"discussion"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + DiscussionSaveRequest struct{ | ||
| 39 | + Discussion DiscussionItem `json:"discussion"` | ||
| 40 | + } | ||
| 41 | + DiscussionSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + DiscussionDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + DiscussionDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + DiscussionUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + Discussion DiscussionItem `json:"discussion"` | ||
| 51 | + } | ||
| 52 | + DiscussionUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + DiscussionSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + DiscussionSearchResponse{ | ||
| 59 | + List []DiscussionItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + DiscussionItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: discussion_accept/v1 | ||
| 14 | + group: discussion_accept | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getDiscussionAccept | ||
| 19 | + post /discussion_accept/:id (DiscussionAcceptGetRequest) returns (DiscussionAcceptGetResponse) | ||
| 20 | + @handler saveDiscussionAccept | ||
| 21 | + post /discussion_accept (DiscussionAcceptSaveRequest) returns (DiscussionAcceptSaveResponse) | ||
| 22 | + @handler deleteDiscussionAccept | ||
| 23 | + delete /discussion_accept/:id (DiscussionAcceptDeleteRequest) returns (DiscussionAcceptDeleteResponse) | ||
| 24 | + @handler updateDiscussionAccept | ||
| 25 | + put /discussion_accept/:id (DiscussionAcceptUpdateRequest) returns (DiscussionAcceptUpdateResponse) | ||
| 26 | + @handler searchDiscussionAccept | ||
| 27 | + post /discussion_accept/search (DiscussionAcceptSearchRequest) returns (DiscussionAcceptSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + DiscussionAcceptGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + DiscussionAcceptGetResponse struct{ | ||
| 35 | + DiscussionAccept DiscussionAcceptItem `json:"discussion_accept"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + DiscussionAcceptSaveRequest struct{ | ||
| 39 | + DiscussionAccept DiscussionAcceptItem `json:"discussion_accept"` | ||
| 40 | + } | ||
| 41 | + DiscussionAcceptSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + DiscussionAcceptDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + DiscussionAcceptDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + DiscussionAcceptUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + DiscussionAccept DiscussionAcceptItem `json:"discussion_accept"` | ||
| 51 | + } | ||
| 52 | + DiscussionAcceptUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + DiscussionAcceptSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + DiscussionAcceptSearchResponse{ | ||
| 59 | + List []DiscussionAcceptItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + DiscussionAcceptItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
| 1 | + | ||
| 2 | +syntax = "v1" | ||
| 3 | + | ||
| 4 | +info( | ||
| 5 | + title: "xx实例" | ||
| 6 | + desc: "xx实例" | ||
| 7 | + author: "author" | ||
| 8 | + email: "email" | ||
| 9 | + version: "v1" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +@server( | ||
| 13 | + prefix: discussion_opinion/v1 | ||
| 14 | + group: discussion_opinion | ||
| 15 | + jwt: JwtAuth | ||
| 16 | +) | ||
| 17 | +service Core { | ||
| 18 | + @handler getDiscussionOpinion | ||
| 19 | + post /discussion_opinion/:id (DiscussionOpinionGetRequest) returns (DiscussionOpinionGetResponse) | ||
| 20 | + @handler saveDiscussionOpinion | ||
| 21 | + post /discussion_opinion (DiscussionOpinionSaveRequest) returns (DiscussionOpinionSaveResponse) | ||
| 22 | + @handler deleteDiscussionOpinion | ||
| 23 | + delete /discussion_opinion/:id (DiscussionOpinionDeleteRequest) returns (DiscussionOpinionDeleteResponse) | ||
| 24 | + @handler updateDiscussionOpinion | ||
| 25 | + put /discussion_opinion/:id (DiscussionOpinionUpdateRequest) returns (DiscussionOpinionUpdateResponse) | ||
| 26 | + @handler searchDiscussionOpinion | ||
| 27 | + post /discussion_opinion/search (DiscussionOpinionSearchRequest) returns (DiscussionOpinionSearchResponse) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +type ( | ||
| 31 | + DiscussionOpinionGetRequest { | ||
| 32 | + Id int64 `path:"id"` | ||
| 33 | + } | ||
| 34 | + DiscussionOpinionGetResponse struct{ | ||
| 35 | + DiscussionOpinion DiscussionOpinionItem `json:"discussion_opinion"` | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + DiscussionOpinionSaveRequest struct{ | ||
| 39 | + DiscussionOpinion DiscussionOpinionItem `json:"discussion_opinion"` | ||
| 40 | + } | ||
| 41 | + DiscussionOpinionSaveResponse struct{} | ||
| 42 | + | ||
| 43 | + DiscussionOpinionDeleteRequest struct{ | ||
| 44 | + Id int64 `path:"id"` | ||
| 45 | + } | ||
| 46 | + DiscussionOpinionDeleteResponse struct{} | ||
| 47 | + | ||
| 48 | + DiscussionOpinionUpdateRequest struct{ | ||
| 49 | + Id int64 `path:"id"` | ||
| 50 | + DiscussionOpinion DiscussionOpinionItem `json:"discussion_opinion"` | ||
| 51 | + } | ||
| 52 | + DiscussionOpinionUpdateResponse struct{} | ||
| 53 | + | ||
| 54 | + DiscussionOpinionSearchRequest struct{ | ||
| 55 | + Page int `json:"page"` | ||
| 56 | + Size int `json:"size"` | ||
| 57 | + } | ||
| 58 | + DiscussionOpinionSearchResponse{ | ||
| 59 | + List []DiscussionOpinionItem `json:"list"` | ||
| 60 | + Total int64 `json:"total"` | ||
| 61 | + } | ||
| 62 | + DiscussionOpinionItem struct{ | ||
| 63 | + | ||
| 64 | + } | ||
| 65 | +) |
cmd/discuss/doc/dsl/rpc/discussion.proto
0 → 100644
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message DiscussionGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message DiscussionGetResp{ | ||
| 12 | + DiscussionItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message DiscussionSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message DiscussionSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message DiscussionDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message DiscussionDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message DiscussionUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message DiscussionUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message DiscussionSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message DiscussionSearchResp{ | ||
| 41 | + repeated DiscussionItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message DiscussionItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service DiscussionService { | ||
| 49 | + rpc DiscussionGet(DiscussionGetReq) returns(DiscussionGetResp); | ||
| 50 | + rpc DiscussionSave(DiscussionSaveReq) returns(DiscussionSaveResp); | ||
| 51 | + rpc DiscussionDelete(DiscussionDeleteReq) returns(DiscussionDeleteResp); | ||
| 52 | + rpc DiscussionUpdate(DiscussionUpdateReq) returns(DiscussionUpdateResp); | ||
| 53 | + rpc DiscussionSearch(DiscussionSearchReq) returns(DiscussionSearchResp); | ||
| 54 | +} |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message DiscussionAcceptGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message DiscussionAcceptGetResp{ | ||
| 12 | + DiscussionAcceptItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message DiscussionAcceptSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message DiscussionAcceptSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message DiscussionAcceptDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message DiscussionAcceptDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message DiscussionAcceptUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message DiscussionAcceptUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message DiscussionAcceptSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message DiscussionAcceptSearchResp{ | ||
| 41 | + repeated DiscussionAcceptItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message DiscussionAcceptItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service DiscussionAcceptService { | ||
| 49 | + rpc DiscussionAcceptGet(DiscussionAcceptGetReq) returns(DiscussionAcceptGetResp); | ||
| 50 | + rpc DiscussionAcceptSave(DiscussionAcceptSaveReq) returns(DiscussionAcceptSaveResp); | ||
| 51 | + rpc DiscussionAcceptDelete(DiscussionAcceptDeleteReq) returns(DiscussionAcceptDeleteResp); | ||
| 52 | + rpc DiscussionAcceptUpdate(DiscussionAcceptUpdateReq) returns(DiscussionAcceptUpdateResp); | ||
| 53 | + rpc DiscussionAcceptSearch(DiscussionAcceptSearchReq) returns(DiscussionAcceptSearchResp); | ||
| 54 | +} |
| 1 | + | ||
| 2 | +syntax = "proto3"; | ||
| 3 | + | ||
| 4 | +option go_package ="./pb"; | ||
| 5 | + | ||
| 6 | +package pb; | ||
| 7 | + | ||
| 8 | +message DiscussionOpinionGetReq { | ||
| 9 | + int64 Id = 1; | ||
| 10 | +} | ||
| 11 | +message DiscussionOpinionGetResp{ | ||
| 12 | + DiscussionOpinionItem User = 1; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +message DiscussionOpinionSaveReq { | ||
| 16 | + | ||
| 17 | +} | ||
| 18 | +message DiscussionOpinionSaveResp{ | ||
| 19 | + | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +message DiscussionOpinionDeleteReq { | ||
| 23 | + int64 Id = 1; | ||
| 24 | +} | ||
| 25 | +message DiscussionOpinionDeleteResp{ | ||
| 26 | + | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +message DiscussionOpinionUpdateReq { | ||
| 30 | + int64 Id = 1; | ||
| 31 | +} | ||
| 32 | +message DiscussionOpinionUpdateResp{ | ||
| 33 | + | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +message DiscussionOpinionSearchReq { | ||
| 37 | + int64 PageNumber = 1; | ||
| 38 | + int64 PageSize = 2; | ||
| 39 | +} | ||
| 40 | +message DiscussionOpinionSearchResp{ | ||
| 41 | + repeated DiscussionOpinionItem List =1; | ||
| 42 | + int64 Total =2; | ||
| 43 | +} | ||
| 44 | +message DiscussionOpinionItem { | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +service DiscussionOpinionService { | ||
| 49 | + rpc DiscussionOpinionGet(DiscussionOpinionGetReq) returns(DiscussionOpinionGetResp); | ||
| 50 | + rpc DiscussionOpinionSave(DiscussionOpinionSaveReq) returns(DiscussionOpinionSaveResp); | ||
| 51 | + rpc DiscussionOpinionDelete(DiscussionOpinionDeleteReq) returns(DiscussionOpinionDeleteResp); | ||
| 52 | + rpc DiscussionOpinionUpdate(DiscussionOpinionUpdateReq) returns(DiscussionOpinionUpdateResp); | ||
| 53 | + rpc DiscussionOpinionSearch(DiscussionOpinionSearchReq) returns(DiscussionOpinionSearchResp); | ||
| 54 | +} |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 6 | + "gorm.io/gorm" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +// Discussion 圆桌讨论表 | ||
| 11 | +type Discussion struct { | ||
| 12 | + Id int64 // 唯一标识 | ||
| 13 | + Title string `json:"title"` // 标题(不超过30个字符) | ||
| 14 | + Content string `json:"content"` // 内容(不超过500个字符) | ||
| 15 | + Images []domain.Image `json:"images"` // 图片(不超过5张) | ||
| 16 | + Widget *domain.Widget `json:"widget"` // 小组件 | ||
| 17 | + ProviderId int64 `json:"providerId"` // 发起者ID | ||
| 18 | + ParticipantIds []int64 `json:"participantIds"` // 参与者ID | ||
| 19 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 20 | + State int `json:"state"` // 状态(1进行中、2搁置、3中止、4结案) | ||
| 21 | + CreatedAt int64 `json:",omitempty"` | ||
| 22 | + UpdatedAt int64 `json:",omitempty"` | ||
| 23 | + DeletedAt int64 `json:",omitempty"` | ||
| 24 | + Version int `json:",omitempty"` | ||
| 25 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func (m *Discussion) TableName() string { | ||
| 29 | + return "discussion" | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (m *Discussion) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 33 | + // m.CreatedAt = time.Now().Unix() | ||
| 34 | + // m.UpdatedAt = time.Now().Unix() | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (m *Discussion) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 39 | + // m.UpdatedAt = time.Now().Unix() | ||
| 40 | + return | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +func (m *Discussion) CacheKeyFunc() string { | ||
| 44 | + if m.Id == 0 { | ||
| 45 | + return "" | ||
| 46 | + } | ||
| 47 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +func (m *Discussion) CacheKeyFuncByObject(obj interface{}) string { | ||
| 51 | + if v, ok := obj.(*Discussion); ok { | ||
| 52 | + return v.CacheKeyFunc() | ||
| 53 | + } | ||
| 54 | + return "" | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +func (m *Discussion) CachePrimaryKeyFunc() string { | ||
| 58 | + if len("") == 0 { | ||
| 59 | + return "" | ||
| 60 | + } | ||
| 61 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 62 | +} |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 6 | + "gorm.io/gorm" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +// DiscussionAccept 圆桌讨论采纳表 | ||
| 11 | +type DiscussionAccept struct { | ||
| 12 | + Id int64 // 唯一标识 | ||
| 13 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 14 | + DiscussionId int64 `json:"discussionId"` // 讨论ID | ||
| 15 | + ProviderId int64 `json:"providerId"` // 发起人ID | ||
| 16 | + DoIds []int64 `json:"DoIds"` // 意见采纳-用户观点 | ||
| 17 | + OpinionId int64 `json:"opinionId"` // 价值判定-选择观点 | ||
| 18 | + SubjectiveTitle string `json:"subjectiveTitle"` // 主观认定-标题 | ||
| 19 | + SubjectiveDesc string `json:"subjectiveDesc"` // 主观认定-内容 | ||
| 20 | + CreatedAt int64 `json:",omitempty"` | ||
| 21 | + UpdatedAt int64 `json:",omitempty"` | ||
| 22 | + DeletedAt int64 `json:",omitempty"` | ||
| 23 | + Version int `json:",omitempty"` | ||
| 24 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func (m *DiscussionAccept) TableName() string { | ||
| 28 | + return "discussion_accept" | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +func (m *DiscussionAccept) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 32 | + // m.CreatedAt = time.Now().Unix() | ||
| 33 | + // m.UpdatedAt = time.Now().Unix() | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +func (m *DiscussionAccept) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 38 | + // m.UpdatedAt = time.Now().Unix() | ||
| 39 | + return | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +func (m *DiscussionAccept) CacheKeyFunc() string { | ||
| 43 | + if m.Id == 0 { | ||
| 44 | + return "" | ||
| 45 | + } | ||
| 46 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +func (m *DiscussionAccept) CacheKeyFuncByObject(obj interface{}) string { | ||
| 50 | + if v, ok := obj.(*DiscussionAccept); ok { | ||
| 51 | + return v.CacheKeyFunc() | ||
| 52 | + } | ||
| 53 | + return "" | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +func (m *DiscussionAccept) CachePrimaryKeyFunc() string { | ||
| 57 | + if len("") == 0 { | ||
| 58 | + return "" | ||
| 59 | + } | ||
| 60 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 61 | +} |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 6 | + "gorm.io/gorm" | ||
| 7 | + "gorm.io/plugin/soft_delete" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +// DiscussionOpinion 圆桌讨论观点表 | ||
| 11 | +type DiscussionOpinion struct { | ||
| 12 | + Id int64 // 唯一标识 | ||
| 13 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 14 | + DiscussionId int64 `json:"discussionId"` // 讨论ID | ||
| 15 | + ProviderId int64 `json:"providerId"` // 用户ID | ||
| 16 | + OpinionId int64 `json:"opinionId"` // 选项ID | ||
| 17 | + OpinionDesc string `json:"opinionDesc"` // 选项描述 | ||
| 18 | + Reason string `json:"reason"` // 理由 | ||
| 19 | + Show int `json:"show"` // 显示状态(1显示、0不显示) | ||
| 20 | + AcceptUserId int64 `json:"acceptUserId"` // 采纳人ID(最终结案的时候唯一) | ||
| 21 | + CreatedAt int64 `json:",omitempty"` | ||
| 22 | + UpdatedAt int64 `json:",omitempty"` | ||
| 23 | + DeletedAt int64 `json:",omitempty"` | ||
| 24 | + Version int `json:",omitempty"` | ||
| 25 | + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func (m *DiscussionOpinion) TableName() string { | ||
| 29 | + return "discussion_opinion" | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (m *DiscussionOpinion) BeforeCreate(tx *gorm.DB) (err error) { | ||
| 33 | + // m.CreatedAt = time.Now().Unix() | ||
| 34 | + // m.UpdatedAt = time.Now().Unix() | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (m *DiscussionOpinion) BeforeUpdate(tx *gorm.DB) (err error) { | ||
| 39 | + // m.UpdatedAt = time.Now().Unix() | ||
| 40 | + return | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +func (m *DiscussionOpinion) CacheKeyFunc() string { | ||
| 44 | + if m.Id == 0 { | ||
| 45 | + return "" | ||
| 46 | + } | ||
| 47 | + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id) | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +func (m *DiscussionOpinion) CacheKeyFuncByObject(obj interface{}) string { | ||
| 51 | + if v, ok := obj.(*DiscussionOpinion); ok { | ||
| 52 | + return v.CacheKeyFunc() | ||
| 53 | + } | ||
| 54 | + return "" | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +func (m *DiscussionOpinion) CachePrimaryKeyFunc() string { | ||
| 58 | + if len("") == 0 { | ||
| 59 | + return "" | ||
| 60 | + } | ||
| 61 | + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") | ||
| 62 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type DiscussionAcceptRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *DiscussionAcceptRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionAccept) (*domain.DiscussionAccept, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.DiscussionAccept{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *DiscussionAcceptRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionAccept) (*domain.DiscussionAccept, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.DiscussionAccept | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *DiscussionAcceptRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.DiscussionAccept) (*domain.DiscussionAccept, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.DiscussionAccept | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *DiscussionAcceptRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionAccept) (*domain.DiscussionAccept, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.DiscussionAccept{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *DiscussionAcceptRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.DiscussionAccept, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.DiscussionAccept) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.DiscussionAccept) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *DiscussionAcceptRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.DiscussionAccept, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.DiscussionAccept | ||
| 118 | + dms = make([]*domain.DiscussionAccept, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("id desc") | ||
| 123 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 124 | + return dms, tx.Error | ||
| 125 | + } | ||
| 126 | + return dms, nil | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 130 | + return 0, nil, err | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + for _, item := range ms { | ||
| 134 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 135 | + return 0, dms, err | ||
| 136 | + } else { | ||
| 137 | + dms = append(dms, dm) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return total, dms, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +func (repository *DiscussionAcceptRepository) ModelToDomainModel(from *models.DiscussionAccept) (*domain.DiscussionAccept, error) { | ||
| 144 | + to := &domain.DiscussionAccept{} | ||
| 145 | + err := copier.Copy(to, from) | ||
| 146 | + return to, err | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repository *DiscussionAcceptRepository) DomainModelToModel(from *domain.DiscussionAccept) (*models.DiscussionAccept, error) { | ||
| 150 | + to := &models.DiscussionAccept{} | ||
| 151 | + err := copier.Copy(to, from) | ||
| 152 | + return to, err | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +func NewDiscussionAcceptRepository(cache *cache.CachedRepository) domain.DiscussionAcceptRepository { | ||
| 156 | + return &DiscussionAcceptRepository{CachedRepository: cache} | ||
| 157 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type DiscussionOpinionRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *DiscussionOpinionRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionOpinion) (*domain.DiscussionOpinion, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.DiscussionOpinion{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *DiscussionOpinionRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionOpinion) (*domain.DiscussionOpinion, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.DiscussionOpinion | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *DiscussionOpinionRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.DiscussionOpinion) (*domain.DiscussionOpinion, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.DiscussionOpinion | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *DiscussionOpinionRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.DiscussionOpinion) (*domain.DiscussionOpinion, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.DiscussionOpinion{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *DiscussionOpinionRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.DiscussionOpinion, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.DiscussionOpinion) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.DiscussionOpinion) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *DiscussionOpinionRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.DiscussionOpinion, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.DiscussionOpinion | ||
| 118 | + dms = make([]*domain.DiscussionOpinion, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("id desc") | ||
| 123 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 124 | + return dms, tx.Error | ||
| 125 | + } | ||
| 126 | + return dms, nil | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 130 | + return 0, nil, err | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + for _, item := range ms { | ||
| 134 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 135 | + return 0, dms, err | ||
| 136 | + } else { | ||
| 137 | + dms = append(dms, dm) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return total, dms, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +func (repository *DiscussionOpinionRepository) ModelToDomainModel(from *models.DiscussionOpinion) (*domain.DiscussionOpinion, error) { | ||
| 144 | + to := &domain.DiscussionOpinion{} | ||
| 145 | + err := copier.Copy(to, from) | ||
| 146 | + return to, err | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repository *DiscussionOpinionRepository) DomainModelToModel(from *domain.DiscussionOpinion) (*models.DiscussionOpinion, error) { | ||
| 150 | + to := &models.DiscussionOpinion{} | ||
| 151 | + err := copier.Copy(to, from) | ||
| 152 | + return to, err | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +func NewDiscussionOpinionRepository(cache *cache.CachedRepository) domain.DiscussionOpinionRepository { | ||
| 156 | + return &DiscussionOpinionRepository{CachedRepository: cache} | ||
| 157 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "github.com/jinzhu/copier" | ||
| 6 | + "github.com/pkg/errors" | ||
| 7 | + "github.com/tiptok/gocomm/pkg/cache" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
| 11 | + "gorm.io/gorm" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +type DiscussionRepository struct { | ||
| 15 | + *cache.CachedRepository | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (repository *DiscussionRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.Discussion) (*domain.Discussion, error) { | ||
| 19 | + var ( | ||
| 20 | + err error | ||
| 21 | + m = &models.Discussion{} | ||
| 22 | + tx = conn.DB() | ||
| 23 | + ) | ||
| 24 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 25 | + return nil, err | ||
| 26 | + } | ||
| 27 | + if tx = tx.Model(m).Save(m); tx.Error != nil { | ||
| 28 | + return nil, tx.Error | ||
| 29 | + } | ||
| 30 | + dm.Id = m.Id | ||
| 31 | + return repository.ModelToDomainModel(m) | ||
| 32 | + | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (repository *DiscussionRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.Discussion) (*domain.Discussion, error) { | ||
| 36 | + var ( | ||
| 37 | + err error | ||
| 38 | + m *models.Discussion | ||
| 39 | + tx = conn.DB() | ||
| 40 | + ) | ||
| 41 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + queryFunc := func() (interface{}, error) { | ||
| 45 | + tx = tx.Model(m).Updates(m) | ||
| 46 | + return nil, tx.Error | ||
| 47 | + } | ||
| 48 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 49 | + return nil, err | ||
| 50 | + } | ||
| 51 | + return repository.ModelToDomainModel(m) | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repository *DiscussionRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.Discussion) (*domain.Discussion, error) { | ||
| 55 | + var ( | ||
| 56 | + err error | ||
| 57 | + m *models.Discussion | ||
| 58 | + tx = transaction.DB() | ||
| 59 | + ) | ||
| 60 | + if m, err = repository.DomainModelToModel(dm); err != nil { | ||
| 61 | + return nil, err | ||
| 62 | + } | ||
| 63 | + oldVersion := dm.Version | ||
| 64 | + m.Version += 1 | ||
| 65 | + queryFunc := func() (interface{}, error) { | ||
| 66 | + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m) | ||
| 67 | + if tx.RowsAffected == 0 { | ||
| 68 | + return nil, domain.ErrUpdateFail | ||
| 69 | + } | ||
| 70 | + return nil, tx.Error | ||
| 71 | + } | ||
| 72 | + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 73 | + return nil, err | ||
| 74 | + } | ||
| 75 | + return repository.ModelToDomainModel(m) | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +func (repository *DiscussionRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.Discussion) (*domain.Discussion, error) { | ||
| 79 | + var ( | ||
| 80 | + tx = conn.DB() | ||
| 81 | + m = &models.Discussion{Id: dm.Identify().(int64)} | ||
| 82 | + ) | ||
| 83 | + queryFunc := func() (interface{}, error) { | ||
| 84 | + tx = tx.Where("id = ?", m.Id).Delete(m) | ||
| 85 | + return m, tx.Error | ||
| 86 | + } | ||
| 87 | + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | ||
| 88 | + return dm, err | ||
| 89 | + } | ||
| 90 | + return repository.ModelToDomainModel(m) | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repository *DiscussionRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.Discussion, error) { | ||
| 94 | + var ( | ||
| 95 | + err error | ||
| 96 | + tx = conn.DB() | ||
| 97 | + m = new(models.Discussion) | ||
| 98 | + ) | ||
| 99 | + queryFunc := func() (interface{}, error) { | ||
| 100 | + tx = tx.Model(m).Where("id = ?", id).First(m) | ||
| 101 | + if errors.Is(tx.Error, gorm.ErrRecordNotFound) { | ||
| 102 | + return nil, domain.ErrNotFound | ||
| 103 | + } | ||
| 104 | + return m, tx.Error | ||
| 105 | + } | ||
| 106 | + cacheModel := new(models.Discussion) | ||
| 107 | + cacheModel.Id = id | ||
| 108 | + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil { | ||
| 109 | + return nil, err | ||
| 110 | + } | ||
| 111 | + return repository.ModelToDomainModel(m) | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +func (repository *DiscussionRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.Discussion, error) { | ||
| 115 | + var ( | ||
| 116 | + tx = conn.DB() | ||
| 117 | + ms []*models.Discussion | ||
| 118 | + dms = make([]*domain.Discussion, 0) | ||
| 119 | + total int64 | ||
| 120 | + ) | ||
| 121 | + queryFunc := func() (interface{}, error) { | ||
| 122 | + tx = tx.Model(&ms).Order("id desc") | ||
| 123 | + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
| 124 | + return dms, tx.Error | ||
| 125 | + } | ||
| 126 | + return dms, nil | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + if _, err := repository.Query(queryFunc); err != nil { | ||
| 130 | + return 0, nil, err | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + for _, item := range ms { | ||
| 134 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
| 135 | + return 0, dms, err | ||
| 136 | + } else { | ||
| 137 | + dms = append(dms, dm) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return total, dms, nil | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +func (repository *DiscussionRepository) ModelToDomainModel(from *models.Discussion) (*domain.Discussion, error) { | ||
| 144 | + to := &domain.Discussion{} | ||
| 145 | + err := copier.Copy(to, from) | ||
| 146 | + return to, err | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repository *DiscussionRepository) DomainModelToModel(from *domain.Discussion) (*models.Discussion, error) { | ||
| 150 | + to := &models.Discussion{} | ||
| 151 | + err := copier.Copy(to, from) | ||
| 152 | + return to, err | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +func NewDiscussionRepository(cache *cache.CachedRepository) domain.DiscussionRepository { | ||
| 156 | + return &DiscussionRepository{CachedRepository: cache} | ||
| 157 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type Discussion struct { | ||
| 9 | + Id int64 // 唯一标识 | ||
| 10 | + Title string `json:"title"` // 标题(不超过30个字符) | ||
| 11 | + Content string `json:"content"` // 内容(不超过500个字符) | ||
| 12 | + Images []Image `json:"images"` // 图片(不超过5张) | ||
| 13 | + Widget Widget `json:"widget"` // 小组件 | ||
| 14 | + ProviderId int64 `json:"providerId"` // 发起者ID | ||
| 15 | + ParticipantIds []int64 `json:"participantIds"` // 参与者ID | ||
| 16 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 17 | + State int `json:"state"` // 状态(1进行中、2搁置、3中止、4结案) | ||
| 18 | + CreatedAt int64 `json:",omitempty"` | ||
| 19 | + UpdatedAt int64 `json:",omitempty"` | ||
| 20 | + DeletedAt int64 `json:",omitempty"` | ||
| 21 | + Version int `json:",omitempty"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +type DiscussionRepository interface { | ||
| 25 | + Insert(ctx context.Context, conn transaction.Conn, dm *Discussion) (*Discussion, error) | ||
| 26 | + Update(ctx context.Context, conn transaction.Conn, dm *Discussion) (*Discussion, error) | ||
| 27 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *Discussion) (*Discussion, error) | ||
| 28 | + Delete(ctx context.Context, conn transaction.Conn, dm *Discussion) (*Discussion, error) | ||
| 29 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Discussion, error) | ||
| 30 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*Discussion, error) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (m *Discussion) Identify() interface{} { | ||
| 34 | + if m.Id == 0 { | ||
| 35 | + return nil | ||
| 36 | + } | ||
| 37 | + return m.Id | ||
| 38 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type DiscussionAccept struct { | ||
| 9 | + Id int64 // 唯一标识 | ||
| 10 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 11 | + DiscussionId int64 `json:"discussionId"` // 讨论ID | ||
| 12 | + ProviderId int64 `json:"providerId"` // 发起人ID | ||
| 13 | + DoIds []int64 `json:"DoIds"` // 意见采纳-用户观点 | ||
| 14 | + OpinionId int64 `json:"opinionId"` // 价值判定-选择观点 | ||
| 15 | + SubjectiveTitle string `json:"subjectiveTitle"` // 主观认定-标题 | ||
| 16 | + SubjectiveDesc string `json:"subjectiveDesc"` // 主观认定-内容 | ||
| 17 | + CreatedAt int64 `json:",omitempty"` | ||
| 18 | + UpdatedAt int64 `json:",omitempty"` | ||
| 19 | + DeletedAt int64 `json:",omitempty"` | ||
| 20 | + Version int `json:",omitempty"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +type DiscussionAcceptRepository interface { | ||
| 24 | + Insert(ctx context.Context, conn transaction.Conn, dm *DiscussionAccept) (*DiscussionAccept, error) | ||
| 25 | + Update(ctx context.Context, conn transaction.Conn, dm *DiscussionAccept) (*DiscussionAccept, error) | ||
| 26 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *DiscussionAccept) (*DiscussionAccept, error) | ||
| 27 | + Delete(ctx context.Context, conn transaction.Conn, dm *DiscussionAccept) (*DiscussionAccept, error) | ||
| 28 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*DiscussionAccept, error) | ||
| 29 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*DiscussionAccept, error) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +func (m *DiscussionAccept) Identify() interface{} { | ||
| 33 | + if m.Id == 0 { | ||
| 34 | + return nil | ||
| 35 | + } | ||
| 36 | + return m.Id | ||
| 37 | +} |
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type DiscussionOpinion struct { | ||
| 9 | + Id int64 // 唯一标识 | ||
| 10 | + ArticleId int64 `json:"articleId"` // 文章ID | ||
| 11 | + DiscussionId int64 `json:"discussionId"` // 讨论ID | ||
| 12 | + ProviderId int64 `json:"providerId"` // 用户ID | ||
| 13 | + OpinionId int64 `json:"opinionId"` // 选项ID | ||
| 14 | + OpinionDesc string `json:"opinionDesc"` // 选项描述 | ||
| 15 | + Reason string `json:"reason"` // 理由 | ||
| 16 | + Show int `json:"show"` // 显示状态(1显示、0不显示) | ||
| 17 | + AcceptUserId int64 `json:"acceptUserId"` // 采纳人ID(最终结案的时候唯一) | ||
| 18 | + CreatedAt int64 `json:",omitempty"` | ||
| 19 | + UpdatedAt int64 `json:",omitempty"` | ||
| 20 | + DeletedAt int64 `json:",omitempty"` | ||
| 21 | + Version int `json:",omitempty"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +type DiscussionOpinionRepository interface { | ||
| 25 | + Insert(ctx context.Context, conn transaction.Conn, dm *DiscussionOpinion) (*DiscussionOpinion, error) | ||
| 26 | + Update(ctx context.Context, conn transaction.Conn, dm *DiscussionOpinion) (*DiscussionOpinion, error) | ||
| 27 | + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *DiscussionOpinion) (*DiscussionOpinion, error) | ||
| 28 | + Delete(ctx context.Context, conn transaction.Conn, dm *DiscussionOpinion) (*DiscussionOpinion, error) | ||
| 29 | + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*DiscussionOpinion, error) | ||
| 30 | + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*DiscussionOpinion, error) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func (m *DiscussionOpinion) Identify() interface{} { | ||
| 34 | + if m.Id == 0 { | ||
| 35 | + return nil | ||
| 36 | + } | ||
| 37 | + return m.Id | ||
| 38 | +} |
| @@ -14,6 +14,20 @@ type Location struct { | @@ -14,6 +14,20 @@ type Location struct { | ||
| 14 | Descript string `json:"descript"` //地点描述 | 14 | Descript string `json:"descript"` //地点描述 |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | +// Widget 小组件 | ||
| 18 | +type Widget struct { | ||
| 19 | + Id int64 `json:"id"` // ID | ||
| 20 | + Type int `json:"type"` // 类型(1投票、2PK) | ||
| 21 | + Title string `json:"title"` // 标题(不超过15个字) | ||
| 22 | + Opinions []Opinion `json:"opinions"` // 选项 | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +// Opinion 观点选项 | ||
| 26 | +type Opinion struct { | ||
| 27 | + Id int64 `json:"id"` // ID | ||
| 28 | + Desc string `json:"desc"` // 描述(不超过10个字) | ||
| 29 | +} | ||
| 30 | + | ||
| 17 | type UserSimple struct { | 31 | type UserSimple struct { |
| 18 | Id int64 // 人员id | 32 | Id int64 // 人员id |
| 19 | Name string // 人员的名字 | 33 | Name string // 人员的名字 |
-
请 注册 或 登录 后发表评论