|
|
@ -76,6 +76,28 @@ func (file *File) Delete() error { |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// Insert manually inserts file information into the database. This should never, ever be API accessible
|
|
|
|
func Insert(name, kind, mimeType, author string, time time.Time, size int64, url string) (File, error) { |
|
|
|
file := File{ |
|
|
|
ID: makeFileID(), |
|
|
|
Kind: kind, |
|
|
|
Time: time, |
|
|
|
Public: false, |
|
|
|
Author: author, |
|
|
|
Name: name, |
|
|
|
MimeType: mimeType, |
|
|
|
Size: size, |
|
|
|
URL: url, |
|
|
|
} |
|
|
|
|
|
|
|
err := fileCollection.Insert(file) |
|
|
|
if err != nil { |
|
|
|
return File{}, err |
|
|
|
} |
|
|
|
|
|
|
|
return file, nil |
|
|
|
} |
|
|
|
|
|
|
|
// Upload adds a file to the space.
|
|
|
|
func Upload(ctx context.Context, name, mimeType, author string, size int64, input io.Reader) (File, error) { |
|
|
|
if name == "" { |
|
|
@ -126,6 +148,19 @@ func FindID(id string) (File, error) { |
|
|
|
return file, nil |
|
|
|
} |
|
|
|
|
|
|
|
// FindName finds a file by kind, name and author
|
|
|
|
func FindName(kind string, name string, author string) (File, error) { |
|
|
|
query := bson.M{"kind": kind, "name": name, "author": author} |
|
|
|
file := File{} |
|
|
|
|
|
|
|
err := fileCollection.Find(query).One(&file) |
|
|
|
if err != nil { |
|
|
|
return File{}, err |
|
|
|
} |
|
|
|
|
|
|
|
return file, nil |
|
|
|
} |
|
|
|
|
|
|
|
// List lists files according to the standard lookup. By default it's just the author's own files,
|
|
|
|
// but if `public` is true it will alos include files made public by other authors. If `mimeTypes` contains
|
|
|
|
// any, it will limit the results to that. If `author` is empty, it will only list public files
|
|
|
@ -159,7 +194,7 @@ func List(author string, public bool, mimeTypes []string) ([]File, error) { |
|
|
|
func listFiles(query interface{}) ([]File, error) { |
|
|
|
list := make([]File, 0, 32) |
|
|
|
|
|
|
|
err := fileCollection.Find(query).All(&list) |
|
|
|
err := fileCollection.Find(query).Sort("-time").All(&list) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
@ -193,6 +228,7 @@ func init() { |
|
|
|
|
|
|
|
fileCollection.EnsureIndexKey("author") |
|
|
|
fileCollection.EnsureIndexKey("public") |
|
|
|
fileCollection.EnsureIndexKey("kind", "name", "author") |
|
|
|
fileCollection.EnsureIndexKey("author", "public") |
|
|
|
fileCollection.EnsureIndexKey("kind") |
|
|
|
}) |
|
|
|