package search import "github.com/NyaaPantsu/nyaa/config" const ( ID SortMode = iota Name Date Downloads Size Seeders Leechers Completed MaxIota ) // SortField is a database column in ES/DB type SortField struct { ES string DB string } var sortFields = []SortField{ {"id", "torrents.torrent_id"}, {"name.raw", "torrent_name"}, {"date", "date"}, {"downloads", "downloads"}, {"filesize", "filesize"}, {"seeders", "seeders"}, {"leechers", "leechers"}, {"completed", "completed"}, } // SortMode selected sort mode type SortMode uint8 // Parse a string to sortMode func (s *SortMode) Parse(str string) { switch str { case "1": *s = Name case "2": *s = Date case "3": *s = Downloads case "4": *s = Size case "5": *s = Seeders case "6": *s = Leechers case "7": *s = Completed default: *s = Date } } // ToESField convert a sortmode to use with ES /* INFO Always need to keep in sync with the field that are used in the * elasticsearch index. * TODO Verify the field in postgres database */ func (s *SortMode) ToESField() string { return s.toField().ES } // ToDBField convert a sortmode to use with database func (s *SortMode) ToDBField() string { return s.toField().DB } // Private function to convert sormode to a field struct func (s *SortMode) toField() SortField { // if sortmode is within range if *s >= MaxIota || *s < 1 { s.Parse(config.Get().Torrents.Order) } return sortFields[int(*s)] }