mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
Saved filters (#1474)
* Refactor list filter * Filter/criterion refactor * Rename option value to type * Remove None from options * Add saved filter button * Integrate default filters
This commit is contained in:
165
pkg/models/mocks/SavedFilterReaderWriter.go
Normal file
165
pkg/models/mocks/SavedFilterReaderWriter.go
Normal file
@@ -0,0 +1,165 @@
|
||||
// Code generated by mockery v0.0.0-dev. DO NOT EDIT.
|
||||
|
||||
package mocks
|
||||
|
||||
import (
|
||||
models "github.com/stashapp/stash/pkg/models"
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// SavedFilterReaderWriter is an autogenerated mock type for the SavedFilterReaderWriter type
|
||||
type SavedFilterReaderWriter struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// Create provides a mock function with given fields: obj
|
||||
func (_m *SavedFilterReaderWriter) Create(obj models.SavedFilter) (*models.SavedFilter, error) {
|
||||
ret := _m.Called(obj)
|
||||
|
||||
var r0 *models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(models.SavedFilter) *models.SavedFilter); ok {
|
||||
r0 = rf(obj)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(models.SavedFilter) error); ok {
|
||||
r1 = rf(obj)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Destroy provides a mock function with given fields: id
|
||||
func (_m *SavedFilterReaderWriter) Destroy(id int) error {
|
||||
ret := _m.Called(id)
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(int) error); ok {
|
||||
r0 = rf(id)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// Find provides a mock function with given fields: id
|
||||
func (_m *SavedFilterReaderWriter) Find(id int) (*models.SavedFilter, error) {
|
||||
ret := _m.Called(id)
|
||||
|
||||
var r0 *models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(int) *models.SavedFilter); ok {
|
||||
r0 = rf(id)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(int) error); ok {
|
||||
r1 = rf(id)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// FindByMode provides a mock function with given fields: mode
|
||||
func (_m *SavedFilterReaderWriter) FindByMode(mode models.FilterMode) ([]*models.SavedFilter, error) {
|
||||
ret := _m.Called(mode)
|
||||
|
||||
var r0 []*models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(models.FilterMode) []*models.SavedFilter); ok {
|
||||
r0 = rf(mode)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(models.FilterMode) error); ok {
|
||||
r1 = rf(mode)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// FindDefault provides a mock function with given fields: mode
|
||||
func (_m *SavedFilterReaderWriter) FindDefault(mode models.FilterMode) (*models.SavedFilter, error) {
|
||||
ret := _m.Called(mode)
|
||||
|
||||
var r0 *models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(models.FilterMode) *models.SavedFilter); ok {
|
||||
r0 = rf(mode)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(models.FilterMode) error); ok {
|
||||
r1 = rf(mode)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// SetDefault provides a mock function with given fields: obj
|
||||
func (_m *SavedFilterReaderWriter) SetDefault(obj models.SavedFilter) (*models.SavedFilter, error) {
|
||||
ret := _m.Called(obj)
|
||||
|
||||
var r0 *models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(models.SavedFilter) *models.SavedFilter); ok {
|
||||
r0 = rf(obj)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(models.SavedFilter) error); ok {
|
||||
r1 = rf(obj)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Update provides a mock function with given fields: obj
|
||||
func (_m *SavedFilterReaderWriter) Update(obj models.SavedFilter) (*models.SavedFilter, error) {
|
||||
ret := _m.Called(obj)
|
||||
|
||||
var r0 *models.SavedFilter
|
||||
if rf, ok := ret.Get(0).(func(models.SavedFilter) *models.SavedFilter); ok {
|
||||
r0 = rf(obj)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*models.SavedFilter)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(models.SavedFilter) error); ok {
|
||||
r1 = rf(obj)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
@@ -16,6 +16,7 @@ type TransactionManager struct {
|
||||
scrapedItem models.ScrapedItemReaderWriter
|
||||
studio models.StudioReaderWriter
|
||||
tag models.TagReaderWriter
|
||||
savedFilter models.SavedFilterReaderWriter
|
||||
}
|
||||
|
||||
func NewTransactionManager() *TransactionManager {
|
||||
@@ -29,6 +30,7 @@ func NewTransactionManager() *TransactionManager {
|
||||
scrapedItem: &ScrapedItemReaderWriter{},
|
||||
studio: &StudioReaderWriter{},
|
||||
tag: &TagReaderWriter{},
|
||||
savedFilter: &SavedFilterReaderWriter{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +74,10 @@ func (t *TransactionManager) Tag() models.TagReaderWriter {
|
||||
return t.tag
|
||||
}
|
||||
|
||||
func (t *TransactionManager) SavedFilter() models.SavedFilterReaderWriter {
|
||||
return t.savedFilter
|
||||
}
|
||||
|
||||
type ReadTransaction struct {
|
||||
t *TransactionManager
|
||||
}
|
||||
@@ -115,3 +121,7 @@ func (r *ReadTransaction) Studio() models.StudioReader {
|
||||
func (r *ReadTransaction) Tag() models.TagReader {
|
||||
return r.t.tag
|
||||
}
|
||||
|
||||
func (r *ReadTransaction) SavedFilter() models.SavedFilterReader {
|
||||
return r.t.savedFilter
|
||||
}
|
||||
|
||||
19
pkg/models/model_saved_filter.go
Normal file
19
pkg/models/model_saved_filter.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package models
|
||||
|
||||
type SavedFilter struct {
|
||||
ID int `db:"id" json:"id"`
|
||||
Mode FilterMode `db:"mode" json:"mode"`
|
||||
Name string `db:"name" json:"name"`
|
||||
// JSON-encoded filter string
|
||||
Filter string `db:"filter" json:"filter"`
|
||||
}
|
||||
|
||||
type SavedFilters []*SavedFilter
|
||||
|
||||
func (m *SavedFilters) Append(o interface{}) {
|
||||
*m = append(*m, o.(*SavedFilter))
|
||||
}
|
||||
|
||||
func (m *SavedFilters) New() interface{} {
|
||||
return &SavedFilter{}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ type Repository interface {
|
||||
ScrapedItem() ScrapedItemReaderWriter
|
||||
Studio() StudioReaderWriter
|
||||
Tag() TagReaderWriter
|
||||
SavedFilter() SavedFilterReaderWriter
|
||||
}
|
||||
|
||||
type ReaderRepository interface {
|
||||
@@ -22,4 +23,5 @@ type ReaderRepository interface {
|
||||
ScrapedItem() ScrapedItemReader
|
||||
Studio() StudioReader
|
||||
Tag() TagReader
|
||||
SavedFilter() SavedFilterReader
|
||||
}
|
||||
|
||||
19
pkg/models/saved_filter.go
Normal file
19
pkg/models/saved_filter.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package models
|
||||
|
||||
type SavedFilterReader interface {
|
||||
Find(id int) (*SavedFilter, error)
|
||||
FindByMode(mode FilterMode) ([]*SavedFilter, error)
|
||||
FindDefault(mode FilterMode) (*SavedFilter, error)
|
||||
}
|
||||
|
||||
type SavedFilterWriter interface {
|
||||
Create(obj SavedFilter) (*SavedFilter, error)
|
||||
Update(obj SavedFilter) (*SavedFilter, error)
|
||||
SetDefault(obj SavedFilter) (*SavedFilter, error)
|
||||
Destroy(id int) error
|
||||
}
|
||||
|
||||
type SavedFilterReaderWriter interface {
|
||||
SavedFilterReader
|
||||
SavedFilterWriter
|
||||
}
|
||||
Reference in New Issue
Block a user