69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"devone.aplikasi.web.id/gitea/mario/go-ohif-proxy/internal/api/service"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// RegisterHandler handles user registration requests
|
|
type RegisterHandler struct {
|
|
logger *zap.Logger
|
|
registerService *service.RegisterService
|
|
}
|
|
|
|
// NewRegisterHandler creates a new registration handler
|
|
func NewRegisterHandler(logger *zap.Logger, registerService *service.RegisterService) *RegisterHandler {
|
|
return &RegisterHandler{
|
|
logger: logger,
|
|
registerService: registerService,
|
|
}
|
|
}
|
|
|
|
// Register handles the creation of new users, patients, and doctors
|
|
func (h *RegisterHandler) Register(w http.ResponseWriter, r *http.Request) {
|
|
// Parse registration request
|
|
var req service.RegisterRequest
|
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
|
h.logger.Error("Failed to parse registration request", zap.Error(err))
|
|
http.Error(w, "Invalid request body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Validate required fields
|
|
if req.Email == "" || req.Password == "" || req.Name == "" || req.Role == "" {
|
|
http.Error(w, "Missing required fields", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Perform registration
|
|
user, err := h.registerService.Register(&req)
|
|
if err != nil {
|
|
switch err {
|
|
case service.ErrEmailExists:
|
|
http.Error(w, "Email already exists", http.StatusConflict)
|
|
case service.ErrInvalidRole:
|
|
http.Error(w, "Invalid user role", http.StatusBadRequest)
|
|
case service.ErrInvalidPatient:
|
|
http.Error(w, "Invalid patient data", http.StatusBadRequest)
|
|
case service.ErrInvalidDoctor:
|
|
http.Error(w, "Invalid doctor data", http.StatusBadRequest)
|
|
default:
|
|
h.logger.Error("Registration failed", zap.Error(err))
|
|
http.Error(w, "Registration failed", http.StatusInternalServerError)
|
|
}
|
|
return
|
|
}
|
|
|
|
// Return created user
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusCreated)
|
|
|
|
// Don't include password in response
|
|
user.Password = ""
|
|
|
|
json.NewEncoder(w).Encode(user)
|
|
}
|