Add rest router
diff --git a/core/kg/api/rest/router.go b/core/kg/api/rest/router.go
new file mode 100644
index 0000000..8e695f2
--- /dev/null
+++ b/core/kg/api/rest/router.go
@@ -0,0 +1,39 @@
+package rest
+
+import (
+ "net/http"
+
+ "github.com/gorilla/mux"
+)
+
+const APIURLSuffix = "/api/v1"
+
+type Routers struct {
+ Root *mux.Router // ''
+ APIRoot *mux.Router // 'api/v1'
+ Users *mux.Router // 'api/v1/users'
+ User *mux.Router // 'api/v1/users/{user_id:[A-Za-z0-9]+}'
+}
+
+func NewRouter(root *mux.Router) *Routers {
+ apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
+ users := apiRoot.PathPrefix("/users").Subrouter()
+ user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
+
+ routers := &Routers{
+ Root: root,
+ APIRoot: apiRoot,
+ Users: users,
+ User: user,
+ }
+ root.Handle("/api/v1/{anything:.*}", http.HandlerFunc(http.NotFound))
+ routers.initUsers()
+
+ return routers
+}
+
+func (r *Routers) initUsers() {
+ r.Users.Handle("", http.HandlerFunc(createUser)).Methods("POST")
+ r.Users.Handle("", http.HandlerFunc(getUsers)).Methods("GET")
+ r.User.Handle("", http.HandlerFunc(getUser)).Methods("GET")
+}
diff --git a/core/kg/api/rest/user_service.go b/core/kg/api/rest/user_service.go
new file mode 100644
index 0000000..91c7cb6
--- /dev/null
+++ b/core/kg/api/rest/user_service.go
@@ -0,0 +1,12 @@
+package rest
+
+import "net/http"
+
+func createUser(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUsers(w http.ResponseWriter, r *http.Request) {
+}
+
+func getUser(w http.ResponseWriter, r *http.Request) {
+}
diff --git a/core/kg/rpc/user_service.go b/core/kg/api/rpc/user_service.go
similarity index 90%
rename from core/kg/rpc/user_service.go
rename to core/kg/api/rpc/user_service.go
index ee385cb..c424cee 100644
--- a/core/kg/rpc/user_service.go
+++ b/core/kg/api/rpc/user_service.go
@@ -3,6 +3,7 @@
import (
"context"
+ "github.com/giolekva/pcloud/core/kg/common"
"github.com/giolekva/pcloud/core/kg/model/proto"
"github.com/pkg/errors"
"google.golang.org/protobuf/types/known/timestamppb"
@@ -10,11 +11,11 @@
type userService struct {
proto.UnimplementedUserServiceServer
- app appIface
+ app common.AppIface
}
// NewService returns new user service
-func NewService(app appIface) proto.UserServiceServer {
+func NewService(app common.AppIface) proto.UserServiceServer {
s := &userService{
app: app,
}
diff --git a/core/kg/rpc/user_service_test.go b/core/kg/api/rpc/user_service_test.go
similarity index 100%
rename from core/kg/rpc/user_service_test.go
rename to core/kg/api/rpc/user_service_test.go
diff --git a/core/kg/rpc/interfaces.go b/core/kg/rpc/interfaces.go
deleted file mode 100644
index 0cd072a..0000000
--- a/core/kg/rpc/interfaces.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package rpc
-
-import "github.com/giolekva/pcloud/core/kg/model"
-
-type appIface interface {
- GetUser(userID string) (*model.User, error)
-}
diff --git a/core/kg/server/grpc_server.go b/core/kg/server/grpc_server.go
index 20aed55..af0b945 100644
--- a/core/kg/server/grpc_server.go
+++ b/core/kg/server/grpc_server.go
@@ -5,11 +5,11 @@
"net"
"os"
+ "github.com/giolekva/pcloud/core/kg/api/rpc"
"github.com/giolekva/pcloud/core/kg/common"
"github.com/giolekva/pcloud/core/kg/log"
"github.com/giolekva/pcloud/core/kg/model"
"github.com/giolekva/pcloud/core/kg/model/proto"
- "github.com/giolekva/pcloud/core/kg/rpc"
"google.golang.org/grpc"
)
diff --git a/core/kg/server/http_server.go b/core/kg/server/http_server.go
index 6b07914..dd8151a 100644
--- a/core/kg/server/http_server.go
+++ b/core/kg/server/http_server.go
@@ -8,6 +8,7 @@
"os"
"time"
+ "github.com/giolekva/pcloud/core/kg/api/rest"
"github.com/giolekva/pcloud/core/kg/common"
"github.com/giolekva/pcloud/core/kg/log"
"github.com/giolekva/pcloud/core/kg/model"
@@ -17,11 +18,11 @@
// HTTPServerImpl http server implementation
type HTTPServerImpl struct {
- Log common.LoggerIface
- srv *http.Server
- root *mux.Router
- config *model.Config
- store store.Store
+ Log common.LoggerIface
+ srv *http.Server
+ routers *rest.Routers
+ config *model.Config
+ store store.Store
}
var _ Server = &HTTPServerImpl{}
@@ -29,10 +30,10 @@
// NewHTTPServer creates new HTTP Server
func NewHTTPServer(logger common.LoggerIface, config *model.Config, store store.Store) Server {
a := &HTTPServerImpl{
- Log: logger,
- root: mux.NewRouter(),
- config: config,
- store: store,
+ Log: logger,
+ routers: rest.NewRouter(mux.NewRouter()),
+ config: config,
+ store: store,
}
pwd, _ := os.Getwd()
@@ -46,7 +47,7 @@
a.srv = &http.Server{
Addr: fmt.Sprintf("%s:%d", a.config.HTTP.Host, a.config.HTTP.Port),
- Handler: a.root,
+ Handler: a.routers.Root,
ReadTimeout: time.Duration(a.config.HTTP.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(a.config.HTTP.WriteTimeout) * time.Second,
IdleTimeout: time.Duration(a.config.HTTP.IdleTimeout) * time.Second,