stash/pkg/models/sqlite_date.go
WithoutPants 5495d72849 File storage rewrite (#2676)
* Restructure data layer part 2 (#2599)
* Refactor and separate image model
* Refactor image query builder
* Handle relationships in image query builder
* Remove relationship management methods
* Refactor gallery model/query builder
* Add scenes to gallery model
* Convert scene model
* Refactor scene models
* Remove unused methods
* Add unit tests for gallery
* Add image tests
* Add scene tests
* Convert unnecessary scene value pointers to values
* Convert unnecessary pointer values to values
* Refactor scene partial
* Add scene partial tests
* Refactor ImagePartial
* Add image partial tests
* Refactor gallery partial update
* Add partial gallery update tests
* Use zero/null package for null values
* Add files and scan system
* Add sqlite implementation for files/folders
* Add unit tests for files/folders
* Image refactors
* Update image data layer
* Refactor gallery model and creation
* Refactor scene model
* Refactor scenes
* Don't set title from filename
* Allow galleries to freely add/remove images
* Add multiple scene file support to graphql and UI
* Add multiple file support for images in graphql/UI
* Add multiple file for galleries in graphql/UI
* Remove use of some deprecated fields
* Remove scene path usage
* Remove gallery path usage
* Remove path from image
* Move funscript to video file
* Refactor caption detection
* Migrate existing data
* Add post commit/rollback hook system
* Lint. Comment out import/export tests
* Add WithDatabase read only wrapper
* Prepend tasks to list
* Add 32 pre-migration
* Add warnings in release and migration notes
2022-09-06 07:03:42 +00:00

82 lines
1.4 KiB
Go

package models
import (
"database/sql/driver"
"fmt"
"strings"
"time"
"github.com/stashapp/stash/pkg/utils"
)
// TODO - this should be moved to sqlite
type SQLiteDate struct {
String string
Valid bool
}
const sqliteDateLayout = "2006-01-02"
// Scan implements the Scanner interface.
func (t *SQLiteDate) Scan(value interface{}) error {
dateTime, ok := value.(time.Time)
if !ok {
t.String = ""
t.Valid = false
return nil
}
t.String = dateTime.Format(sqliteDateLayout)
if t.String != "" && t.String != "0001-01-01" {
t.Valid = true
} else {
t.Valid = false
}
return nil
}
// Value implements the driver Valuer interface.
func (t SQLiteDate) Value() (driver.Value, error) {
if !t.Valid {
return nil, nil
}
s := strings.TrimSpace(t.String)
// handle empty string
if s == "" {
return "", nil
}
result, err := utils.ParseDateStringAsFormat(s, sqliteDateLayout)
if err != nil {
return nil, fmt.Errorf("converting sqlite date %q: %w", s, err)
}
return result, nil
}
func (t *SQLiteDate) StringPtr() *string {
if t == nil || !t.Valid {
return nil
}
vv := t.String
return &vv
}
func (t *SQLiteDate) TimePtr() *time.Time {
if t == nil || !t.Valid {
return nil
}
ret, _ := time.Parse(sqliteDateLayout, t.String)
return &ret
}
func (t *SQLiteDate) DatePtr() *Date {
if t == nil || !t.Valid {
return nil
}
ret := NewDate(t.String)
return &ret
}