package persistenceimport ("context""time". "github.com/Masterminds/squirrel""github.com/deluan/rest""github.com/navidrome/navidrome/model""github.com/pocketbase/dbx")type scrobbleRepository struct {sqlRepository}func fromTs(_ string, value any) Sqlizer {return GtOrEq{"scrobbles.submission_time": value}}func toTs(_ string, value any) Sqlizer {return LtOrEq{"scrobbles.submission_time": value}}func (r *scrobbleRepository) baseQuery(ctx context.Context, options ...model.QueryOptions) SelectBuilder {user := loggedUser(ctx)return r.newSelect(ctx, options...).Columns("id", "media_file_id", "submission_time").Where(Eq{"scrobbles.user_id": user.ID})}func NewScrobbleRepository(db dbx.Builder) model.ScrobbleRepository {r := &scrobbleRepository{}r.db = dbr.tableName = "scrobbles"r.registerModel(&model.Scrobble{}, map[string]filterFunc{"from": fromTs,"to": toTs,})r.setSortMappings(map[string]string{"submission_time": "submission_time",})return r}func (r *scrobbleRepository) RecordScrobble(ctx context.Context, mediaFileID string, submissionTime time.Time) error {userID := loggedUser(ctx).IDvalues := map[string]any{"media_file_id": mediaFileID,"user_id": userID,"submission_time": submissionTime.Unix(),}insert := Insert(r.tableName).SetMap(values)_, err := r.executeSQL(ctx, insert)return err}func (r *scrobbleRepository) CountAll(ctx context.Context, options ...model.QueryOptions) (int64, error) {return r.count(ctx, r.baseQuery(ctx), options...)}func (r *scrobbleRepository) Count(ctx context.Context, options ...rest.QueryOptions) (int64, error) {return r.CountAll(ctx, r.parseRestOptions(ctx, options...))}func (r *scrobbleRepository) Get(ctx context.Context, id string) (*model.Scrobble, error) {sel := r.baseQuery(ctx).Where(Eq{"id": id})var res model.Scrobbleerr := r.queryOne(ctx, sel, &res)return &res, err}func (r *scrobbleRepository) GetAll(ctx context.Context, options ...model.QueryOptions) (model.Scrobbles, error) {sel := r.baseQuery(ctx, options...)var scrobbles model.Scrobbleserr := r.queryAll(ctx, sel, &scrobbles)return scrobbles, err}func (r *scrobbleRepository) Read(ctx context.Context, id string) (*model.Scrobble, error) {return r.Get(ctx, id)}func (r *scrobbleRepository) ReadAll(ctx context.Context, options ...rest.QueryOptions) ([]model.Scrobble, error) {return r.GetAll(ctx, r.parseRestOptions(ctx, options...))}var _ model.ScrobbleRepository = (*scrobbleRepository)(nil)var _ rest.Repository[model.Scrobble] = (*scrobbleRepository)(nil)