Tag aliases (#1412)

* Add Tag Update/UpdateFull
* Tag alias implementation
* Refactor tag page
* Add aliases in UI
* Include tag aliases in q filter
* Include aliases in tag select
* Add aliases to auto-tagger
* Use aliases in scraper
* Add tag aliases for filename parser
This commit is contained in:
WithoutPants
2021-05-26 14:36:05 +10:00
committed by GitHub
parent 9b57fbbf50
commit c70faa2a53
48 changed files with 1303 additions and 315 deletions

View File

@@ -243,6 +243,29 @@ func (_m *PerformerReaderWriter) FindBySceneID(sceneID int) ([]*models.Performer
return r0, r1
}
// FindByStashIDStatus provides a mock function with given fields: hasStashID, stashboxEndpoint
func (_m *PerformerReaderWriter) FindByStashIDStatus(hasStashID bool, stashboxEndpoint string) ([]*models.Performer, error) {
ret := _m.Called(hasStashID, stashboxEndpoint)
var r0 []*models.Performer
if rf, ok := ret.Get(0).(func(bool, string) []*models.Performer); ok {
r0 = rf(hasStashID, stashboxEndpoint)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]*models.Performer)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(bool, string) error); ok {
r1 = rf(hasStashID, stashboxEndpoint)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// FindMany provides a mock function with given fields: ids
func (_m *PerformerReaderWriter) FindMany(ids []int) ([]*models.Performer, error) {
ret := _m.Called(ids)
@@ -498,26 +521,3 @@ func (_m *PerformerReaderWriter) UpdateTags(sceneID int, tagIDs []int) error {
return r0
}
// FindByStashIDStatus provides a mock function with given fields: hasStashID, stashboxEndpoint
func (_m *PerformerReaderWriter) FindByStashIDStatus(hasStashID bool, stashboxEndpoint string) ([]*models.Performer, error) {
ret := _m.Called(hasStashID, stashboxEndpoint)
var r0 []*models.Performer
if rf, ok := ret.Get(0).(func(bool, string) []*models.Performer); ok {
r0 = rf(hasStashID, stashboxEndpoint)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]*models.Performer)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(bool, string) error); ok {
r1 = rf(hasStashID, stashboxEndpoint)
} else {
r1 = ret.Error(1)
}
return r0, r1
}

View File

@@ -314,6 +314,29 @@ func (_m *TagReaderWriter) FindMany(ids []int) ([]*models.Tag, error) {
return r0, r1
}
// GetAliases provides a mock function with given fields: tagID
func (_m *TagReaderWriter) GetAliases(tagID int) ([]string, error) {
ret := _m.Called(tagID)
var r0 []string
if rf, ok := ret.Get(0).(func(int) []string); ok {
r0 = rf(tagID)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(int) error); ok {
r1 = rf(tagID)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetImage provides a mock function with given fields: tagID
func (_m *TagReaderWriter) GetImage(tagID int) ([]byte, error) {
ret := _m.Called(tagID)
@@ -390,8 +413,45 @@ func (_m *TagReaderWriter) QueryForAutoTag(words []string) ([]*models.Tag, error
return r0, r1
}
// Update provides a mock function with given fields: updatedTag
func (_m *TagReaderWriter) Update(updatedTag models.Tag) (*models.Tag, error) {
// Update provides a mock function with given fields: updateTag
func (_m *TagReaderWriter) Update(updateTag models.TagPartial) (*models.Tag, error) {
ret := _m.Called(updateTag)
var r0 *models.Tag
if rf, ok := ret.Get(0).(func(models.TagPartial) *models.Tag); ok {
r0 = rf(updateTag)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*models.Tag)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(models.TagPartial) error); ok {
r1 = rf(updateTag)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// UpdateAliases provides a mock function with given fields: tagID, aliases
func (_m *TagReaderWriter) UpdateAliases(tagID int, aliases []string) error {
ret := _m.Called(tagID, aliases)
var r0 error
if rf, ok := ret.Get(0).(func(int, []string) error); ok {
r0 = rf(tagID, aliases)
} else {
r0 = ret.Error(0)
}
return r0
}
// UpdateFull provides a mock function with given fields: updatedTag
func (_m *TagReaderWriter) UpdateFull(updatedTag models.Tag) (*models.Tag, error) {
ret := _m.Called(updatedTag)
var r0 *models.Tag

View File

@@ -9,6 +9,13 @@ type Tag struct {
UpdatedAt SQLiteTimestamp `db:"updated_at" json:"updated_at"`
}
type TagPartial struct {
ID int `db:"id" json:"id"`
Name *string `db:"name" json:"name"` // TODO make schema not null
CreatedAt *SQLiteTimestamp `db:"created_at" json:"created_at"`
UpdatedAt *SQLiteTimestamp `db:"updated_at" json:"updated_at"`
}
func NewTag(name string) *Tag {
currentTime := time.Now()
return &Tag{

View File

@@ -17,14 +17,17 @@ type TagReader interface {
QueryForAutoTag(words []string) ([]*Tag, error)
Query(tagFilter *TagFilterType, findFilter *FindFilterType) ([]*Tag, int, error)
GetImage(tagID int) ([]byte, error)
GetAliases(tagID int) ([]string, error)
}
type TagWriter interface {
Create(newTag Tag) (*Tag, error)
Update(updatedTag Tag) (*Tag, error)
Update(updateTag TagPartial) (*Tag, error)
UpdateFull(updatedTag Tag) (*Tag, error)
Destroy(id int) error
UpdateImage(tagID int, image []byte) error
DestroyImage(tagID int) error
UpdateAliases(tagID int, aliases []string) error
}
type TagReaderWriter interface {