No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

16 Días
13 Hrs
37 Min
46 Seg

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)