作者 郑周

1.系统消息模型

2.业务消息模型
  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: message_business/v1
  14 + group: message_business
  15 + jwt: JwtAuth
  16 +)
  17 +service Core {
  18 + @handler getMessageBusiness
  19 + post /message_business/:id (MessageBusinessGetRequest) returns (MessageBusinessGetResponse)
  20 + @handler saveMessageBusiness
  21 + post /message_business (MessageBusinessSaveRequest) returns (MessageBusinessSaveResponse)
  22 + @handler deleteMessageBusiness
  23 + delete /message_business/:id (MessageBusinessDeleteRequest) returns (MessageBusinessDeleteResponse)
  24 + @handler updateMessageBusiness
  25 + put /message_business/:id (MessageBusinessUpdateRequest) returns (MessageBusinessUpdateResponse)
  26 + @handler searchMessageBusiness
  27 + post /message_business/search (MessageBusinessSearchRequest) returns (MessageBusinessSearchResponse)
  28 +}
  29 +
  30 +type (
  31 + MessageBusinessGetRequest {
  32 + Id int64 `path:"id"`
  33 + }
  34 + MessageBusinessGetResponse struct{
  35 + MessageBusiness MessageBusinessItem `json:"message_business"`
  36 + }
  37 +
  38 + MessageBusinessSaveRequest struct{
  39 + MessageBusiness MessageBusinessItem `json:"message_business"`
  40 + }
  41 + MessageBusinessSaveResponse struct{}
  42 +
  43 + MessageBusinessDeleteRequest struct{
  44 + Id int64 `path:"id"`
  45 + }
  46 + MessageBusinessDeleteResponse struct{}
  47 +
  48 + MessageBusinessUpdateRequest struct{
  49 + Id int64 `path:"id"`
  50 + MessageBusiness MessageBusinessItem `json:"message_business"`
  51 + }
  52 + MessageBusinessUpdateResponse struct{}
  53 +
  54 + MessageBusinessSearchRequest struct{
  55 + Page int `json:"page"`
  56 + Size int `json:"size"`
  57 + }
  58 + MessageBusinessSearchResponse{
  59 + List []MessageBusinessItem `json:"list"`
  60 + Total int64 `json:"total"`
  61 + }
  62 + MessageBusinessItem 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: message_system/v1
  14 + group: message_system
  15 + jwt: JwtAuth
  16 +)
  17 +service Core {
  18 + @handler getMessageSystem
  19 + post /message_system/:id (MessageSystemGetRequest) returns (MessageSystemGetResponse)
  20 + @handler saveMessageSystem
  21 + post /message_system (MessageSystemSaveRequest) returns (MessageSystemSaveResponse)
  22 + @handler deleteMessageSystem
  23 + delete /message_system/:id (MessageSystemDeleteRequest) returns (MessageSystemDeleteResponse)
  24 + @handler updateMessageSystem
  25 + put /message_system/:id (MessageSystemUpdateRequest) returns (MessageSystemUpdateResponse)
  26 + @handler searchMessageSystem
  27 + post /message_system/search (MessageSystemSearchRequest) returns (MessageSystemSearchResponse)
  28 +}
  29 +
  30 +type (
  31 + MessageSystemGetRequest {
  32 + Id int64 `path:"id"`
  33 + }
  34 + MessageSystemGetResponse struct{
  35 + MessageSystem MessageSystemItem `json:"message_system"`
  36 + }
  37 +
  38 + MessageSystemSaveRequest struct{
  39 + MessageSystem MessageSystemItem `json:"message_system"`
  40 + }
  41 + MessageSystemSaveResponse struct{}
  42 +
  43 + MessageSystemDeleteRequest struct{
  44 + Id int64 `path:"id"`
  45 + }
  46 + MessageSystemDeleteResponse struct{}
  47 +
  48 + MessageSystemUpdateRequest struct{
  49 + Id int64 `path:"id"`
  50 + MessageSystem MessageSystemItem `json:"message_system"`
  51 + }
  52 + MessageSystemUpdateResponse struct{}
  53 +
  54 + MessageSystemSearchRequest struct{
  55 + Page int `json:"page"`
  56 + Size int `json:"size"`
  57 + }
  58 + MessageSystemSearchResponse{
  59 + List []MessageSystemItem `json:"list"`
  60 + Total int64 `json:"total"`
  61 + }
  62 + MessageSystemItem struct{
  63 +
  64 + }
  65 +)
  1 +
  2 +syntax = "proto3";
  3 +
  4 +option go_package ="./pb";
  5 +
  6 +package pb;
  7 +
  8 +message MessageBusinessGetReq {
  9 + int64 Id = 1;
  10 +}
  11 +message MessageBusinessGetResp{
  12 + MessageBusinessItem User = 1;
  13 +}
  14 +
  15 +message MessageBusinessSaveReq {
  16 +
  17 +}
  18 +message MessageBusinessSaveResp{
  19 +
  20 +}
  21 +
  22 +message MessageBusinessDeleteReq {
  23 + int64 Id = 1;
  24 +}
  25 +message MessageBusinessDeleteResp{
  26 +
  27 +}
  28 +
  29 +message MessageBusinessUpdateReq {
  30 + int64 Id = 1;
  31 +}
  32 +message MessageBusinessUpdateResp{
  33 +
  34 +}
  35 +
  36 +message MessageBusinessSearchReq {
  37 + int64 PageNumber = 1;
  38 + int64 PageSize = 2;
  39 +}
  40 +message MessageBusinessSearchResp{
  41 + repeated MessageBusinessItem List =1;
  42 + int64 Total =2;
  43 +}
  44 +message MessageBusinessItem {
  45 +
  46 +}
  47 +
  48 +service MessageBusinessService {
  49 + rpc MessageBusinessGet(MessageBusinessGetReq) returns(MessageBusinessGetResp);
  50 + rpc MessageBusinessSave(MessageBusinessSaveReq) returns(MessageBusinessSaveResp);
  51 + rpc MessageBusinessDelete(MessageBusinessDeleteReq) returns(MessageBusinessDeleteResp);
  52 + rpc MessageBusinessUpdate(MessageBusinessUpdateReq) returns(MessageBusinessUpdateResp);
  53 + rpc MessageBusinessSearch(MessageBusinessSearchReq) returns(MessageBusinessSearchResp);
  54 +}
  1 +
  2 +syntax = "proto3";
  3 +
  4 +option go_package ="./pb";
  5 +
  6 +package pb;
  7 +
  8 +message MessageSystemGetReq {
  9 + int64 Id = 1;
  10 +}
  11 +message MessageSystemGetResp{
  12 + MessageSystemItem User = 1;
  13 +}
  14 +
  15 +message MessageSystemSaveReq {
  16 +
  17 +}
  18 +message MessageSystemSaveResp{
  19 +
  20 +}
  21 +
  22 +message MessageSystemDeleteReq {
  23 + int64 Id = 1;
  24 +}
  25 +message MessageSystemDeleteResp{
  26 +
  27 +}
  28 +
  29 +message MessageSystemUpdateReq {
  30 + int64 Id = 1;
  31 +}
  32 +message MessageSystemUpdateResp{
  33 +
  34 +}
  35 +
  36 +message MessageSystemSearchReq {
  37 + int64 PageNumber = 1;
  38 + int64 PageSize = 2;
  39 +}
  40 +message MessageSystemSearchResp{
  41 + repeated MessageSystemItem List =1;
  42 + int64 Total =2;
  43 +}
  44 +message MessageSystemItem {
  45 +
  46 +}
  47 +
  48 +service MessageSystemService {
  49 + rpc MessageSystemGet(MessageSystemGetReq) returns(MessageSystemGetResp);
  50 + rpc MessageSystemSave(MessageSystemSaveReq) returns(MessageSystemSaveResp);
  51 + rpc MessageSystemDelete(MessageSystemDeleteReq) returns(MessageSystemDeleteResp);
  52 + rpc MessageSystemUpdate(MessageSystemUpdateReq) returns(MessageSystemUpdateResp);
  53 + rpc MessageSystemSearch(MessageSystemSearchReq) returns(MessageSystemSearchResp);
  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 +type MessageBusiness struct {
  11 + Id int64 // 唯一标识
  12 + Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
  13 + OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
  14 + TriggerId int64 `json:"triggerId"` // 触发者ID
  15 + RecipientId int64 `json:"recipientId"` // 接收者ID
  16 + ArticleId int64 `json:"articleId"` // 文章ID
  17 + CommentId int64 `json:"commentId"` // 评论ID
  18 + DiscussionId int64 `json:"discussionId"` // 圆桌ID
  19 + DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
  20 + Content string `json:"content"` // 消息内容
  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 *MessageBusiness) TableName() string {
  29 + return "message_business"
  30 +}
  31 +
  32 +func (m *MessageBusiness) 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 *MessageBusiness) BeforeUpdate(tx *gorm.DB) (err error) {
  39 + // m.UpdatedAt = time.Now().Unix()
  40 + return
  41 +}
  42 +
  43 +func (m *MessageBusiness) 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 *MessageBusiness) CacheKeyFuncByObject(obj interface{}) string {
  51 + if v, ok := obj.(*MessageBusiness); ok {
  52 + return v.CacheKeyFunc()
  53 + }
  54 + return ""
  55 +}
  56 +
  57 +func (m *MessageBusiness) 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 +type MessageSystem struct {
  11 + Id int64 // 唯一标识
  12 + RecipientId int64 `json:"recipientId"` // 接收者ID
  13 + Type int `json:"type"` // 系统分类(0待定、1业务正常通知、2业务异常通知)
  14 + Title string `json:"title"` // 标题
  15 + Content string `json:"content"` // 内容
  16 + CreatedAt int64 `json:",omitempty"`
  17 + UpdatedAt int64 `json:",omitempty"`
  18 + DeletedAt int64 `json:",omitempty"`
  19 + Version int `json:",omitempty"`
  20 + IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"`
  21 +}
  22 +
  23 +func (m *MessageSystem) TableName() string {
  24 + return "message_system"
  25 +}
  26 +
  27 +func (m *MessageSystem) BeforeCreate(tx *gorm.DB) (err error) {
  28 + // m.CreatedAt = time.Now().Unix()
  29 + // m.UpdatedAt = time.Now().Unix()
  30 + return
  31 +}
  32 +
  33 +func (m *MessageSystem) BeforeUpdate(tx *gorm.DB) (err error) {
  34 + // m.UpdatedAt = time.Now().Unix()
  35 + return
  36 +}
  37 +
  38 +func (m *MessageSystem) CacheKeyFunc() string {
  39 + if m.Id == 0 {
  40 + return ""
  41 + }
  42 + return fmt.Sprintf("%v:cache:%v:id:%v", domain.ProjectName, m.TableName(), m.Id)
  43 +}
  44 +
  45 +func (m *MessageSystem) CacheKeyFuncByObject(obj interface{}) string {
  46 + if v, ok := obj.(*MessageSystem); ok {
  47 + return v.CacheKeyFunc()
  48 + }
  49 + return ""
  50 +}
  51 +
  52 +func (m *MessageSystem) CachePrimaryKeyFunc() string {
  53 + if len("") == 0 {
  54 + return ""
  55 + }
  56 + return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key")
  57 +}
  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 + "gorm.io/gorm"
  9 +)
  10 +
  11 +type MessageBusinessRepository struct {
  12 + *cache.CachedRepository
  13 +}
  14 +
  15 +func (repository *MessageBusinessRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.MessageBusiness) (*domain.MessageBusiness, error) {
  16 + var (
  17 + err error
  18 + m = &models.MessageBusiness{}
  19 + tx = conn.DB()
  20 + )
  21 + if m, err = repository.DomainModelToModel(dm); err != nil {
  22 + return nil, err
  23 + }
  24 + if tx = tx.Model(m).Save(m); tx.Error != nil {
  25 + return nil, tx.Error
  26 + }
  27 + dm.Id = m.Id
  28 + return repository.ModelToDomainModel(m)
  29 +
  30 +}
  31 +
  32 +func (repository *MessageBusinessRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.MessageBusiness) (*domain.MessageBusiness, error) {
  33 + var (
  34 + err error
  35 + m *models.MessageBusiness
  36 + tx = conn.DB()
  37 + )
  38 + if m, err = repository.DomainModelToModel(dm); err != nil {
  39 + return nil, err
  40 + }
  41 + queryFunc := func() (interface{}, error) {
  42 + tx = tx.Model(m).Updates(m)
  43 + return nil, tx.Error
  44 + }
  45 + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  46 + return nil, err
  47 + }
  48 + return repository.ModelToDomainModel(m)
  49 +}
  50 +
  51 +func (repository *MessageBusinessRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.MessageBusiness) (*domain.MessageBusiness, error) {
  52 + var (
  53 + err error
  54 + m *models.MessageBusiness
  55 + tx = transaction.DB()
  56 + )
  57 + if m, err = repository.DomainModelToModel(dm); err != nil {
  58 + return nil, err
  59 + }
  60 + oldVersion := dm.Version
  61 + m.Version += 1
  62 + queryFunc := func() (interface{}, error) {
  63 + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m)
  64 + if tx.RowsAffected == 0 {
  65 + return nil, domain.ErrUpdateFail
  66 + }
  67 + return nil, tx.Error
  68 + }
  69 + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  70 + return nil, err
  71 + }
  72 + return repository.ModelToDomainModel(m)
  73 +}
  74 +
  75 +func (repository *MessageBusinessRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.MessageBusiness) (*domain.MessageBusiness, error) {
  76 + var (
  77 + tx = conn.DB()
  78 + m = &models.MessageBusiness{Id: dm.Identify().(int64)}
  79 + )
  80 + queryFunc := func() (interface{}, error) {
  81 + tx = tx.Where("id = ?", m.Id).Delete(m)
  82 + return m, tx.Error
  83 + }
  84 + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  85 + return dm, err
  86 + }
  87 + return repository.ModelToDomainModel(m)
  88 +}
  89 +
  90 +func (repository *MessageBusinessRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.MessageBusiness, error) {
  91 + var (
  92 + err error
  93 + tx = conn.DB()
  94 + m = new(models.MessageBusiness)
  95 + )
  96 + queryFunc := func() (interface{}, error) {
  97 + tx = tx.Model(m).Where("id = ?", id).First(m)
  98 + if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
  99 + return nil, domain.ErrNotFound
  100 + }
  101 + return m, tx.Error
  102 + }
  103 + cacheModel := new(models.MessageBusiness)
  104 + cacheModel.Id = id
  105 + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil {
  106 + return nil, err
  107 + }
  108 + return repository.ModelToDomainModel(m)
  109 +}
  110 +
  111 +func (repository *MessageBusinessRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.MessageBusiness, error) {
  112 + var (
  113 + tx = conn.DB()
  114 + ms []*models.MessageBusiness
  115 + dms = make([]*domain.MessageBusiness, 0)
  116 + total int64
  117 + )
  118 + queryFunc := func() (interface{}, error) {
  119 + tx = tx.Model(&ms).Order("id desc")
  120 + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
  121 + return dms, tx.Error
  122 + }
  123 + return dms, nil
  124 + }
  125 +
  126 + if _, err := repository.Query(queryFunc); err != nil {
  127 + return 0, nil, err
  128 + }
  129 +
  130 + for _, item := range ms {
  131 + if dm, err := repository.ModelToDomainModel(item); err != nil {
  132 + return 0, dms, err
  133 + } else {
  134 + dms = append(dms, dm)
  135 + }
  136 + }
  137 + return total, dms, nil
  138 +}
  139 +
  140 +func (repository *MessageBusinessRepository) ModelToDomainModel(from *models.MessageBusiness) (*domain.MessageBusiness, error) {
  141 + to := &domain.MessageBusiness{}
  142 + err := copier.Copy(to, from)
  143 + return to, err
  144 +}
  145 +
  146 +func (repository *MessageBusinessRepository) DomainModelToModel(from *domain.MessageBusiness) (*models.MessageBusiness, error) {
  147 + to := &models.MessageBusiness{}
  148 + err := copier.Copy(to, from)
  149 + return to, err
  150 +}
  151 +
  152 +func NewMessageBusinessRepository(cache *cache.CachedRepository) domain.MessageBusinessRepository {
  153 + return &MessageBusinessRepository{CachedRepository: cache}
  154 +}
  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 + "gorm.io/gorm"
  9 +)
  10 +
  11 +type MessageSystemRepository struct {
  12 + *cache.CachedRepository
  13 +}
  14 +
  15 +func (repository *MessageSystemRepository) Insert(ctx context.Context, conn transaction.Conn, dm *domain.MessageSystem) (*domain.MessageSystem, error) {
  16 + var (
  17 + err error
  18 + m = &models.MessageSystem{}
  19 + tx = conn.DB()
  20 + )
  21 + if m, err = repository.DomainModelToModel(dm); err != nil {
  22 + return nil, err
  23 + }
  24 + if tx = tx.Model(m).Save(m); tx.Error != nil {
  25 + return nil, tx.Error
  26 + }
  27 + dm.Id = m.Id
  28 + return repository.ModelToDomainModel(m)
  29 +
  30 +}
  31 +
  32 +func (repository *MessageSystemRepository) Update(ctx context.Context, conn transaction.Conn, dm *domain.MessageSystem) (*domain.MessageSystem, error) {
  33 + var (
  34 + err error
  35 + m *models.MessageSystem
  36 + tx = conn.DB()
  37 + )
  38 + if m, err = repository.DomainModelToModel(dm); err != nil {
  39 + return nil, err
  40 + }
  41 + queryFunc := func() (interface{}, error) {
  42 + tx = tx.Model(m).Updates(m)
  43 + return nil, tx.Error
  44 + }
  45 + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  46 + return nil, err
  47 + }
  48 + return repository.ModelToDomainModel(m)
  49 +}
  50 +
  51 +func (repository *MessageSystemRepository) UpdateWithVersion(ctx context.Context, transaction transaction.Conn, dm *domain.MessageSystem) (*domain.MessageSystem, error) {
  52 + var (
  53 + err error
  54 + m *models.MessageSystem
  55 + tx = transaction.DB()
  56 + )
  57 + if m, err = repository.DomainModelToModel(dm); err != nil {
  58 + return nil, err
  59 + }
  60 + oldVersion := dm.Version
  61 + m.Version += 1
  62 + queryFunc := func() (interface{}, error) {
  63 + tx = tx.Model(m).Select("*").Where("id = ?", m.Id).Where("version = ?", oldVersion).Updates(m)
  64 + if tx.RowsAffected == 0 {
  65 + return nil, domain.ErrUpdateFail
  66 + }
  67 + return nil, tx.Error
  68 + }
  69 + if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  70 + return nil, err
  71 + }
  72 + return repository.ModelToDomainModel(m)
  73 +}
  74 +
  75 +func (repository *MessageSystemRepository) Delete(ctx context.Context, conn transaction.Conn, dm *domain.MessageSystem) (*domain.MessageSystem, error) {
  76 + var (
  77 + tx = conn.DB()
  78 + m = &models.MessageSystem{Id: dm.Identify().(int64)}
  79 + )
  80 + queryFunc := func() (interface{}, error) {
  81 + tx = tx.Where("id = ?", m.Id).Delete(m)
  82 + return m, tx.Error
  83 + }
  84 + if _, err := repository.Query(queryFunc, m.CacheKeyFunc()); err != nil {
  85 + return dm, err
  86 + }
  87 + return repository.ModelToDomainModel(m)
  88 +}
  89 +
  90 +func (repository *MessageSystemRepository) FindOne(ctx context.Context, conn transaction.Conn, id int64) (*domain.MessageSystem, error) {
  91 + var (
  92 + err error
  93 + tx = conn.DB()
  94 + m = new(models.MessageSystem)
  95 + )
  96 + queryFunc := func() (interface{}, error) {
  97 + tx = tx.Model(m).Where("id = ?", id).First(m)
  98 + if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
  99 + return nil, domain.ErrNotFound
  100 + }
  101 + return m, tx.Error
  102 + }
  103 + cacheModel := new(models.MessageSystem)
  104 + cacheModel.Id = id
  105 + if err = repository.QueryCache(cacheModel.CacheKeyFunc, m, queryFunc); err != nil {
  106 + return nil, err
  107 + }
  108 + return repository.ModelToDomainModel(m)
  109 +}
  110 +
  111 +func (repository *MessageSystemRepository) Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*domain.MessageSystem, error) {
  112 + var (
  113 + tx = conn.DB()
  114 + ms []*models.MessageSystem
  115 + dms = make([]*domain.MessageSystem, 0)
  116 + total int64
  117 + )
  118 + queryFunc := func() (interface{}, error) {
  119 + tx = tx.Model(&ms).Order("id desc")
  120 + if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
  121 + return dms, tx.Error
  122 + }
  123 + return dms, nil
  124 + }
  125 +
  126 + if _, err := repository.Query(queryFunc); err != nil {
  127 + return 0, nil, err
  128 + }
  129 +
  130 + for _, item := range ms {
  131 + if dm, err := repository.ModelToDomainModel(item); err != nil {
  132 + return 0, dms, err
  133 + } else {
  134 + dms = append(dms, dm)
  135 + }
  136 + }
  137 + return total, dms, nil
  138 +}
  139 +
  140 +func (repository *MessageSystemRepository) ModelToDomainModel(from *models.MessageSystem) (*domain.MessageSystem, error) {
  141 + to := &domain.MessageSystem{}
  142 + err := copier.Copy(to, from)
  143 + return to, err
  144 +}
  145 +
  146 +func (repository *MessageSystemRepository) DomainModelToModel(from *domain.MessageSystem) (*models.MessageSystem, error) {
  147 + to := &models.MessageSystem{}
  148 + err := copier.Copy(to, from)
  149 + return to, err
  150 +}
  151 +
  152 +func NewMessageSystemRepository(cache *cache.CachedRepository) domain.MessageSystemRepository {
  153 + return &MessageSystemRepository{CachedRepository: cache}
  154 +}
  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 MessageBusiness struct {
  9 + Id int64 // 唯一标识
  10 + Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
  11 + OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
  12 + TriggerId int64 `json:"triggerId"` // 触发者ID
  13 + RecipientId int64 `json:"recipientId"` // 接收者ID
  14 + ArticleId int64 `json:"articleId"` // 文章ID
  15 + CommentId int64 `json:"commentId"` // 评论ID
  16 + DiscussionId int64 `json:"discussionId"` // 圆桌ID
  17 + DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
  18 + Content string `json:"content"` // 消息内容
  19 + CreatedAt int64 `json:",omitempty"`
  20 + UpdatedAt int64 `json:",omitempty"`
  21 + DeletedAt int64 `json:",omitempty"`
  22 + Version int `json:",omitempty"`
  23 +}
  24 +
  25 +type MessageBusinessRepository interface {
  26 + Insert(ctx context.Context, conn transaction.Conn, dm *MessageBusiness) (*MessageBusiness, error)
  27 + Update(ctx context.Context, conn transaction.Conn, dm *MessageBusiness) (*MessageBusiness, error)
  28 + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *MessageBusiness) (*MessageBusiness, error)
  29 + Delete(ctx context.Context, conn transaction.Conn, dm *MessageBusiness) (*MessageBusiness, error)
  30 + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*MessageBusiness, error)
  31 + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*MessageBusiness, error)
  32 +}
  33 +
  34 +func (m *MessageBusiness) Identify() interface{} {
  35 + if m.Id == 0 {
  36 + return nil
  37 + }
  38 + return m.Id
  39 +}
  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 MessageSystem struct {
  9 + Id int64 // 唯一标识
  10 + RecipientId int64 `json:"recipientId"` // 接收者ID
  11 + Type int `json:"type"` // 系统分类(0待定、1业务正常通知、2业务异常通知)
  12 + Title string `json:"title"` // 标题
  13 + Content string `json:"content"` // 内容
  14 + CreatedAt int64 `json:",omitempty"`
  15 + UpdatedAt int64 `json:",omitempty"`
  16 + DeletedAt int64 `json:",omitempty"`
  17 + Version int `json:",omitempty"`
  18 +}
  19 +
  20 +type MessageSystemRepository interface {
  21 + Insert(ctx context.Context, conn transaction.Conn, dm *MessageSystem) (*MessageSystem, error)
  22 + Update(ctx context.Context, conn transaction.Conn, dm *MessageSystem) (*MessageSystem, error)
  23 + UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *MessageSystem) (*MessageSystem, error)
  24 + Delete(ctx context.Context, conn transaction.Conn, dm *MessageSystem) (*MessageSystem, error)
  25 + FindOne(ctx context.Context, conn transaction.Conn, id int64) (*MessageSystem, error)
  26 + Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*MessageSystem, error)
  27 +}
  28 +
  29 +func (m *MessageSystem) Identify() interface{} {
  30 + if m.Id == 0 {
  31 + return nil
  32 + }
  33 + return m.Id
  34 +}