No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Implementando el registro

11/26
Recursos

Aportes 7

Preguntas 2

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

Considerando que es un curso avanzado de go, veo bastante bien que haya incluido docker para la creacion de la bbdd y asi no cargar el curso con un video de instalacion de bbdd o de introduccion a docker, ya que al ser golang no deberia de mesclarse, queda como tarea para los estudiantes aprender a instalar docker, lo cual es sumamente sencillo y luego solo correr el dockerfile y no se tendria ningun problema, utilizar docker para el levantado en base de datos me parece muy novedoso y util para este tipo de cursos
Excelente!

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>

 

No me parece que sea correcto meter aqu√≠ Docker sin ninguna clase de explicaci√≥n. Esto se suele hacer mucho en la ense√Īanza de tecnolog√≠as de creaci√≥n de software y hay que ser consciente para poder detenerlo. Lo que se explica en un curso debe estar previamente introducido, ya sea en el propio curso, en un curso anterior requerido para entender este o ser un conocimiento requerido al iniciar el curso. Docker ac√° no cumple con ninguno de estos items. Quien no lo entiende, tal vez piensa que tiene que hacerse un curso de Docker previamente, y la realidad es que no tiene nada que ver con este curso, no deber√≠a tener que aprenderlo.
Punto negativo para el curso.

Creo que hay varías formas de resolver el problema y ya dependerá de nuestro equipo o como le qusieramos hacer. Personalmente lo haría verificando a nivel de codigo si existe un usuario con ese correo, si existe que retorne error, sino que proceda a hacer el insert.

Otra forma podría ser creando un Trigger a nivel de DB y verificar en la propia base de datos si existe un registro con el correo, y si es así que haga un rollback de la transacción.

go get github.com/lib/pq
go get github.com/segmentio/ksuid
Pienso que al SignUpHandler debemos agregarle un código http 201 CREATED w.WriteHeader(http.StatusCreated)