From 167bf6de04a2fa83085a361dd27d5fa00c52c70c Mon Sep 17 00:00:00 2001 From: Mark Albrand Date: Mon, 9 Oct 2023 13:23:08 -0600 Subject: [PATCH] Public details --- backend/README.md | 34 ++++++++--- backend/controllers/auth.go | 116 ++++++++++++++++++++++++------------ 2 files changed, 105 insertions(+), 45 deletions(-) diff --git a/backend/README.md b/backend/README.md index 5541b8ad..b1e29f88 100644 --- a/backend/README.md +++ b/backend/README.md @@ -89,15 +89,33 @@ Obtener los detalles públicos de un usuario, dado su correo ``` json { "status": 200, - "message": "User found", + "message": "Student found", "data": { - "empresa": { - "id_empresa": "prueba@prueba", - "nombre": "pruebaEmpresa", - "foto": "foto", - "detalles": "empresa de prueba", - "correo": "prueba@prueba", - "telefono": "12344433" + "student": { + "correo": "estudiante@prueba.com", + "nombre": "Estudiante Actualizado", + "apellido": "Prueba", + "nacimiento": "2002-02-02T00:00:00Z", + "carrera": 1, + "semestre": 4, + "cv": "", + "foto": "", + "universidad": "Universidad Del Valle de Guatemala" + } + } +} +``` + +``` json +{ + "status": 200, + "message": "Enterprise found", + "data": { + "company": { + "correo": "empresa@prueba.com", + "nombre": "Empresa de Prueba", + "foto": "", + "detalles": "Detalles de Prueba" } } } diff --git a/backend/controllers/auth.go b/backend/controllers/auth.go index b9ac42a4..0b915d55 100644 --- a/backend/controllers/auth.go +++ b/backend/controllers/auth.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "golang.org/x/crypto/bcrypt" "net/http" + "time" ) type RegisterInput struct { @@ -286,6 +287,25 @@ func CurrentUser(c *gin.Context) { ) } +type PublicDetailsStudent struct { + Correo string `json:"correo"` + Nombre string `json:"nombre"` + Apellido string `json:"apellido"` + Nacimiento time.Time `json:"nacimiento"` + Carrera int `json:"carrera"` + Semestre int `json:"semestre"` + CV string `json:"cv"` + Foto string `json:"foto"` + Universidad string `json:"universidad"` +} + +type PublicDetailsEnterprise struct { + Correo string `json:"correo"` + Nombre string `json:"nombre"` + Foto string `json:"foto"` + Detalles string `json:"detalles"` +} + type UserDetailsInput struct { Correo string `json:"correo"` } @@ -294,63 +314,85 @@ func GetUserDetails(c *gin.Context) { var input UserDetailsInput if err := c.ShouldBindJSON(&input); err != nil { - c.JSON(400, responses.StandardResponse{Status: 400, Message: "Invalid input", Data: nil}) + c.JSON(http.StatusBadRequest, responses.StandardResponse{ + Status: http.StatusBadRequest, + Message: "Invalid input. " + err.Error(), + Data: nil, + }) return } var estudiante models.Estudiante var empresa models.Empresa - var administrador models.Administrador - err := configs.DB.Where("correo = ?", input.Correo).First(&estudiante).Error - if err == nil { - c.JSON(http.StatusOK, responses.StandardResponse{ - Status: 200, - Message: "User found", - Data: map[string]interface{}{ - "estudiante": estudiante, - }, + userType, err := RoleFromUser(models.Usuario{Usuario: input.Correo}) + + if err != nil { + c.JSON(http.StatusBadRequest, responses.StandardResponse{ + Status: http.StatusBadRequest, + Message: "User not found. " + err.Error(), + Data: nil, }) return } - err = configs.DB.Where("correo = ?", input.Correo).First(&empresa).Error + switch userType { + case "student": + err = configs.DB.Where("id_estudiante = ?", input.Correo).First(&estudiante).Error + if err != nil { + c.JSON(http.StatusBadRequest, responses.StandardResponse{ + Status: http.StatusBadRequest, + Message: "Student not found. " + err.Error(), + Data: nil, + }) + return + } - if err == nil { c.JSON(http.StatusOK, responses.StandardResponse{ - Status: 200, - Message: "User found", + Status: http.StatusOK, + Message: "Student found", Data: map[string]interface{}{ - "empresa": empresa, + "student": PublicDetailsStudent{ + Correo: estudiante.Correo, + Nombre: estudiante.Nombre, + Apellido: estudiante.Apellido, + Nacimiento: estudiante.Nacimiento, + Carrera: estudiante.Carrera, + Semestre: estudiante.Semestre, + CV: estudiante.CV, + Foto: estudiante.Foto, + Universidad: estudiante.Universidad, + }, }, }) - return - } - - err = configs.DB.Where("correo = ?", input.Correo).First(&administrador).Error + case "enterprise": + err = configs.DB.Where("id_empresa = ?", input.Correo).First(&empresa).Error + if err != nil { + c.JSON(http.StatusBadRequest, responses.StandardResponse{ + Status: http.StatusBadRequest, + Message: "Enterprise not found. " + err.Error(), + Data: nil, + }) + return + } - if err == nil { - c.JSON(http.StatusUnauthorized, responses.StandardResponse{ - Status: 401, - Message: "Access denied", - Data: nil, + c.JSON(http.StatusOK, responses.StandardResponse{ + Status: http.StatusOK, + Message: "Enterprise found", + Data: map[string]interface{}{ + "company": PublicDetailsEnterprise{ + Correo: empresa.Correo, + Nombre: empresa.Nombre, + Foto: empresa.Foto, + Detalles: empresa.Detalles, + }, + }, }) - return - } - - if err != nil { + default: c.JSON(http.StatusBadRequest, responses.StandardResponse{ - Status: 400, + Status: http.StatusBadRequest, Message: "User not found. " + err.Error(), Data: nil, }) - return } - - c.JSON(http.StatusOK, responses.StandardResponse{ - Status: 400, - Message: "User not found", - Data: nil, - }, - ) }