feat: added API gateway
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"datarush/internal/gw/handler"
|
||||
"datarush/internal/gw/middleware"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
authHandler *handler.AuthHandler
|
||||
competitionHandler *handler.CompetitionHandler
|
||||
taskHandler *handler.TaskHandler
|
||||
submissionHandler *handler.SubmissionHandler
|
||||
resultsHandler *handler.ResultsHandler
|
||||
reviewHandler *handler.ReviewHandler
|
||||
achievementsHandler *handler.AchievementsHandler
|
||||
pingHandler *handler.PingHandler
|
||||
authMiddleware *middleware.AuthMiddleware
|
||||
}
|
||||
|
||||
func NewRouter(
|
||||
authHandler *handler.AuthHandler,
|
||||
competitionHandler *handler.CompetitionHandler,
|
||||
taskHandler *handler.TaskHandler,
|
||||
submissionHandler *handler.SubmissionHandler,
|
||||
resultsHandler *handler.ResultsHandler,
|
||||
reviewHandler *handler.ReviewHandler,
|
||||
achievementsHandler *handler.AchievementsHandler,
|
||||
pingHandler *handler.PingHandler,
|
||||
authMiddleware *middleware.AuthMiddleware,
|
||||
) *Router {
|
||||
return &Router{
|
||||
authHandler: authHandler,
|
||||
competitionHandler: competitionHandler,
|
||||
taskHandler: taskHandler,
|
||||
submissionHandler: submissionHandler,
|
||||
resultsHandler: resultsHandler,
|
||||
reviewHandler: reviewHandler,
|
||||
achievementsHandler: achievementsHandler,
|
||||
pingHandler: pingHandler,
|
||||
authMiddleware: authMiddleware,
|
||||
}
|
||||
}
|
||||
|
||||
func (rt *Router) Setup() http.Handler {
|
||||
r := mux.NewRouter()
|
||||
|
||||
r.Use(middleware.LoggingMiddleware)
|
||||
r.Use(middleware.CORSMiddleware)
|
||||
|
||||
api := r.PathPrefix("/api/v1").Subrouter()
|
||||
|
||||
api.HandleFunc("/ping", rt.pingHandler.Ping).Methods(http.MethodGet)
|
||||
api.HandleFunc("/sign-up", rt.authHandler.SignUp).Methods(http.MethodPost)
|
||||
api.HandleFunc("/sign-in", rt.authHandler.SignIn).Methods(http.MethodPost)
|
||||
|
||||
protected := api.PathPrefix("").Subrouter()
|
||||
protected.Use(rt.authMiddleware.Authenticate)
|
||||
|
||||
protected.HandleFunc("/me", rt.authHandler.GetMe).Methods(http.MethodGet)
|
||||
|
||||
protected.HandleFunc("/competitions", rt.competitionHandler.CreateCompetition).Methods(http.MethodPost)
|
||||
protected.HandleFunc("/competitions", rt.competitionHandler.ListCompetitions).Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}", rt.competitionHandler.GetCompetition).Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}", rt.competitionHandler.UpdateCompetition).
|
||||
Methods(http.MethodPut)
|
||||
protected.HandleFunc("/competitions/{competition_id}", rt.competitionHandler.DeleteCompetition).
|
||||
Methods(http.MethodDelete)
|
||||
protected.HandleFunc("/competitions/{competition_id}/state", rt.competitionHandler.ChangeCompetitionState).
|
||||
Methods(http.MethodPatch)
|
||||
protected.HandleFunc("/competitions/{competition_id}/join", rt.competitionHandler.JoinCompetition).
|
||||
Methods(http.MethodPost)
|
||||
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks", rt.taskHandler.CreateTask).Methods(http.MethodPost)
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks", rt.taskHandler.ListTasks).Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks/{task_id}", rt.taskHandler.GetTask).
|
||||
Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks/{task_id}", rt.taskHandler.UpdateTask).
|
||||
Methods(http.MethodPut)
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks/{task_id}", rt.taskHandler.DeleteTask).
|
||||
Methods(http.MethodDelete)
|
||||
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks/{task_id}/submit", rt.submissionHandler.SubmitTask).
|
||||
Methods(http.MethodPost)
|
||||
protected.HandleFunc("/competitions/{competition_id}/tasks/{task_id}/history", rt.submissionHandler.GetSubmissionHistory).
|
||||
Methods(http.MethodGet)
|
||||
|
||||
protected.HandleFunc("/competitions/{competition_id}/results", rt.resultsHandler.GetCompetitionResults).
|
||||
Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}/results/me", rt.resultsHandler.GetMyResults).
|
||||
Methods(http.MethodGet)
|
||||
protected.HandleFunc("/competitions/{competition_id}/results/recalculate", rt.resultsHandler.RecalculateResults).
|
||||
Methods(http.MethodPost)
|
||||
|
||||
protected.HandleFunc("/achievements", rt.achievementsHandler.ListAchievements).Methods(http.MethodGet)
|
||||
protected.HandleFunc("/achievements/{achievement_id}", rt.achievementsHandler.GetAchievement).
|
||||
Methods(http.MethodGet)
|
||||
protected.HandleFunc("/users/{user_id}/achievements", rt.achievementsHandler.GetUserAchievements).
|
||||
Methods(http.MethodGet)
|
||||
|
||||
api.HandleFunc("/review/{token}/submissions", rt.reviewHandler.ListSubmissionsForReview).Methods(http.MethodGet)
|
||||
api.HandleFunc("/review/{token}/submissions/{submission_id}", rt.reviewHandler.GetSubmissionForReview).
|
||||
Methods(http.MethodGet)
|
||||
api.HandleFunc("/review/{token}/submissions/{submission_id}/evaluate", rt.reviewHandler.EvaluateSubmission).
|
||||
Methods(http.MethodPost)
|
||||
api.HandleFunc("/review/{token}/submissions/{submission_id}/release", rt.reviewHandler.ReleaseSubmission).
|
||||
Methods(http.MethodPost)
|
||||
|
||||
return r
|
||||
}
|
||||
Reference in New Issue
Block a user