udpate
This commit is contained in:
107
backend_v1/app/services/media.go
Normal file
107
backend_v1/app/services/media.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"quyun/v2/app/requests"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/fields"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"go.ipao.vip/gen"
|
||||
)
|
||||
|
||||
// @provider
|
||||
type media struct{}
|
||||
|
||||
func (m *media) List(
|
||||
ctx context.Context,
|
||||
pagination *requests.Pagination,
|
||||
conds ...gen.Condition,
|
||||
) (*requests.Pager, error) {
|
||||
pagination.Format()
|
||||
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
|
||||
items, cnt, err := query.
|
||||
Where(conds...).
|
||||
Order(tbl.ID.Desc()).
|
||||
FindByPage(int(pagination.Offset()), int(pagination.Limit))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to list media items")
|
||||
}
|
||||
|
||||
return &requests.Pager{
|
||||
Items: items,
|
||||
Total: cnt,
|
||||
Pagination: *pagination,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetByIds
|
||||
func (m *media) GetByIds(ctx context.Context, ids []int64) ([]*models.Media, error) {
|
||||
if len(ids) == 0 {
|
||||
return []*models.Media{}, nil
|
||||
}
|
||||
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
|
||||
items, err := query.
|
||||
Where(tbl.ID.In(ids...)).
|
||||
Find()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get media items by ids")
|
||||
}
|
||||
|
||||
return items, nil
|
||||
}
|
||||
|
||||
// GetByHash
|
||||
func (m *media) GetByHash(ctx context.Context, hash string) (*models.Media, error) {
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
item, err := query.
|
||||
Where(tbl.Hash.Eq(hash)).
|
||||
First()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get media item by hash")
|
||||
}
|
||||
return item, nil
|
||||
}
|
||||
|
||||
// UpdateMetas
|
||||
func (m *media) UpdateMetas(ctx context.Context, id int64, metas fields.MediaMetas) error {
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
_, err := query.
|
||||
Where(tbl.ID.Eq(id)).
|
||||
Update(tbl.Metas, metas)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to update media metas for id: %d", id)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRelationMedias
|
||||
|
||||
func (m *media) GetRelations(ctx context.Context, hash string) ([]*models.Media, error) {
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
return query.Where(tbl.Metas.KeyEq("parent_hash", hash)).Find()
|
||||
}
|
||||
|
||||
// FindByID
|
||||
func (m *media) FindByID(ctx context.Context, id int64) (*models.Media, error) {
|
||||
tbl, query := models.MediaQuery.QueryContext(ctx)
|
||||
item, err := query.Where(tbl.ID.Eq(id)).First()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to find media by id: %d", id)
|
||||
}
|
||||
return item, nil
|
||||
}
|
||||
|
||||
// Count
|
||||
func (m *media) Count(ctx context.Context, conds ...gen.Condition) (int64, error) {
|
||||
_, query := models.MediaQuery.QueryContext(ctx)
|
||||
if len(conds) > 0 {
|
||||
query = query.Where(conds...)
|
||||
}
|
||||
return query.Count()
|
||||
}
|
||||
Reference in New Issue
Block a user