Initialise UpdatedAt for stash ids (#5680)

* Initialise imported zero time to epoch time

Fixes null time error after importing stash id without updatedAt set

* Update unit tests
This commit is contained in:
WithoutPants 2025-02-26 08:03:35 +11:00 committed by GitHub
parent 1e05766571
commit b8af147a8d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 82 additions and 46 deletions

View file

@ -121,12 +121,14 @@ func Test_PerformerStore_Create(t *testing.T) {
Aliases: models.NewRelatedStrings(aliases), Aliases: models.NewRelatedStrings(aliases),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
CreatedAt: createdAt, CreatedAt: createdAt,
@ -283,12 +285,14 @@ func Test_PerformerStore_Update(t *testing.T) {
TagIDs: models.NewRelatedIDs([]int{tagIDs[tagIdx1WithPerformer], tagIDs[tagIdx1WithDupName]}), TagIDs: models.NewRelatedIDs([]int{tagIDs[tagIdx1WithPerformer], tagIDs[tagIdx1WithDupName]}),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
CreatedAt: createdAt, CreatedAt: createdAt,
@ -518,12 +522,14 @@ func Test_PerformerStore_UpdatePartial(t *testing.T) {
StashIDs: &models.UpdateStashIDs{ StashIDs: &models.UpdateStashIDs{
StashIDs: []models.StashID{ StashIDs: []models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}, },
Mode: models.RelationshipUpdateModeSet, Mode: models.RelationshipUpdateModeSet,
@ -560,12 +566,14 @@ func Test_PerformerStore_UpdatePartial(t *testing.T) {
TagIDs: models.NewRelatedIDs([]int{tagIDs[tagIdx1WithPerformer], tagIDs[tagIdx1WithDupName]}), TagIDs: models.NewRelatedIDs([]int{tagIDs[tagIdx1WithPerformer], tagIDs[tagIdx1WithDupName]}),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
CreatedAt: createdAt, CreatedAt: createdAt,
@ -2075,8 +2083,9 @@ func testPerformerStashIDs(ctx context.Context, t *testing.T, s *models.Performe
const stashIDStr = "stashID" const stashIDStr = "stashID"
const endpoint = "endpoint" const endpoint = "endpoint"
stashID := models.StashID{ stashID := models.StashID{
StashID: stashIDStr, StashID: stashIDStr,
Endpoint: endpoint, Endpoint: endpoint,
UpdatedAt: epochTime,
} }
qb := db.Performer qb := db.Performer

View file

@ -133,12 +133,14 @@ func Test_sceneQueryBuilder_Create(t *testing.T) {
}), }),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
ResumeTime: float64(resumeTime), ResumeTime: float64(resumeTime),
@ -178,12 +180,14 @@ func Test_sceneQueryBuilder_Create(t *testing.T) {
}), }),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
ResumeTime: resumeTime, ResumeTime: resumeTime,
@ -362,12 +366,14 @@ func Test_sceneQueryBuilder_Update(t *testing.T) {
}), }),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
ResumeTime: resumeTime, ResumeTime: resumeTime,
@ -590,12 +596,14 @@ func Test_sceneQueryBuilder_UpdatePartial(t *testing.T) {
StashIDs: &models.UpdateStashIDs{ StashIDs: &models.UpdateStashIDs{
StashIDs: []models.StashID{ StashIDs: []models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}, },
Mode: models.RelationshipUpdateModeSet, Mode: models.RelationshipUpdateModeSet,
@ -634,12 +642,14 @@ func Test_sceneQueryBuilder_UpdatePartial(t *testing.T) {
}), }),
StashIDs: models.NewRelatedStashIDs([]models.StashID{ StashIDs: models.NewRelatedStashIDs([]models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
}), }),
ResumeTime: resumeTime, ResumeTime: resumeTime,
@ -741,12 +751,14 @@ func Test_sceneQueryBuilder_UpdatePartialRelationships(t *testing.T) {
stashIDs = []models.StashID{ stashIDs = []models.StashID{
{ {
StashID: stashID1, StashID: stashID1,
Endpoint: endpoint1, Endpoint: endpoint1,
UpdatedAt: epochTime,
}, },
{ {
StashID: stashID2, StashID: stashID2,
Endpoint: endpoint2, Endpoint: endpoint2,
UpdatedAt: epochTime,
}, },
} }
) )
@ -4377,8 +4389,9 @@ func testSceneStashIDs(ctx context.Context, t *testing.T, s *models.Scene) {
const stashIDStr = "stashID" const stashIDStr = "stashID"
const endpoint = "endpoint" const endpoint = "endpoint"
stashID := models.StashID{ stashID := models.StashID{
StashID: stashIDStr, StashID: stashIDStr,
Endpoint: endpoint, Endpoint: endpoint,
UpdatedAt: epochTime,
} }
qb := db.Scene qb := db.Scene

View file

@ -24,6 +24,8 @@ import (
_ "github.com/stashapp/stash/pkg/sqlite/migrations" _ "github.com/stashapp/stash/pkg/sqlite/migrations"
) )
var epochTime = time.Unix(0, 0).UTC()
const ( const (
spacedSceneTitle = "zzz yyy xxx" spacedSceneTitle = "zzz yyy xxx"
) )
@ -1028,8 +1030,9 @@ func getObjectDate(index int) *models.Date {
func sceneStashID(i int) models.StashID { func sceneStashID(i int) models.StashID {
return models.StashID{ return models.StashID{
StashID: getSceneStringValue(i, "stashid"), StashID: getSceneStringValue(i, "stashid"),
Endpoint: getSceneStringValue(i, "endpoint"), Endpoint: getSceneStringValue(i, "endpoint"),
UpdatedAt: epochTime,
} }
} }

View file

@ -618,6 +618,9 @@ func testStudioStashIDs(ctx context.Context, t *testing.T, s *models.Studio) {
return return
} }
// #5563 - set the UpdatedAt field to epoch
stashID.UpdatedAt = epochTime
assert.Equal(t, []models.StashID{stashID}, s.StashIDs.List()) assert.Equal(t, []models.StashID{stashID}, s.StashIDs.List())
// remove stash ids and ensure was updated // remove stash ids and ensure was updated

View file

@ -309,7 +309,15 @@ func (t *stashIDTable) get(ctx context.Context, id int) ([]models.StashID, error
return ret, nil return ret, nil
} }
var epochTime = time.Unix(0, 0).UTC()
func (t *stashIDTable) insertJoin(ctx context.Context, id int, v models.StashID) (sql.Result, error) { func (t *stashIDTable) insertJoin(ctx context.Context, id int, v models.StashID) (sql.Result, error) {
// #5563 - it's possible that zero-value updated at timestamps are provided via import
// replace them with the epoch time
if v.UpdatedAt.IsZero() {
v.UpdatedAt = epochTime
}
var q = dialect.Insert(t.table.table).Cols(t.idColumn.GetCol(), "endpoint", "stash_id", "updated_at").Vals( var q = dialect.Insert(t.table.table).Cols(t.idColumn.GetCol(), "endpoint", "stash_id", "updated_at").Vals(
goqu.Vals{id, v.Endpoint, v.StashID, v.UpdatedAt}, goqu.Vals{id, v.Endpoint, v.StashID, v.UpdatedAt},
) )