first coomit
This commit is contained in:
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="JavaScriptSettings">
|
||||||
|
<option name="languageLevel" value="ES6" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/nbarest.iml" filepath="$PROJECT_DIR$/.idea/nbarest.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+9
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="Go" enabled="true" />
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
FROM golang:1.9
|
||||||
|
|
||||||
|
WORKDIR /go/src
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
WORKDIR ./nbarest
|
||||||
|
|
||||||
|
ENV GOPATH=/go
|
||||||
|
|
||||||
|
RUN go get "github.com/gorilla/mux"
|
||||||
|
RUN go get "gopkg.in/mgo.v2"
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -o /nbaservice ./nbaservice
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXPOSE 8181
|
||||||
|
|
||||||
|
CMD ["/nbaservice"]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
test:
|
||||||
|
build:
|
||||||
|
context: ..
|
||||||
|
dockerfile: ./nbarest/Dockerfile.service
|
||||||
|
ports:
|
||||||
|
- "8181:8181"
|
||||||
|
links:
|
||||||
|
- mongodb
|
||||||
|
|
||||||
|
mongodb:
|
||||||
|
image: mongo
|
||||||
|
ports:
|
||||||
|
- "27017:27017"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
module nbarest
|
||||||
|
|
||||||
|
go 1.14
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gorilla/mux v1.7.4
|
||||||
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||||
|
)
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||||
|
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||||
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||||
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package persistence
|
||||||
|
|
||||||
|
import "gopkg.in/mgo.v2/bson"
|
||||||
|
|
||||||
|
type Player struct{
|
||||||
|
ID bson.ObjectId `bson:"_id"`
|
||||||
|
Name string
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package mongolayer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gopkg.in/mgo.v2"
|
||||||
|
"gopkg.in/mgo.v2/bson"
|
||||||
|
"nbarest/lib/persistence"
|
||||||
|
)
|
||||||
|
|
||||||
|
const(
|
||||||
|
DB="myplayers"
|
||||||
|
PLAYER="players"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewMongoDBLayer(connection string)(persistence.DatabaseHandler,error){
|
||||||
|
s,err:=mgo.Dial(connection)
|
||||||
|
if err!=nil{
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return &MongoDBLayer{session: s},err
|
||||||
|
}
|
||||||
|
|
||||||
|
type MongoDBLayer struct {
|
||||||
|
session *mgo.Session
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MongoDBLayer) AddPlayer(p persistence.Player)([]byte,error){
|
||||||
|
s:=m.getFreshSession()
|
||||||
|
defer s.Close()
|
||||||
|
if !p.ID.Valid(){
|
||||||
|
p.ID=bson.NewObjectId()
|
||||||
|
}
|
||||||
|
return []byte(p.ID),s.DB(DB).C(PLAYER).Insert(p)
|
||||||
|
|
||||||
|
}
|
||||||
|
func (m *MongoDBLayer) FindPlayer(id []byte)(persistence.Player,error){
|
||||||
|
s:=m.getFreshSession()
|
||||||
|
defer s.Close()
|
||||||
|
p:= persistence.Player{}
|
||||||
|
err:=s.DB(DB).C(PLAYER).FindId(bson.ObjectId(id)).One(&p)
|
||||||
|
return p,err
|
||||||
|
}
|
||||||
|
func (m *MongoDBLayer) FindPlayerByName(name string)(persistence.Player,error){
|
||||||
|
s:=m.getFreshSession()
|
||||||
|
defer s.Close()
|
||||||
|
p:= persistence.Player{}
|
||||||
|
err:=s.DB(DB).C(PLAYER).Find(bson.M{"name": name}).One(&p)
|
||||||
|
return p,err
|
||||||
|
}
|
||||||
|
func (m*MongoDBLayer) FindAllAvailablePlayers()([]persistence.Player,error){
|
||||||
|
s:=m.getFreshSession()
|
||||||
|
defer s.Close()
|
||||||
|
ps:=[]persistence.Player{}
|
||||||
|
err:=s.DB(DB).C(PLAYER).Find(nil).All(&ps)
|
||||||
|
return ps,err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MongoDBLayer) getFreshSession() *mgo.Session{
|
||||||
|
return m.session.Copy()
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package persistence
|
||||||
|
|
||||||
|
|
||||||
|
type DatabaseHandler interface {
|
||||||
|
AddPlayer(Player)([]byte,error)
|
||||||
|
FindPlayer([]byte)(Player,error)
|
||||||
|
FindPlayerByName(string)(Player,error)
|
||||||
|
FindAllAvailablePlayers()([]Player,error)
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,30 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"nbarest/lib/persistence/mongolayer"
|
||||||
|
"nbarest/nbaservice/rest"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main(){
|
||||||
|
dbhandler,err:= mongolayer.NewMongoDBLayer("mongodb://mongodb:27017")
|
||||||
|
if err!=nil{
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
log.Fatal(rest.ServeAPI(":8181",dbhandler))
|
||||||
|
|
||||||
|
//r:=mux.NewRouter()
|
||||||
|
//http.Handle("/",r)
|
||||||
|
//
|
||||||
|
//r.HandleFunc("/test",TestHandler)
|
||||||
|
//
|
||||||
|
//http.ListenAndServe(":8181",r)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestHandler(w http.ResponseWriter,r *http.Request){
|
||||||
|
fmt.Fprintln(w,"connect")
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package rest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"nbarest/lib/persistence"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewPlayerServiceHandler(handler persistence.DatabaseHandler) *playerServiceHandler{
|
||||||
|
return &playerServiceHandler{
|
||||||
|
dbhandler: handler,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type playerServiceHandler struct{
|
||||||
|
dbhandler persistence.DatabaseHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph *playerServiceHandler) FindPlayerHandler(w http.ResponseWriter,r *http.Request){
|
||||||
|
fmt.Println("FindPlayerHandler")
|
||||||
|
vars:=mux.Vars(r)
|
||||||
|
criteria,ok:=vars["SearchCriteria"]
|
||||||
|
if !ok{
|
||||||
|
w.WriteHeader(400)
|
||||||
|
fmt.Fprintln(w,"error")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
searchkey,ok:=vars["search"]
|
||||||
|
if !ok{
|
||||||
|
w.WriteHeader(400)
|
||||||
|
fmt.Fprintln(w,"error")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var player persistence.Player
|
||||||
|
var err error
|
||||||
|
|
||||||
|
switch strings.ToLower(criteria) {
|
||||||
|
case "name":
|
||||||
|
player,err=ph.dbhandler.FindPlayerByName(searchkey)
|
||||||
|
case "id":
|
||||||
|
id,err:=hex.DecodeString(searchkey)
|
||||||
|
if err==nil{
|
||||||
|
player,err=ph.dbhandler.FindPlayer(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err!=nil{
|
||||||
|
fmt.Fprintln(w,`{"error"} "%s"`,err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println("find"+searchkey)
|
||||||
|
w.Header().Set("Content-Type","application/json;charset=utf8")
|
||||||
|
json.NewEncoder(w).Encode(&player)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph *playerServiceHandler) NewPlayerHandler(w http.ResponseWriter, r *http.Request){
|
||||||
|
fmt.Println("NewPlayerHandler")
|
||||||
|
player:= persistence.Player{}
|
||||||
|
err:=json.NewDecoder(r.Body).Decode(&player)
|
||||||
|
if err!=nil{
|
||||||
|
w.WriteHeader(500)
|
||||||
|
fmt.Fprintln(w,`{"error"}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
id,err:=ph.dbhandler.AddPlayer(player)
|
||||||
|
if nil!=err{
|
||||||
|
w.WriteHeader(500)
|
||||||
|
fmt.Fprintln(w,`{"error"}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprint(w,`{"id":%d}`,id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph *playerServiceHandler) FindAllPlayerHandler(w http.ResponseWriter,r *http.Request){
|
||||||
|
fmt.Println("FindAllPlayerHandler")
|
||||||
|
players,err:= ph.dbhandler.FindAllAvailablePlayers()
|
||||||
|
if err!=nil{
|
||||||
|
w.WriteHeader(500)
|
||||||
|
fmt.Fprintln(w,`{"error"}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json;charset=utf8")
|
||||||
|
err=json.NewEncoder(w).Encode(&players)
|
||||||
|
if err!=nil{
|
||||||
|
w.WriteHeader(500)
|
||||||
|
fmt.Fprintln(w,`{"error"}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package rest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"nbarest/lib/persistence"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ServeAPI(endpoint string,dbhandler persistence.DatabaseHandler) error{
|
||||||
|
handler:=NewPlayerServiceHandler(dbhandler)
|
||||||
|
r:=mux.NewRouter()
|
||||||
|
playersrouter:=r.PathPrefix("/players").Subrouter()
|
||||||
|
|
||||||
|
playersrouter.Path("/{SearchCriteria}/{search}").HandlerFunc(handler.FindPlayerHandler).Methods("GET")
|
||||||
|
playersrouter.Path("/").HandlerFunc(handler.FindAllPlayerHandler).Methods("GET")
|
||||||
|
playersrouter.Path("/").HandlerFunc(handler.NewPlayerHandler).Methods("POST")
|
||||||
|
fmt.Println("listen")
|
||||||
|
return http.ListenAndServe(endpoint,r)
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user