system.go
1 package system 2 3 import ( 4 "errors" 5 6 "github.com/mrusme/neonmodem/models/forum" 7 "github.com/mrusme/neonmodem/models/post" 8 "github.com/mrusme/neonmodem/models/reply" 9 "github.com/mrusme/neonmodem/system/adapter" 10 "github.com/mrusme/neonmodem/system/all" 11 "github.com/mrusme/neonmodem/system/discourse" 12 "github.com/mrusme/neonmodem/system/hackernews" 13 "github.com/mrusme/neonmodem/system/lemmy" 14 "github.com/mrusme/neonmodem/system/lobsters" 15 "go.uber.org/zap" 16 ) 17 18 type System interface { 19 SetID(id int) 20 GetID() int 21 GetConfig() map[string]interface{} 22 SetConfig(cfg *map[string]interface{}) 23 SetLogger(logger *zap.SugaredLogger) 24 GetCapabilities() adapter.Capabilities 25 26 FilterValue() string 27 Title() string 28 Description() string 29 30 Connect(sysURL string) error 31 Load() error 32 33 ListForums() ([]forum.Forum, error) 34 ListPosts(forumID string) ([]post.Post, error) 35 LoadPost(p *post.Post) error 36 CreatePost(p *post.Post) error 37 CreateReply(r *reply.Reply) error 38 } 39 40 func New( 41 sysType string, 42 sysConfig *map[string]interface{}, 43 logger *zap.SugaredLogger, 44 ) (System, error) { 45 var sys System 46 47 switch sysType { 48 case "discourse": 49 sys = new(discourse.System) 50 case "lemmy": 51 sys = new(lemmy.System) 52 case "lobsters": 53 sys = new(lobsters.System) 54 case "hackernews": 55 sys = new(hackernews.System) 56 case "all": 57 sys = new(all.System) 58 default: 59 return nil, errors.New("No such system") 60 } 61 62 sys.SetConfig(sysConfig) 63 sys.SetLogger(logger) 64 err := sys.Load() 65 if err != nil { 66 return nil, err 67 } 68 69 return sys, nil 70 }