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 } Album struct { ID uint Name string Path string } MediaThumbnail struct { Path string } Pagination struct { Page int Size int AlbumID *uint Path string } CreateMedia struct { Name string Path string PathHash string MIMEType string } CreateAlbum struct { ParentID *uint Name string Path string } CreateAlbumFile struct { MediaID uint AlbumID uint } 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 ListEmptyAlbums(context.Context, *Pagination) ([]*Media, error) ListAlbums(context.Context, uint) ([]*Album, error) ExistsAlbumByAbsolutePath(context.Context, string) (bool, error) GetAlbumByAbsolutePath(context.Context, string) (*Album, error) GetAlbum(context.Context, uint) (*Album, error) CreateAlbum(context.Context, *CreateAlbum) (*Album, error) CreateAlbumFile(context.Context, *CreateAlbumFile) error } ) func (m *Media) IsVideo() bool { return strings.HasPrefix(m.MIMEType, "video") }