feat: added API gateway
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"datarush/internal/gw/domain"
|
||||
"datarush/internal/gw/grpc_client"
|
||||
"datarush/internal/gw/utils"
|
||||
)
|
||||
|
||||
type AuthHandler struct {
|
||||
authClient *grpc_client.AuthClient
|
||||
userClient *grpc_client.UserClient
|
||||
}
|
||||
|
||||
func NewAuthHandler(authClient *grpc_client.AuthClient, userClient *grpc_client.UserClient) *AuthHandler {
|
||||
return &AuthHandler{
|
||||
authClient: authClient,
|
||||
userClient: userClient,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *AuthHandler) SignUp(w http.ResponseWriter, r *http.Request) {
|
||||
var req domain.SignUpRequest
|
||||
if err := utils.DecodeJSON(r, &req); err != nil {
|
||||
utils.RespondError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
token, err := h.authClient.SignUp(r.Context(), req.Email, req.Username, req.Password)
|
||||
if err != nil {
|
||||
utils.RespondError(w, domain.NewInternalServerError("sign up failed"))
|
||||
return
|
||||
}
|
||||
|
||||
utils.RespondJSON(w, http.StatusCreated, &domain.TokenResponse{Token: token})
|
||||
}
|
||||
|
||||
func (h *AuthHandler) SignIn(w http.ResponseWriter, r *http.Request) {
|
||||
var req domain.SignInRequest
|
||||
if err := utils.DecodeJSON(r, &req); err != nil {
|
||||
utils.RespondError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
token, err := h.authClient.SignIn(r.Context(), req.Email, req.Password)
|
||||
if err != nil {
|
||||
utils.RespondError(w, domain.NewUnauthorizedError("invalid credentials"))
|
||||
return
|
||||
}
|
||||
|
||||
utils.RespondJSON(w, http.StatusOK, &domain.TokenResponse{Token: token})
|
||||
}
|
||||
|
||||
func (h *AuthHandler) GetMe(w http.ResponseWriter, r *http.Request) {
|
||||
userID, err := getUserIDFromContext(r.Context())
|
||||
if err != nil {
|
||||
utils.RespondError(w, domain.NewUnauthorizedError("unauthorized"))
|
||||
return
|
||||
}
|
||||
|
||||
user, err := h.userClient.GetProfile(r.Context(), userID)
|
||||
if err != nil {
|
||||
utils.RespondError(w, domain.NewInternalServerError("failed to get user profile"))
|
||||
return
|
||||
}
|
||||
|
||||
utils.RespondJSON(w, http.StatusOK, utils.UserProtoToHTTP(user))
|
||||
}
|
||||
Reference in New Issue
Block a user