package handlers
import (
"encoding/json"
"net/http"
"github.com/segmentio/ksuid"
"platzi.com/models"
"platzi.com/repository"
"platzi.com/server"
)
type SignUpRequest struct {
Email string `json:"email"`
Password string `json:"password"`
}
type SignUpResponse struct {
Id string `json:"id"`
Email string `json:"email"`
}
func SignUpHandler(s server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var request = SignUpRequest{}
err := json.NewDecoder(r.Body).Decode(&request)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
id, err := ksuid.NewRandom()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
var user = models.User{
Email: request.Email,
Pass: request.Password,
ID: id.String(),
}
err = repository.InsertUser(r.Context(), &user) // se inyecta la implementacion de la interfaz en tiempo de ejecucion
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(SignUpResponse{
Id: user.ID,
Email: user.Email,
})
}
}
<code>
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.