mirror of https://github.com/go-sonic/sonic.git
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.
66 lines
1.6 KiB
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
|
|
}
|