Files
quyun/backend_v1/app/services/media.go
Rogee 0e4af79b53
Some checks failed
build quyun / Build (push) Failing after 1m25s
feat: phone validation
2025-12-20 11:47:45 +08:00

108 lines
2.5 KiB
Go

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.MediumQuery.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.Medium, error) {
if len(ids) == 0 {
return []*models.Medium{}, nil
}
tbl, query := models.MediumQuery.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.Medium, error) {
tbl, query := models.MediumQuery.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.MediumQuery.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.Medium, error) {
tbl, query := models.MediumQuery.QueryContext(ctx)
return query.Where(tbl.Metas.KeyEq("parent_hash", hash)).Find()
}
// FindByID
func (m *media) FindByID(ctx context.Context, id int64) (*models.Medium, error) {
tbl, query := models.MediumQuery.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.MediumQuery.QueryContext(ctx)
if len(conds) > 0 {
query = query.Where(conds...)
}
return query.Count()
}