package webfilesystem import ( "errors" "go.mongodb.org/mongo-driver/bson/primitive" ) func (fs *WebFileSystem) NewRead(filePath string) (*WebFSFile, error) { splittedPath := fs.SplitPath(filePath) read := readStruct{ File: &WebFSFile{}, Filter: primitive.M{ "name": splittedPath[len(splittedPath)-1], }, } fileRaw, err := fs.readMongo(read) if err != nil { return nil, err } file := castToFile(fileRaw) return file, nil } func (fs *WebFileSystem) NewCreateDirectory(dirPath string) (primitive.ObjectID, error) { splittedPath := fs.SplitPath(dirPath) parentPath := fs.GetParentPath(dirPath) parentDirRaw, err := fs.NewRead(parentPath) if err != nil { return primitive.NilObjectID, err } newDir := WebFSFile{ MongoId: primitive.NewObjectID(), Name: splittedPath[len(splittedPath)-1], Type: "directory", Data: FolderData{ Parent: parentDirRaw.MongoId, Children: []primitive.ObjectID{}, }, Icon: "", } objectId, err := fs.writeMongo(newDir, parentPath) if err != nil { return primitive.NilObjectID, err } return objectId, nil } func (fs *WebFileSystem) NewList(dirPath string) ([]*WebFSFile, error) { dirFile, err := fs.NewRead(dirPath) if err != nil { return nil, err } if dirFile.Type != "directory" { return nil, errors.New("file is not a directory") } fileData, err := castToDirectory(dirFile.Data) if err != nil { return nil, err } files := []*WebFSFile{} for _, child := range fileData.Children { file, err := fs.ReadByObjectID(child) if err != nil { println(err.Error()) continue } files = append(files, file) } return files, nil } func (fs *WebFileSystem) CreateFile(file *WebFSFile, parentPath string) error { fs.writeMongo(*file, parentPath) return errors.New("Not ready yet") }