89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
package api
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/jmoiron/sqlx"
|
|
"github.com/rs/cors"
|
|
httpSwagger "github.com/swaggo/http-swagger/v2"
|
|
"sismedika.com/sas/westone/services/auth"
|
|
"sismedika.com/sas/westone/services/doctor"
|
|
"sismedika.com/sas/westone/services/error_log"
|
|
"sismedika.com/sas/westone/services/patient"
|
|
"sismedika.com/sas/westone/services/person"
|
|
"sismedika.com/sas/westone/services/terminology"
|
|
"sismedika.com/sas/westone/services/user"
|
|
)
|
|
|
|
type APIServer struct {
|
|
addr string
|
|
db *sqlx.DB
|
|
}
|
|
|
|
func NewAPIServer(addr string, db *sqlx.DB) *APIServer {
|
|
return &APIServer{
|
|
addr: addr,
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (s *APIServer) Run() error {
|
|
router := mux.NewRouter()
|
|
subrouter := router.PathPrefix("/westone/api/v1").Subrouter()
|
|
|
|
subrouter.PathPrefix("/swagger/").Handler(httpSwagger.Handler())
|
|
|
|
// Error Log
|
|
errorLogStore := error_log.NewStore(s.db)
|
|
|
|
// terminology
|
|
terminologyStore := terminology.NewStore(s.db)
|
|
terminologyHandler := terminology.NewHandler(terminologyStore)
|
|
terminologyHandler.RegisterRoutes(subrouter)
|
|
|
|
// user
|
|
userStore := user.NewStore(s.db)
|
|
|
|
// auth
|
|
oauthStore := auth.NewStore(s.db)
|
|
oauthHandler := auth.NewHandler(oauthStore, errorLogStore, userStore)
|
|
oauthHandler.RegisterRoutes(subrouter)
|
|
|
|
// md person
|
|
personStore := person.NewStore(s.db)
|
|
personHandler := person.NewHandler(personStore, terminologyStore)
|
|
personHandler.RegisterRoutes(subrouter)
|
|
|
|
// md patient
|
|
patientStore := patient.NewStore(s.db)
|
|
patientHandler := patient.NewHandler(patientStore)
|
|
patientHandler.RegisterRoutes(subrouter)
|
|
|
|
// md doctor
|
|
doctorStore := doctor.NewStore(s.db)
|
|
doctorHandler := doctor.NewHandler(doctorStore)
|
|
doctorHandler.RegisterRoutes(subrouter)
|
|
|
|
// userHandler := user.NewHandler(userStore, errorLogStore)
|
|
// userHandler.RegisterRoutes(subrouter)
|
|
|
|
// productStore := product.NewStore(s.db)
|
|
// productHandler := product.NewHandler(productStore, userStore)
|
|
// productHandler.RegisterRoutes(subrouter)
|
|
|
|
// orderStore := order.NewStore(s.db)
|
|
|
|
// cartHandler := cart.NewHandler(productStore, orderStore, userStore)
|
|
// cartHandler.RegisterRoutes(subrouter)
|
|
|
|
// Serve static files
|
|
router.PathPrefix("/").Handler(http.FileServer(http.Dir("static")))
|
|
|
|
log.Println("Listening on", s.addr)
|
|
|
|
corsHandler := cors.Default().Handler(router)
|
|
return http.ListenAndServe(s.addr, corsHandler)
|
|
}
|