Files
Datarush/internal/gw/handler/auth_handler.go
T
2025-12-17 11:00:50 +03:00

70 lines
1.8 KiB
Go

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