2015-09-25 22:33:55 +00:00
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 ( & LTs )
} else {
c . AbortWithStatus ( 404 )
}
copier . Copy ( & ALTs , & LTs )
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 )
2016-02-28 14:39:37 +00:00
database . Db . Model ( & AT ) . Where ( "aired IS NOT NULL AND merge_id IS NULL" ) . Related ( & LPs )
2015-09-25 22:33:55 +00:00
} 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 ( & LTs )
if len ( LTs ) > 0 {
copier . Copy ( & ALTs , & LTs )
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 ( & LTs )
copier . Copy ( & ALTs , & LTs )
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 {
2016-02-28 14:39:37 +00:00
database . Db . Where ( "id=? AND aired IS NOT NULL and merge_id IS NULL" , lp ) . Find ( & LPs )
2015-09-25 22:33:55 +00:00
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 {
2016-02-28 14:39:37 +00:00
database . Db . Where ( "aired IS NOT NULL AND merge_id IS NULL" ) . Find ( & LPs )
2015-09-25 22:33:55 +00:00
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
2016-02-28 20:45:55 +00:00
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 )
2015-09-25 22:33:55 +00:00
database . Db . Model ( database . LetsTest { } ) . Where ( "to_tsvector('german', name) @@ to_tsquery('german', ?)" , term ) . Count ( & lts )
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
2016-02-28 20:45:55 +00:00
database . Db . Where ( "to_tsvector('german', name) @@ to_tsquery('german', ?) AND aired IS NOT NULL AND merge_id IS NULL" , term ) . Find ( & lps )
2015-09-25 22:33:55 +00:00
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 ( & lts )
copier . Copy ( & ALTs , & lts )
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 )
}
}