sort order: strains, species, char type, chars
This commit is contained in:
parent
22e4bbe1e4
commit
8e386c3521
5 changed files with 16 additions and 9 deletions
|
@ -30,6 +30,7 @@ type CharacteristicTypeBase struct {
|
|||
type CharacteristicType struct {
|
||||
*CharacteristicTypeBase
|
||||
Characteristics NullSliceInt64 `db:"characteristics" json:"characteristics"`
|
||||
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||
}
|
||||
|
||||
type CharacteristicTypes []*CharacteristicType
|
||||
|
@ -60,7 +61,8 @@ func (c CharacteristicTypeService) list(val *url.Values) (entity, error) {
|
|||
}
|
||||
|
||||
var vals []interface{}
|
||||
sql := `SELECT ct.*, array_agg(c.id) AS characteristics
|
||||
sql := `SELECT ct.*, array_agg(c.id) AS characteristics,
|
||||
rank() OVER (ORDER BY ct.characteristic_type_name) AS sort_order
|
||||
FROM characteristic_types ct
|
||||
INNER JOIN characteristics c ON c.characteristic_type_id=ct.id`
|
||||
|
||||
|
@ -89,7 +91,7 @@ func (c CharacteristicTypeService) list(val *url.Values) (entity, error) {
|
|||
|
||||
func (c CharacteristicTypeService) get(id int64, dummy string) (entity, error) {
|
||||
var characteristic_type CharacteristicType
|
||||
sql := `SELECT ct.*, array_agg(c.id) AS characteristics
|
||||
sql := `SELECT ct.*, array_agg(c.id) AS characteristics, 0 AS sort_order
|
||||
FROM characteristic_types ct
|
||||
INNER JOIN characteristics c ON c.characteristic_type_id=ct.id
|
||||
WHERE ct.id=$1
|
||||
|
|
|
@ -20,7 +20,7 @@ type CharacteristicBase struct {
|
|||
Id int64 `json:"id,omitempty"`
|
||||
CharacteristicName string `db:"characteristic_name" json:"characteristicName"`
|
||||
CharacteristicTypeId int64 `db:"characteristic_type_id" json:"characteristicType"`
|
||||
Sort NullInt64 `db:"sort" json:"sort"`
|
||||
SortOrder NullInt64 `db:"sort_order" json:"sortOrder"`
|
||||
CreatedAt time.Time `db:"created_at" json:"createdAt"`
|
||||
UpdatedAt time.Time `db:"updated_at" json:"updatedAt"`
|
||||
DeletedAt NullTime `db:"deleted_at" json:"deletedAt"`
|
||||
|
|
|
@ -5,7 +5,7 @@ CREATE TABLE characteristics (
|
|||
id BIGSERIAL NOT NULL,
|
||||
characteristic_name TEXT NOT NULL,
|
||||
characteristic_type_id BIGINT NOT NULL,
|
||||
sort BIGINT NULL,
|
||||
sort_order BIGINT NULL,
|
||||
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
|
|
|
@ -42,6 +42,7 @@ type Species struct {
|
|||
GenusName string `db:"genus_name" json:"genusName"`
|
||||
Strains NullSliceInt64 `db:"strains" json:"strains"`
|
||||
TotalStrains int64 `db:"total_strains" json:"totalStrains"`
|
||||
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||
}
|
||||
|
||||
type ManySpecies []*Species
|
||||
|
@ -79,7 +80,8 @@ func (s SpeciesService) list(val *url.Values) (entity, error) {
|
|||
|
||||
var vals []interface{}
|
||||
sql := `SELECT sp.*, g.genus_name, array_agg(st.id) AS strains,
|
||||
COUNT(st) AS total_strains
|
||||
COUNT(st) AS total_strains,
|
||||
rank() OVER (ORDER BY sp.species_name ASC) AS sort_order
|
||||
FROM species sp
|
||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
||||
LEFT OUTER JOIN strains st ON st.species_id=sp.id`
|
||||
|
@ -110,7 +112,7 @@ func (s SpeciesService) list(val *url.Values) (entity, error) {
|
|||
func (s SpeciesService) get(id int64, genus string) (entity, error) {
|
||||
var species Species
|
||||
q := `SELECT sp.*, g.genus_name, array_agg(st.id) AS strains,
|
||||
COUNT(st) AS total_strains
|
||||
COUNT(st) AS total_strains, 0 AS sort_order
|
||||
FROM species sp
|
||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
||||
LEFT OUTER JOIN strains st ON st.species_id=sp.id
|
||||
|
|
|
@ -44,6 +44,7 @@ type Strain struct {
|
|||
*StrainBase
|
||||
Measurements NullSliceInt64 `db:"measurements" json:"measurements"`
|
||||
TotalMeasurements int64 `db:"total_measurements" json:"totalMeasurements"`
|
||||
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||
}
|
||||
|
||||
type Strains []*Strain
|
||||
|
@ -80,7 +81,8 @@ func (s StrainService) list(val *url.Values) (entity, error) {
|
|||
}
|
||||
|
||||
var vals []interface{}
|
||||
sql := `SELECT st.*, array_agg(m.id) AS measurements, COUNT(m) AS total_measurements
|
||||
sql := `SELECT st.*, array_agg(m.id) AS measurements, COUNT(m) AS total_measurements,
|
||||
rank() OVER (ORDER BY sp.species_name ASC, st.type_strain ASC, st.strain_name ASC) AS sort_order
|
||||
FROM strains st
|
||||
INNER JOIN species sp ON sp.id=st.species_id
|
||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
||||
|
@ -99,7 +101,7 @@ func (s StrainService) list(val *url.Values) (entity, error) {
|
|||
sql += " WHERE (" + strings.Join(conds, ") AND (") + ")"
|
||||
}
|
||||
|
||||
sql += " GROUP BY st.id, st.species_id;"
|
||||
sql += " GROUP BY st.id, st.species_id, sp.species_name;"
|
||||
|
||||
strains := make(Strains, 0)
|
||||
err := DBH.Select(&strains, sql, vals...)
|
||||
|
@ -111,7 +113,8 @@ func (s StrainService) list(val *url.Values) (entity, error) {
|
|||
|
||||
func (s StrainService) get(id int64, genus string) (entity, error) {
|
||||
var strain Strain
|
||||
q := `SELECT st.*, array_agg(m.id) AS measurements, COUNT(m) AS total_measurements
|
||||
q := `SELECT st.*, array_agg(m.id) AS measurements, COUNT(m) AS total_measurements,
|
||||
0 AS sort_order
|
||||
FROM strains st
|
||||
INNER JOIN species sp ON sp.id=st.species_id
|
||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
||||
|
|
Reference in a new issue