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