-
Notifications
You must be signed in to change notification settings - Fork 92
/
Copy pathdata.go
215 lines (199 loc) · 8.41 KB
/
data.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/*
database_sql
*/
package main
import (
"time"
"github.com/google/uuid"
"github.com/ydb-platform/ydb-go-sdk/v3/table/types"
)
func seriesData(id string, released time.Time, title, info, comment string) types.Value {
var commentv types.Value
if comment == "" {
commentv = types.NullValue(types.TypeUTF8)
} else {
commentv = types.OptionalValue(types.TextValue(comment))
}
return types.StructValue(
types.StructFieldValue("series_id", types.BytesValueFromString(id)),
types.StructFieldValue("release_date", types.DateValueFromTime(released)),
types.StructFieldValue("title", types.TextValue(title)),
types.StructFieldValue("series_info", types.TextValue(info)),
types.StructFieldValue("comment", commentv),
)
}
func seasonData(seriesID, seasonID, title string, first, last time.Time) types.Value {
return types.StructValue(
types.StructFieldValue("series_id", types.BytesValueFromString(seriesID)),
types.StructFieldValue("season_id", types.BytesValueFromString(seasonID)),
types.StructFieldValue("title", types.TextValue(title)),
types.StructFieldValue("first_aired", types.DateValueFromTime(first)),
types.StructFieldValue("last_aired", types.DateValueFromTime(last)),
)
}
func episodeData(seriesID, seasonID, episodeID, title string, date time.Time) types.Value {
return types.StructValue(
types.StructFieldValue("series_id", types.BytesValueFromString(seriesID)),
types.StructFieldValue("season_id", types.BytesValueFromString(seasonID)),
types.StructFieldValue("episode_id", types.BytesValueFromString(episodeID)),
types.StructFieldValue("title", types.TextValue(title)),
types.StructFieldValue("air_date", types.DateValueFromTime(date)),
)
}
//nolint:nonamedreturns
func getData() (series, seasons, episodes []types.Value) {
for seriesID, fill := range map[string]func(seriesID string) (
seriesData types.Value, seasons []types.Value, episodes []types.Value,
){
uuid.New().String(): getDataForITCrowd,
uuid.New().String(): getDataForSiliconValley,
} {
seriesData, seasonsData, episodesData := fill(seriesID)
series = append(series, seriesData)
seasons = append(seasons, seasonsData...)
episodes = append(episodes, episodesData...)
}
return series, seasons, episodes
}
//nolint:nonamedreturns
func getDataForITCrowd(seriesID string) (series types.Value, seasons, episodes []types.Value) {
series = seriesData(
seriesID, date("2006-02-03"), "IT Crowd", ""+
"The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by "+
"Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry.",
"", // NULL comment.
)
for _, season := range []struct { //nolint:gocritic
title string
first time.Time
last time.Time
episodes map[string]time.Time
}{
{"Season 1", date("2006-02-03"), date("2006-03-03"), map[string]time.Time{
"Yesterday's Jam": date("2006-02-03"),
"Calamity Jen": date("2006-02-03"),
"Fifty-Fifty": date("2006-02-10"),
"The Red Door": date("2006-02-17"),
"The Haunting of Bill Crouse": date("2006-02-24"),
"Aunt Irma Visits": date("2006-03-03"),
}},
{"Season 2", date("2007-08-24"), date("2007-09-28"), map[string]time.Time{
"The Work Outing": date("2006-08-24"),
"Return of the Golden Child": date("2007-08-31"),
"Moss and the German": date("2007-09-07"),
"The Dinner Party": date("2007-09-14"),
"Smoke and Mirrors": date("2007-09-21"),
"Men Without Women": date("2007-09-28"),
}},
{"Season 3", date("2008-11-21"), date("2008-12-26"), map[string]time.Time{
"From Hell": date("2008-11-21"),
"Are We Not Men?": date("2008-11-28"),
"Tramps Like Us": date("2008-12-05"),
"The Speech": date("2008-12-12"),
"Friendface": date("2008-12-19"),
"Calendar Geeks": date("2008-12-26"),
}},
{"Season 4", date("2010-06-25"), date("2010-07-30"), map[string]time.Time{
"Jen The Fredo": date("2010-06-25"),
"The Final Countdown": date("2010-07-02"),
"Something Happened": date("2010-07-09"),
"Italian For Beginners": date("2010-07-16"),
"Bad Boys": date("2010-07-23"),
"Reynholm vs Reynholm": date("2010-07-30"),
}},
} {
seasonID := uuid.New().String()
seasons = append(seasons, seasonData(seriesID, seasonID, season.title, season.first, season.last))
for title, date := range season.episodes {
episodes = append(episodes, episodeData(seriesID, seasonID, uuid.New().String(), title, date))
}
}
return series, seasons, episodes
}
//nolint:nonamedreturns
func getDataForSiliconValley(seriesID string) (series types.Value, seasons, episodes []types.Value) {
series = seriesData(
seriesID, date("2014-04-06"), "Silicon Valley", ""+
"Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and "+
"Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley.",
"Some comment here",
)
for _, season := range []struct { //nolint:gocritic
title string
first time.Time
last time.Time
episodes map[string]time.Time
}{
{"Season 1", date("2006-02-03"), date("2006-03-03"), map[string]time.Time{
"Minimum Viable Product": date("2014-04-06"),
"The Cap Table": date("2014-04-13"),
"Articles of Incorporation": date("2014-04-20"),
"Fiduciary Duties": date("2014-04-27"),
"Signaling Risk": date("2014-05-04"),
"Third Party Insourcing": date("2014-05-11"),
"Proof of Concept": date("2014-05-18"),
"Optimal Tip-to-Tip Efficiency": date("2014-06-01"),
}},
{"Season 2", date("2007-08-24"), date("2007-09-28"), map[string]time.Time{
"Sand Hill Shuffle": date("2015-04-12"),
"Runaway Devaluation": date("2015-04-19"),
"Bad Money": date("2015-04-26"),
"The Lady": date("2015-05-03"),
"Server Space": date("2015-05-10"),
"Homicide": date("2015-05-17"),
"Adult Content": date("2015-05-24"),
"White Hat/Black Hat": date("2015-05-31"),
"Binding Arbitration": date("2015-06-07"),
"Two Days of the Condor": date("2015-06-14"),
}},
{"Season 3", date("2008-11-21"), date("2008-12-26"), map[string]time.Time{
"Founder Friendly": date("2016-04-24"),
"Two in the Box": date("2016-05-01"),
"Meinertzhagen's Haversack": date("2016-05-08"),
"Maleant Data Systems Solutions": date("2016-05-15"),
"The Empty Chair": date("2016-05-22"),
"Bachmanity Insanity": date("2016-05-29"),
"To Build a Better Beta": date("2016-06-05"),
"Bachman's Earnings Over-Ride": date("2016-06-12"),
"Daily Active Users": date("2016-06-19"),
"The Uptick": date("2016-06-26"),
}},
{"Season 4", date("2010-06-25"), date("2010-07-30"), map[string]time.Time{
"Success Failure": date("2017-04-23"),
"Terms of Service": date("2017-04-30"),
"Intellectual Property": date("2017-05-07"),
"Teambuilding Exercise": date("2017-05-14"),
"The Blood Boy": date("2017-05-21"),
"Customer Service": date("2017-05-28"),
"The Patent Troll": date("2017-06-04"),
"The Keenan Vortex": date("2017-06-11"),
"Hooli-Con": date("2017-06-18"),
"Server Error": date("2017-06-25"),
}},
{"Season 5", date("2018-03-25"), date("2018-05-13"), map[string]time.Time{
"Grow Fast or Die Slow": date("2018-03-25"),
"Reorientation": date("2018-04-01"),
"Chief Operating Officer": date("2018-04-08"),
"Tech Evangelist": date("2018-04-15"),
"Facial Recognition": date("2018-04-22"),
"Artificial Emotional Intelligence": date("2018-04-29"),
"Initial Coin Offering": date("2018-05-06"),
"Fifty-One Percent": date("2018-05-13"),
}},
} {
seasonID := uuid.New().String()
seasons = append(seasons, seasonData(seriesID, seasonID, season.title, season.first, season.last))
for title, date := range season.episodes {
episodes = append(episodes, episodeData(seriesID, seasonID, uuid.New().String(), title, date))
}
}
return series, seasons, episodes
}
const dateISO8601 = "2006-01-02"
func date(date string) time.Time {
t, err := time.Parse(dateISO8601, date)
if err != nil {
panic(err)
}
return t
}