package repository import ( "context" "strings" "time" ) type ( Media struct { ID uint Name string Path string PathHash string MIMEType string } MediaEXIF struct { Width *float64 Height *float64 Description *string Camera *string Maker *string Lens *string DateShot *time.Time Exposure *float64 Aperture *float64 Iso *int64 FocalLength *float64 Flash *int64 Orientation *int64 ExposureProgram *int64 GPSLatitude *float64 GPSLongitude *float64 } MediaThumbnail struct { Path string } Pagination struct { Page int Size int Path string } CreateMedia struct { Name string Path string PathHash string MIMEType string } MediaRepository interface { Create(context.Context, *CreateMedia) error Exists(context.Context, string) (bool, error) List(context.Context, *Pagination) ([]*Media, error) Get(context.Context, string) (*Media, error) GetPath(context.Context, string) (string, error) GetThumbnailPath(context.Context, string) (string, error) ListEmptyEXIF(context.Context, *Pagination) ([]*Media, error) GetEXIF(context.Context, uint) (*MediaEXIF, error) CreateEXIF(context.Context, uint, *MediaEXIF) error ListEmptyThumbnail(context.Context, *Pagination) ([]*Media, error) GetThumbnail(context.Context, uint) (*MediaThumbnail, error) CreateThumbnail(context.Context, uint, *MediaThumbnail) error } ) func (m *Media) IsVideo() bool { return strings.HasPrefix(m.MIMEType, "video") }