-
Notifications
You must be signed in to change notification settings - Fork 1
/
controller.go
66 lines (58 loc) · 2.08 KB
/
controller.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
61
62
63
64
65
66
package document
import (
"github.com/spf13/afero"
"github.com/svera/coreander/v3/internal/index"
"github.com/svera/coreander/v3/internal/metadata"
"github.com/svera/coreander/v3/internal/result"
)
const relatedDocuments = 4
type Sender interface {
SendDocument(address string, libraryPath string, fileName string) error
From() string
}
// IdxReaderWriter defines a set of reading and writing operations over an index
type IdxReaderWriter interface {
Search(keywords string, page, resultsPerPage int) (result.Paginated[[]index.Document], error)
Count() (uint64, error)
Close() error
Document(Slug string) (index.Document, error)
SameSubjects(slug string, quantity int) ([]index.Document, error)
SameAuthors(slug string, quantity int) ([]index.Document, error)
SameSeries(slug string, quantity int) ([]index.Document, error)
AddFile(file string) error
RemoveFile(file string) error
Documents(IDs []string) (map[string]index.Document, error)
}
type highlightsRepository interface {
Highlights(userID int, page int, resultsPerPage int) (result.Paginated[[]string], error)
Highlighted(userID int, doc index.Document) index.Document
HighlightedPaginatedResult(userID int, results result.Paginated[[]index.Document]) result.Paginated[[]index.Document]
RemoveDocument(documentPath string) error
}
type Config struct {
WordsPerMinute float64
LibraryPath string
HomeDir string
CoverMaxWidth int
Hostname string
Port int
UploadDocumentMaxSize int
}
type Controller struct {
hlRepository highlightsRepository
idx IdxReaderWriter
sender Sender
config Config
metadataReaders map[string]metadata.Reader
appFs afero.Fs
}
func NewController(hlRepository highlightsRepository, sender Sender, idx IdxReaderWriter, metadataReaders map[string]metadata.Reader, appFs afero.Fs, cfg Config) *Controller {
return &Controller{
hlRepository: hlRepository,
idx: idx,
sender: sender,
config: cfg,
metadataReaders: metadataReaders,
appFs: appFs,
}
}