Previous version of Tanabata used as visual and functional reference for the new Go + SvelteKit rewrite. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package db
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Convert "filter" URL param to SQL "WHERE" condition
|
|
func filterToSQL(filter string) (sql string, statusCode int, err error) {
|
|
// filterTokens := strings.Split(string(filter), ";")
|
|
sql = "(true)"
|
|
return
|
|
}
|
|
|
|
// Convert "sort" URL param to SQL "ORDER BY"
|
|
func sortToSQL(sort string) (sql string, statusCode int, err error) {
|
|
if sort == "" {
|
|
return
|
|
}
|
|
sortOptions := strings.Split(sort, ",")
|
|
sql = " ORDER BY "
|
|
for i, sortOption := range sortOptions {
|
|
sortOrder := sortOption[:1]
|
|
sortColumn := sortOption[1:]
|
|
// parse sorting order marker
|
|
switch sortOrder {
|
|
case "+":
|
|
sortOrder = "ASC"
|
|
case "-":
|
|
sortOrder = "DESC"
|
|
default:
|
|
err = fmt.Errorf("invalid sorting order mark: %q", sortOrder)
|
|
statusCode = http.StatusBadRequest
|
|
return
|
|
}
|
|
// validate sorting column
|
|
var n int
|
|
n, err = strconv.Atoi(sortColumn)
|
|
if err != nil || n < 0 {
|
|
err = fmt.Errorf("invalid sorting column: %q", sortColumn)
|
|
statusCode = http.StatusBadRequest
|
|
return
|
|
}
|
|
// add sorting option to query
|
|
if i > 0 {
|
|
sql += ","
|
|
}
|
|
sql += fmt.Sprintf("%s %s NULLS LAST", sortColumn, sortOrder)
|
|
}
|
|
return
|
|
}
|