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 {
|
type CharacteristicType struct {
|
||||||
*CharacteristicTypeBase
|
*CharacteristicTypeBase
|
||||||
Characteristics NullSliceInt64 `db:"characteristics" json:"characteristics"`
|
Characteristics NullSliceInt64 `db:"characteristics" json:"characteristics"`
|
||||||
|
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CharacteristicTypes []*CharacteristicType
|
type CharacteristicTypes []*CharacteristicType
|
||||||
|
@ -60,7 +61,8 @@ func (c CharacteristicTypeService) list(val *url.Values) (entity, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var vals []interface{}
|
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
|
FROM characteristic_types ct
|
||||||
INNER JOIN characteristics c ON c.characteristic_type_id=ct.id`
|
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) {
|
func (c CharacteristicTypeService) get(id int64, dummy string) (entity, error) {
|
||||||
var characteristic_type CharacteristicType
|
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
|
FROM characteristic_types ct
|
||||||
INNER JOIN characteristics c ON c.characteristic_type_id=ct.id
|
INNER JOIN characteristics c ON c.characteristic_type_id=ct.id
|
||||||
WHERE ct.id=$1
|
WHERE ct.id=$1
|
||||||
|
|
|
@ -20,7 +20,7 @@ type CharacteristicBase struct {
|
||||||
Id int64 `json:"id,omitempty"`
|
Id int64 `json:"id,omitempty"`
|
||||||
CharacteristicName string `db:"characteristic_name" json:"characteristicName"`
|
CharacteristicName string `db:"characteristic_name" json:"characteristicName"`
|
||||||
CharacteristicTypeId int64 `db:"characteristic_type_id" json:"characteristicType"`
|
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"`
|
CreatedAt time.Time `db:"created_at" json:"createdAt"`
|
||||||
UpdatedAt time.Time `db:"updated_at" json:"updatedAt"`
|
UpdatedAt time.Time `db:"updated_at" json:"updatedAt"`
|
||||||
DeletedAt NullTime `db:"deleted_at" json:"deletedAt"`
|
DeletedAt NullTime `db:"deleted_at" json:"deletedAt"`
|
||||||
|
|
|
@ -5,7 +5,7 @@ CREATE TABLE characteristics (
|
||||||
id BIGSERIAL NOT NULL,
|
id BIGSERIAL NOT NULL,
|
||||||
characteristic_name TEXT NOT NULL,
|
characteristic_name TEXT NOT NULL,
|
||||||
characteristic_type_id BIGINT NOT NULL,
|
characteristic_type_id BIGINT NOT NULL,
|
||||||
sort BIGINT NULL,
|
sort_order BIGINT NULL,
|
||||||
|
|
||||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
updated_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"`
|
GenusName string `db:"genus_name" json:"genusName"`
|
||||||
Strains NullSliceInt64 `db:"strains" json:"strains"`
|
Strains NullSliceInt64 `db:"strains" json:"strains"`
|
||||||
TotalStrains int64 `db:"total_strains" json:"totalStrains"`
|
TotalStrains int64 `db:"total_strains" json:"totalStrains"`
|
||||||
|
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ManySpecies []*Species
|
type ManySpecies []*Species
|
||||||
|
@ -79,7 +80,8 @@ func (s SpeciesService) list(val *url.Values) (entity, error) {
|
||||||
|
|
||||||
var vals []interface{}
|
var vals []interface{}
|
||||||
sql := `SELECT sp.*, g.genus_name, array_agg(st.id) AS strains,
|
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
|
FROM species sp
|
||||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
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`
|
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) {
|
func (s SpeciesService) get(id int64, genus string) (entity, error) {
|
||||||
var species Species
|
var species Species
|
||||||
q := `SELECT sp.*, g.genus_name, array_agg(st.id) AS strains,
|
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
|
FROM species sp
|
||||||
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
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
|
LEFT OUTER JOIN strains st ON st.species_id=sp.id
|
||||||
|
|
|
@ -44,6 +44,7 @@ type Strain struct {
|
||||||
*StrainBase
|
*StrainBase
|
||||||
Measurements NullSliceInt64 `db:"measurements" json:"measurements"`
|
Measurements NullSliceInt64 `db:"measurements" json:"measurements"`
|
||||||
TotalMeasurements int64 `db:"total_measurements" json:"totalMeasurements"`
|
TotalMeasurements int64 `db:"total_measurements" json:"totalMeasurements"`
|
||||||
|
SortOrder int64 `db:"sort_order" json:"sortOrder"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Strains []*Strain
|
type Strains []*Strain
|
||||||
|
@ -80,7 +81,8 @@ func (s StrainService) list(val *url.Values) (entity, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var vals []interface{}
|
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
|
FROM strains st
|
||||||
INNER JOIN species sp ON sp.id=st.species_id
|
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
|
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 += " 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)
|
strains := make(Strains, 0)
|
||||||
err := DBH.Select(&strains, sql, vals...)
|
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) {
|
func (s StrainService) get(id int64, genus string) (entity, error) {
|
||||||
var strain Strain
|
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
|
FROM strains st
|
||||||
INNER JOIN species sp ON sp.id=st.species_id
|
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
|
INNER JOIN genera g ON g.id=sp.genus_id AND LOWER(g.genus_name)=$1
|
||||||
|
|
Reference in a new issue