-
Notifications
You must be signed in to change notification settings - Fork 3
/
dto.go
104 lines (88 loc) · 2.14 KB
/
dto.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package http
import "github.com/boreq/eggplant/application/music"
type searchResult struct {
Albums []basicAlbum `json:"albums,omitempty"`
Tracks []searchResultTrack `json:"tracks,omitempty"`
}
type basicAlbum struct {
Path []string `json:"path,omitempty"`
Title string `json:"title,omitempty"`
Thumbnail *thumbnail `json:"thumbnail,omitempty"`
}
type thumbnail struct {
FileId string `json:"fileId,omitempty"`
}
type searchResultTrack struct {
Track track `json:"track,omitempty"`
Album basicAlbum `json:"album,omitempty"`
}
type track struct {
Id string `json:"id,omitempty"`
FileId string `json:"fileId,omitempty"`
Title string `json:"title,omitempty"`
Duration float64 `json:"duration,omitempty"`
}
func toSearchResult(result music.SearchResult) searchResult {
return searchResult{
Albums: toBasicAlbums(result.Albums),
Tracks: toSearchResultTracks(
result.Tracks,
),
}
}
func toBasicAlbums(albums []music.BasicAlbum) []basicAlbum {
var result []basicAlbum
for _, album := range albums {
result = append(
result,
toBasicAlbum(album),
)
}
return result
}
func toBasicAlbum(album music.BasicAlbum) basicAlbum {
return basicAlbum{
Path: toPath(album.Path),
Title: album.Title,
Thumbnail: toThumbnail(album.Thumbnail),
}
}
func toPath(ids []music.AlbumId) []string {
var result []string
for _, id := range ids {
result = append(result, id.String())
}
return result
}
func toThumbnail(thumb *music.Thumbnail) *thumbnail {
if thumb == nil {
return nil
}
return &thumbnail{
FileId: thumb.FileId.String(),
}
}
func toSearchResultTracks(tracks []music.SearchResultTrack) []searchResultTrack {
var result []searchResultTrack
for _, track := range tracks {
result = append(
result,
toSearchResultTrack(track),
)
}
return result
}
func toSearchResultTrack(track music.SearchResultTrack) searchResultTrack {
return searchResultTrack{
Track: toTrack(track.Track),
Album: toBasicAlbum(track.Album),
}
}
func toTrack(t music.Track) track {
return track{
Id: t.Id.String(),
FileId: t.FileId.String(),
Title: t.Title,
Duration: t.Duration,
}
}