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