You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sonic/service/impl/meta.go

66 lines
1.6 KiB
Go

package impl
import (
"context"
"github.com/go-sonic/sonic/dal"
"github.com/go-sonic/sonic/model/dto"
"github.com/go-sonic/sonic/model/entity"
"github.com/go-sonic/sonic/service"
)
type metaServiceImpl struct{}
func NewMetaService() service.MetaService {
return &metaServiceImpl{}
}
func (m *metaServiceImpl) GetPostsMeta(ctx context.Context, postIDs []int32) (map[int32][]*entity.Meta, error) {
metaDAL := dal.GetQueryByCtx(ctx).Meta
metas, err := metaDAL.WithContext(ctx).Where(metaDAL.PostID.In(postIDs...)).Find()
if err != nil {
return nil, WrapDBErr(err)
}
result := make(map[int32][]*entity.Meta, 0)
for _, meta := range metas {
postMetas, ok := result[meta.PostID]
if !ok {
postMetas = make([]*entity.Meta, 0)
}
postMetas = append(postMetas, meta)
result[meta.PostID] = postMetas
}
return result, nil
}
func (m *metaServiceImpl) ConvertToMetaDTO(meta *entity.Meta) *dto.Meta {
if meta == nil {
return nil
}
metaDTO := &dto.Meta{
ID: meta.ID,
PostID: meta.PostID,
Key: meta.MetaKey,
Value: meta.MetaValue,
CreateTime: meta.CreateTime.UnixMilli(),
}
return metaDTO
}
func (m *metaServiceImpl) GetPostMeta(ctx context.Context, postID int32) ([]*entity.Meta, error) {
metaDAL := dal.GetQueryByCtx(ctx).Meta
metas, err := metaDAL.WithContext(ctx).Where(metaDAL.PostID.Eq(postID)).Find()
if err != nil {
return nil, WrapDBErr(err)
}
return metas, nil
}
func (m *metaServiceImpl) ConvertToMetaDTOs(metas []*entity.Meta) []*dto.Meta {
result := make([]*dto.Meta, len(metas))
for i, meta := range metas {
result[i] = m.ConvertToMetaDTO(meta)
}
return result
}