No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

3D
10H
50M
38S

Implementando el registro

11/26
Recursos

Aportes 6

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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>

 

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!

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/segmentio/ksuid
go get github.com/lib/pq