Files
ris-backend-go/services/user/user.routes.go
2024-12-09 09:51:19 +07:00

124 lines
3.4 KiB
Go

package user
import (
"fmt"
"net/http"
"github.com/golang-jwt/jwt/v5"
"github.com/gorilla/mux"
"sismedika.com/sas/westone/services/auth"
"sismedika.com/sas/westone/types"
"sismedika.com/sas/westone/utils"
)
type Handler struct {
store types.UserStore
errorStore types.ErrorLogStore
}
func NewHandler(store types.UserStore, errorStore types.ErrorLogStore) *Handler {
return &Handler{
store: store,
errorStore: errorStore,
}
}
func (h *Handler) RegisterRoutes(router *mux.Router) {
router.HandleFunc("/login", h.handleLogin).Methods("POST")
router.HandleFunc("/register", h.handleRegister).Methods("POST")
// admin routes
// router.HandleFunc("/users/{userID}", auth.WithJWTAuth(h.handleGetUser)).Methods(http.MethodGet)
}
func (h *Handler) handleLogin(w http.ResponseWriter, r *http.Request) {
// var payload types.SignInPayload
// if err := utils.ParseJSON(r, &payload); err != nil {
// utils.WriteError(w, http.StatusBadRequest, err)
// return
// }
// if err := utils.Validate.Struct(payload); err != nil {
// errors := err.(validator.ValidationErrors)
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errors))
// return
// }
// hashedPassword := auth.HashWithMD5(payload.Password)
// response, err := h.store.SignIn(payload.Email, hashedPassword)
// if err != nil {
// var logError *utils.LogError
// if errors.As(err, &logError) {
// h.errorStore.CreateErrorLog(*logError)
// utils.WriteErrorLog(w, http.StatusBadRequest, *logError)
// }
// return
// }
// // remoteAddr := r.RemoteAddr
// // userAgent := r.UserAgent()
// // response.IP = remoteAddr
// // response.Agent = userAgent
// secret := []byte(configs.Envs.JWTSecret)
// token, err := auth.CreateJWT(secret, *response)
// if err != nil {
// utils.WriteError(w, http.StatusInternalServerError, err)
// return
// }
// utils.WriteJSONLogin(w, http.StatusOK, response, token, "westone")
}
func (h *Handler) handleRegister(w http.ResponseWriter, r *http.Request) {
// var user types.RegisterUserPayload
// if err := utils.ParseJSON(r, &user); err != nil {
// utils.WriteError(w, http.StatusBadRequest, err)
// return
// }
// if err := utils.Validate.Struct(user); err != nil {
// errors := err.(validator.ValidationErrors)
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errors))
// return
// }
// // check if user exists
// _, err := h.store.GetUserByEmail(user.Email)
// if err == nil {
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("user with email %s already exists", user.Email))
// return
// }
// // hash password
// hashedPassword, err := auth.HashPassword(user.Password)
// if err != nil {
// utils.WriteError(w, http.StatusInternalServerError, err)
// return
// }
// err = h.store.CreateUser(types.User{
// FirstName: user.FirstName,
// LastName: user.LastName,
// Email: user.Email,
// Password: hashedPassword,
// })
// if err != nil {
// utils.WriteError(w, http.StatusInternalServerError, err)
// return
// }
// utils.WriteJSON(w, http.StatusCreated, nil)
}
func (h *Handler) handleGetUser(w http.ResponseWriter, r *http.Request) {
claims, ok := r.Context().Value(auth.UserContextKey).(jwt.MapClaims)
if !ok {
utils.WriteError(w, http.StatusInternalServerError, fmt.Errorf("token not found in context"))
return
}
email := claims["M_UserEmail"]
utils.WriteJSON(w, http.StatusOK, email)
}