package media import ( "context" "database/sql" "errors" "io" "github.com/minio/minio-go/v7" "gorm.io/gorm" "git.mstar.dev/mstar/linstrom/config" "git.mstar.dev/mstar/linstrom/storage-new/dbgen" ) var ErrFileNotFound = errors.New("file not found") func (s *Server) ReadFile(userid, filename string) (io.ReadCloser, error) { mm := dbgen.MediaMetadata metadata, err := mm.Where(mm.OwnedById.Eq(sql.NullString{Valid: true, String: userid}), mm.Name.Eq(filename), mm.Remote.Is(false)). Select(mm.ID, mm.Location). First() switch err { case gorm.ErrRecordNotFound: return nil, ErrFileNotFound case nil: default: return nil, err } return s.client.GetObject( context.TODO(), config.GlobalConfig.S3.BucketName, metadata.Location, minio.GetObjectOptions{}, ) } func (s *Server) ReadFileId(id string) (io.ReadCloser, error) { mm := dbgen.MediaMetadata metadata, err := mm.Where(mm.ID.Eq(id), mm.Remote.Is(false)). Select(mm.Location). First() switch err { case gorm.ErrRecordNotFound: return nil, ErrFileNotFound case nil: default: return nil, err } return s.client.GetObject( context.TODO(), config.GlobalConfig.S3.BucketName, metadata.Location, minio.GetObjectOptions{}, ) }