/
url-completion-service.go
50 lines (42 loc) · 1.08 KB
/
url-completion-service.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
package http
import (
"fmt"
"github.com/dgmann/document-manager/api/pkg/api"
"net/url"
)
func SetURLForRecord(record *api.Record, url url.URL) interface{} {
return cloneAndSetUrl(*record, url)
}
func SetURLForRecordList(records []api.Record, url url.URL) interface{} {
cloned := make([]api.Record, len(records))
for i, m := range records {
cloned[i] = *cloneAndSetUrl(m, url)
}
return cloned
}
func cloneAndSetUrl(record api.Record, url url.URL) *api.Record {
clone := record.Clone()
setURLForRecord(&clone, url)
return &clone
}
func setURLForRecord(r *api.Record, url url.URL) {
domain := ""
if url.Host != "" {
host := url.Host
scheme := url.Scheme
if scheme == "" {
scheme = "http"
}
domain = fmt.Sprintf("%s://%s", scheme, host)
}
if r.Tags == nil {
r.Tags = &[]string{}
}
if r.Pages == nil {
r.Pages = []api.Page{}
}
for i, page := range r.Pages {
r.Pages[i].Url = fmt.Sprintf("%s%s/records/%s/pages/%s?modified=%d", domain, PathPrefix, r.Id, page.Id, page.UpdatedAt.Unix())
}
r.ArchivedPDF = fmt.Sprintf("%s%s/archive/%s", domain, PathPrefix, r.Id)
}