Documentation
¶
Overview ¶
This package handles the retrieval of data from the CouchDB search database Synchronization is handled by triggers in the database using the http postgresql extension, without the need for postgres->application->couchdb->app->postgres- round trip (we need to store the returned document id to ensure deduplication)
Index ¶
- Constants
- Variables
- type AnonymousDocument
- type Artist
- type BleveDocument
- type CombinedData
- type Genre
- type GenreDescription
- type Media
- type Member
- type Rating
- type Storage
- func (s *Storage) ReadAll(ctx context.Context) (data *CombinedData, err error)
- func (s *Storage) ReadArtists(ctx context.Context) (data []Artist, err error)
- func (s *Storage) ReadGenres(ctx context.Context) (data []Genre, err error)
- func (s *Storage) ReadMedia(ctx context.Context) (data []Media, err error)
- func (s *Storage) ReadMembers(ctx context.Context) (data []Member, err error)
- func (s *Storage) ReadNew(ctx context.Context, outgoingDataFeed chan interface{}, continuousMode bool) (err error)
- func (s *Storage) ReadRatings(ctx context.Context) (data []Rating, err error)
- func (s *Storage) ReadStudios(ctx context.Context) (data []Studio, err error)
- type Studio
- type TargetDB
Constants ¶
const ( Members targetDBName = "members" Artists targetDBName = "artists" Ratings targetDBName = "ratings" Genres targetDBName = "genres" GenreDescriptions targetDBName = "genre_descriptions" // aka keywords Studios targetDBName = "studio" MediaDB targetDBName = "media" )
Variables ¶
var AllTargets = []TargetDB{ Members, Artists, Ratings, Genres, GenreDescriptions, Studios, MediaDB, }
nolint:gochecknoglobals
Functions ¶
This section is empty.
Types ¶
type AnonymousDocument ¶ added in v0.9.15
type AnonymousDocument struct {
Type string `json:"type"`
Fields []interface{} `json:"fields"`
Data map[string]interface{} `json:"data"`
}
AnonymousDocument is same as Ble
type Artist ¶
type Artist struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Name string `json:"name" mapstructure:"name"`
Nicknames []string `json:"nick_names" mapstructure:"nick_names"`
Bio string `json:"bio" mapstructure:"bio"`
Added time.Time `json:"added" mapstructure:"added"`
Modified time.Time `json:"modified" mapstructure:"modified"`
}
type BleveDocument ¶ added in v0.9.15
type BleveDocument struct {
// ID is the couchdb id of the document
ID string `json:"id"`
// Type is a field that allows us to distinguish between different types of documents
Type string `json:"type"`
// Fields is the list of additional fields that we can aggregate on
Fields []interface{} `json:"fields"`
// Data is the raw representation of the document
Data map[string]interface{} `json:"data"`
}
func ToBleveDocument ¶ added in v0.9.15
func ToBleveDocument(combinedData *CombinedData, log *zerolog.Logger) (docs []BleveDocument, err error)
type CombinedData ¶ added in v0.9.15
type CombinedData struct {
Genres []Genre `json:"genres" mapstructure:"genres"`
Members []Member `json:"members" mapstructure:"members"`
Studios []Studio `json:"studio" mapstructure:"studio"`
Ratings []Rating `json:"ratings" mapstructure:"ratings"`
Artists []Artist `json:"artists" mapstructure:"artists"`
Media []Media `json:"media" mapstructure:"media"`
}
type Genre ¶
type Genre struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Name string `json:"name" mapstructure:"name"`
Kinds []string `json:"kinds" mapstructure:"kinds"`
Descriptions [][]GenreDescription `json:"descriptions" mapstructure:"descriptions"`
}
Those types are simplified representations of what is stored in postgres that are written to couchdb on insert/update
type GenreDescription ¶
type Media ¶
type Media struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Title string `json:"title" mapstructure:"title"`
Kind string `json:"kind" mapstructure:"kind"`
// Created refers to the release date
Created time.Time `json:"created" mapstructure:"created"`
Added time.Time `json:"added" mapstructure:"added"`
Modified time.Time `json:"modified" mapstructure:"modified"`
}
type Member ¶
type Member struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Bio string `json:"bio,omitempty" mapstructure:"bio,omitempty"`
Webfinger string `json:"webfinger,omitempty" mapstructure:"webfinger,omitempty"`
DisplayName string `json:"display_name,omitempty" mapstructure:"display_name,omitempty"`
}
type Rating ¶
type Rating struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Topic string `json:"topic" mapstructure:"topic"`
Body string `json:"body" mapstructure:"body"`
User string `json:"user" mapstructure:"user"`
MediaTitle string `json:"media_title" mapstructure:"media_title"`
// not sure whether this shouldn't actually be a string as well
Added time.Time `json:"added" mapstructure:"added"`
Modified time.Time `json:"modified" mapstructure:"modified"`
}
type Storage ¶
type Storage struct {
// contains filtered or unexported fields
}
func (*Storage) ReadAll ¶
func (s *Storage) ReadAll(ctx context.Context) (data *CombinedData, err error)
we only care about scanning the data into it's raw JSON representation so that we can then use it for indexing
func (*Storage) ReadArtists ¶
func (*Storage) ReadGenres ¶
func (*Storage) ReadMembers ¶
func (*Storage) ReadNew ¶
func (s *Storage) ReadNew( ctx context.Context, outgoingDataFeed chan interface{}, continuousMode bool, ) (err error)
ReadNew handles the cyclical or continuous retrieval of new documents for indexing. This function does not accept a target parameter, since it doesn't make much sense to only look for partial data. The channel parameter here is used to communicate data to the search indexer
func (*Storage) ReadRatings ¶
type Studio ¶
type Studio struct {
ID string `json:"_id" mapstructure:"-"`
Rev string `json:"_rev" mapstructure:"-"`
Name string `json:"name" mapstructure:"name"`
Kind string `json:"kind" mapstructure:"kind"`
CityUUID string `json:"city" mapstructure:"city"`
Added time.Time `json:"added" mapstructure:"added"`
Modified time.Time `json:"modified" mapstructure:"modified"`
}