-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
92 lines (75 loc) · 2.52 KB
/
main.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
package main
import (
"github.com/dailyhunt/feed/cmd"
"github.com/dailyhunt/feed/context"
"github.com/dailyhunt/feed/dsl"
"github.com/dailyhunt/feed/server"
"github.com/gin-gonic/gin"
)
var AppName = "feed"
var Version = "0.0.1"
func main() {
// TODO: there needs to be top level data source and config loaders
cmd.Execute(AppName, Version, endpointsBuilder)
}
// only method to be implemented
func endpointsBuilder() []server.HttpEndpoint {
var endpoints = make([]server.HttpEndpoint, 0)
endpoints = append(endpoints,
server.HttpEndpoint{Path: "inbox", Method: server.PostMethod, EngineDefn: inboxFeed()},
server.HttpEndpoint{Path: "chrono", Method: server.PostMethod, EngineDefn: chronoFeed()},
)
return endpoints
}
func configBuilder(request *context.RequestContext) *context.ConfigContext {
// TODO: add config builder
return nil
}
func profileBuilder(request *context.RequestContext) *context.ProfileContext {
// TODO: add profile builder
return nil
}
func requestBuilder(ginContext *gin.Context) *context.RequestContext {
return nil
}
// TODO: add data source builder... there can be multiple data sources
func dataSourceBuilder() {
}
func chronoFeed() *dsl.EngineDefn {
var feedEngine = new(dsl.EngineDefn)
feedEngine.
RequestBuilder(requestBuilder).
ProfileBuilder(profileBuilder).
ConfigBuilder(configBuilder).
Feed("news").
Section("bnews").
Pipeline("bnews_pipeline"). // pipeline
Source(). // pipeline
Source(). // pipeline
Items(). // collection of sources of items
Filter(). // filters at item level
Filter(). // filters at item level
Score(). // score at item level
Sort(). // collect all and heap sort
TopK() // bounded heap
return feedEngine
}
func inboxFeed() *dsl.EngineDefn {
var feedEngine = new(dsl.EngineDefn)
feedEngine.
RequestBuilder(requestBuilder).
ProfileBuilder(profileBuilder).
ConfigBuilder(configBuilder).
Feed("news").
Section("bnews").
Pipeline("bnews_pipeline"). // pipeline
Source(). // pipeline
Source(). // pipeline
Items(). // collection of sources of items
Filter(). // filters at item level
Filter(). // filters at item level
Score(). // score at item level
Sort(). // collect all and heap sort
TopK() // bounded heap
return feedEngine
}