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) }