package services import ( "git.aiterp.net/rpdata/api/database" "git.aiterp.net/rpdata/api/services/loaders" ) // A Bundle contains all services. type Bundle struct { Tags *TagService Characters *CharacterService Changes *ChangeService Logs *LogService Channels *ChannelService Stories *StoryService } // NewBundle creates a new bundle. func NewBundle(db database.Database) *Bundle { bundle := &Bundle{} bundle.Changes = &ChangeService{ changes: db.Changes(), } bundle.Tags = &TagService{tags: db.Tags()} bundle.Characters = &CharacterService{ characters: db.Characters(), loader: loaders.CharacterLoaderFromRepository(db.Characters()), changeService: bundle.Changes, } bundle.Channels = &ChannelService{ channels: db.Channels(), loader: loaders.ChannelLoaderFromRepository(db.Channels()), changeService: bundle.Changes, } bundle.Logs = &LogService{ logs: db.Logs(), posts: db.Posts(), changeService: bundle.Changes, channelService: bundle.Channels, characterService: bundle.Characters, } bundle.Stories = &StoryService{ stories: db.Stories(), chapters: db.Chapters(), comments: db.Comments(), changeService: bundle.Changes, characterService: bundle.Characters, } return bundle }