forked from koltyakov/gosip
/
files.go
60 lines (50 loc) · 1.63 KB
/
files.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package api
import (
"bytes"
"context"
"fmt"
"github.com/recolabs/gosip"
)
//go:generate ggen -ent Files -item File -conf -coll -mods Select,Expand,Filter,Top,OrderBy -helpers Data,Normalized
// Files represent SharePoint Files API queryable collection struct
// Always use NewFiles constructor instead of &Files{}
type Files struct {
client *gosip.SPClient
config *RequestConfig
endpoint string
modifiers *ODataMods
}
// FilesResp - files response type with helper processor methods
type FilesResp []byte
// NewFiles - Files struct constructor function
func NewFiles(client *gosip.SPClient, endpoint string, config *RequestConfig) *Files {
return &Files{
client: client,
endpoint: endpoint,
config: config,
modifiers: NewODataMods(),
}
}
// ToURL gets endpoint with modificators raw URL
func (files *Files) ToURL() string {
return toURL(files.endpoint, files.modifiers)
}
// Get gets Files collection response
func (files *Files) Get(ctx context.Context) (FilesResp, error) {
client := NewHTTPClient(files.client)
return client.Get(ctx, files.ToURL(), files.config)
}
// GetByName gets a file by its name
func (files *Files) GetByName(fileName string) *File {
return NewFile(
files.client,
fmt.Sprintf("%s('%s')", files.endpoint, fileName),
files.config,
)
}
// Add uploads file into the folder
func (files *Files) Add(ctx context.Context, name string, content []byte, overwrite bool) (FileResp, error) {
client := NewHTTPClient(files.client)
endpoint := fmt.Sprintf("%s/Add(overwrite=%t,url='%s')", files.endpoint, overwrite, name)
return client.Post(ctx, endpoint, bytes.NewBuffer(content), files.config)
}