230 lines
7.2 KiB
Go
230 lines
7.2 KiB
Go
package apiv3
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
. "git.1750studios.com/gronkhDE/gogronkh/gserver/utlis"
|
|
|
|
"git.1750studios.com/gronkhDE/gogronkh/database"
|
|
|
|
"github.com/jinzhu/copier"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func GetAuthors(c *gin.Context) {
|
|
var ATs []database.Author
|
|
var AATs []Author
|
|
if author, ok := CleanParam(c.Param("aid")); ok {
|
|
database.Db.Where(author).Find(&ATs)
|
|
if len(ATs) > 0 {
|
|
copier.Copy(&AATs, &ATs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AATs[0])) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AATs[0])
|
|
} else {
|
|
if HandleEtag(c, "{}") {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{})
|
|
}
|
|
} else {
|
|
database.Db.Find(&ATs)
|
|
copier.Copy(&AATs, &ATs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AATs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AATs)
|
|
}
|
|
}
|
|
|
|
func GetAuthorTests(c *gin.Context) {
|
|
var AT database.Author
|
|
var LTs []database.LetsTest
|
|
var ALTs []LetsTest
|
|
if author, ok := CleanParam(c.Param("aid")); ok {
|
|
database.Db.Where(author).Find(&AT)
|
|
database.Db.Model(&AT).Related(<s)
|
|
} else {
|
|
c.AbortWithStatus(404)
|
|
}
|
|
copier.Copy(&ALTs, <s)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALTs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALTs)
|
|
}
|
|
|
|
func GetAuthorLps(c *gin.Context) {
|
|
var AT database.Author
|
|
var LPs []database.LetsPlay
|
|
var ALPs []LetsPlay
|
|
if author, ok := CleanParam(c.Param("aid")); ok {
|
|
database.Db.Where(author).Find(&AT)
|
|
database.Db.Model(&AT).Where("aired IS NOT NULL AND merge_id IS NULL").Related(&LPs)
|
|
} else {
|
|
c.AbortWithStatus(404)
|
|
}
|
|
copier.Copy(&ALPs, &LPs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALPs)
|
|
}
|
|
|
|
func GetTests(c *gin.Context) {
|
|
var LTs []database.LetsTest
|
|
var ALTs []LetsTest
|
|
if lt, ok := CleanParam(c.Param("tid")); ok {
|
|
database.Db.Where(lt).Find(<s)
|
|
if len(LTs) > 0 {
|
|
copier.Copy(&ALTs, <s)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALTs[0])) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALTs[0])
|
|
} else {
|
|
if HandleEtag(c, "{}") {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{})
|
|
}
|
|
} else {
|
|
database.Db.Find(<s)
|
|
copier.Copy(&ALTs, <s)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALTs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALTs)
|
|
}
|
|
}
|
|
|
|
func GetLps(c *gin.Context) {
|
|
var LPs []database.LetsPlay
|
|
var ALPs []LetsPlay
|
|
if lp, ok := CleanParam(c.Param("lid")); ok {
|
|
database.Db.Where("id=? AND aired IS NOT NULL and merge_id IS NULL", lp).Find(&LPs)
|
|
if len(LPs) > 0 {
|
|
copier.Copy(&ALPs, &LPs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALPs[0])) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALPs[0])
|
|
} else {
|
|
if HandleEtag(c, "{}") {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{})
|
|
}
|
|
} else {
|
|
database.Db.Where("aired IS NOT NULL AND merge_id IS NULL").Find(&LPs)
|
|
copier.Copy(&ALPs, &LPs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALPs)
|
|
}
|
|
}
|
|
|
|
func GetLpEpisodes(c *gin.Context) {
|
|
if lp, ok := CleanParam(c.Param("lid")); ok {
|
|
if ep, ok := CleanParam(c.Param("eid")); ok {
|
|
var EP database.Episode
|
|
var AEP Episode
|
|
database.Db.Where(ep).First(&EP)
|
|
copier.Copy(&AEP, &EP)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AEP)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AEP)
|
|
} else {
|
|
var LP database.LetsPlay
|
|
var EPs []database.Episode
|
|
var AEPs []Episode
|
|
database.Db.Where(lp).First(&LP)
|
|
database.Db.Model(&LP).Related(&EPs)
|
|
copier.Copy(&AEPs, &EPs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AEPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AEPs)
|
|
}
|
|
} else {
|
|
c.AbortWithStatus(404)
|
|
}
|
|
}
|
|
|
|
func GetRecent(c *gin.Context) {
|
|
var EPs []database.Episode
|
|
var AEPs []Episode
|
|
if limit, ok := CleanParam(c.Param("limit")); ok {
|
|
lim, _ := strconv.Atoi(limit)
|
|
database.Db.Order("aired desc").Limit(lim).Find(&EPs)
|
|
} else {
|
|
database.Db.Order("aired desc").Limit(20).Find(&EPs)
|
|
}
|
|
copier.Copy(&AEPs, &EPs)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AEPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AEPs)
|
|
}
|
|
|
|
func GetSearch(c *gin.Context) {
|
|
if term, ok := CleanParam(c.Param("query")); ok {
|
|
term = strings.Replace(term, " ", "&", -1)
|
|
term = strings.Replace(term, "+", "&", -1)
|
|
if kind, ok := CleanParam(c.Param("type")); ok {
|
|
if kind == "count" {
|
|
lps := 0
|
|
lts := 0
|
|
eps := 0
|
|
database.Db.Model(database.LetsPlay{}).Where("to_tsvector('german', name) @@ to_tsquery('german', ?) AND aired IS NOT NULL AND merge_id IS NULL", term).Count(&lps)
|
|
database.Db.Model(database.LetsTest{}).Where("to_tsvector('german', name) @@ to_tsquery('german', ?)", term).Count(<s)
|
|
database.Db.Model(database.Episode{}).Where("to_tsvector('german', name) @@ to_tsquery('german', ?)", term).Count(&eps)
|
|
response := gin.H{"lets-plays": lps, "tests": lts, "episodes": eps}
|
|
if HandleEtag(c, fmt.Sprintf("%#v", response)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, response)
|
|
} else if kind == "lets-plays" {
|
|
var lps []database.LetsPlay
|
|
var ALPs []LetsPlay
|
|
database.Db.Where("to_tsvector('german', name) @@ to_tsquery('german', ?) AND aired IS NOT NULL AND merge_id IS NULL", term).Find(&lps)
|
|
copier.Copy(&ALPs, &lps)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALPs)
|
|
} else if kind == "tests" {
|
|
var lts []database.LetsTest
|
|
var ALTs []LetsTest
|
|
database.Db.Where("to_tsvector('german', name) @@ to_tsquery('german', ?)", term).Find(<s)
|
|
copier.Copy(&ALTs, <s)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", ALTs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, ALTs)
|
|
} else if kind == "episodes" {
|
|
var eps []database.Episode
|
|
var AEPs []Episode
|
|
database.Db.Where("to_tsvector('german', name) @@ to_tsquery('german', ?)", term).Find(&eps)
|
|
copier.Copy(&AEPs, &eps)
|
|
if HandleEtag(c, fmt.Sprintf("%#v", AEPs)) {
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, AEPs)
|
|
} else {
|
|
c.AbortWithStatus(400)
|
|
}
|
|
} else {
|
|
c.AbortWithStatus(400)
|
|
}
|
|
} else {
|
|
c.AbortWithStatus(400)
|
|
}
|
|
}
|