Skip to content

Commit

Permalink
Comment admin.go
Browse files Browse the repository at this point in the history
  • Loading branch information
Diego2250 committed Nov 17, 2023
1 parent 39decb2 commit 2f9f181
Showing 1 changed file with 35 additions and 13 deletions.
48 changes: 35 additions & 13 deletions backend/controllers/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"time"
)

// Input para la función AdminGetStudents
type EstudianteGetAdmin struct {
IdEstudiante string `json:"id_estudiante"`
Nombre string `json:"nombre"`
Expand All @@ -20,6 +21,7 @@ type EstudianteGetAdmin struct {
Suspendido bool `json:"suspendido"`
}

// funcion para determinar si el usuario es administador
func IsAdmin(c *gin.Context) error {
// Solo retorna un error si el usuario no es un administrador
role, err := utils.TokenExtractRole(c)
Expand All @@ -41,9 +43,11 @@ func IsAdmin(c *gin.Context) error {
return nil
}

// funcion para obtener a los estudiantes para el admin
func AdminGetStudents(c *gin.Context) {
var estudiantes []EstudianteGetAdmin

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand Down Expand Up @@ -80,6 +84,7 @@ func AdminGetStudents(c *gin.Context) {
})
}

// Input para la función AdminGetCompanies
type EmpresaGetAdmin struct {
IdEmpresa string `json:"id_empresa"`
Nombre string `json:"nombre"`
Expand All @@ -92,6 +97,7 @@ type EmpresaGetAdmin struct {
func AdminGetCompanies(c *gin.Context) {
var empresas []EmpresaGetAdmin

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand Down Expand Up @@ -128,6 +134,7 @@ func AdminGetCompanies(c *gin.Context) {
})
}

// Input para la función AdminSuspendAccount
type SuspendAccountInput struct {
IdUsuario string `json:"id_usuario"`
Suspender bool `json:"suspender"` // True para suspender, false para reactivar
Expand All @@ -136,6 +143,7 @@ type SuspendAccountInput struct {
func AdminSuspendAccount(c *gin.Context) {
var input SuspendAccountInput

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -147,6 +155,7 @@ func AdminSuspendAccount(c *gin.Context) {
return
}

// Obtiene el input del JSON
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, responses.StandardResponse{
Status: http.StatusBadRequest,
Expand All @@ -156,6 +165,7 @@ func AdminSuspendAccount(c *gin.Context) {
return
}

// Obtiene el rol del usuario a suspender
roleToBeSuspended, err := RoleFromUser(models.Usuario{Usuario: input.IdUsuario})

if err != nil {
Expand All @@ -167,6 +177,7 @@ func AdminSuspendAccount(c *gin.Context) {
return
}

// Verifica que el rol a suspender no sea admin
if roleToBeSuspended == "admin" {
c.JSON(http.StatusForbidden, responses.StandardResponse{
Status: http.StatusForbidden,
Expand Down Expand Up @@ -204,20 +215,11 @@ func AdminSuspendAccount(c *gin.Context) {
})
}

type Offer struct {
IDOferta int `json:"id_oferta"`
IDEmpresa string `json:"id_empresa"`
Puesto string `json:"puesto"`
Descripcion string `json:"descripcion"`
Requisitos string `json:"requisitos"`
Salario float64 `json:"salario"`
IdCarreras []string `json:"id_carreras"`
}

func AdminDeleteOffer(c *gin.Context) {
// con IDOferta del struct Offer, se elimina la oferta por medio de un query.
idOferta := c.Query("id_oferta")

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -229,6 +231,7 @@ func AdminDeleteOffer(c *gin.Context) {
return
}

// Query para eliminar la oferta
err = configs.DB.Where("id_oferta = ?", idOferta).Delete(&models.Oferta{}).Error

if err != nil {
Expand All @@ -252,6 +255,7 @@ func AdminDeletePostulation(c *gin.Context) {
// con IDOferta del struct Offer, se elimina la oferta por medio de un query.
idPostulacion := c.Query("id_postulacion")

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -263,6 +267,7 @@ func AdminDeletePostulation(c *gin.Context) {
return
}

// Query para eliminar la postulación
err = configs.DB.Where("id_postulacion = ?", idPostulacion).Delete(&models.Postulacion{}).Error

if err != nil {
Expand All @@ -281,8 +286,10 @@ func AdminDeletePostulation(c *gin.Context) {
}

func AdminDeleteUser(c *gin.Context) {
// Se busca el id del usuario ingresado en la ruta
idUsuario := c.Query("usuario")

// verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -294,6 +301,7 @@ func AdminDeleteUser(c *gin.Context) {
return
}

// Se busca el rol del usuario a eliminar
roleToBeDeleted, err := RoleFromUser(models.Usuario{Usuario: idUsuario})

if err != nil {
Expand All @@ -305,8 +313,7 @@ func AdminDeleteUser(c *gin.Context) {
return
}

fmt.Println(roleToBeDeleted)

// Verifica que el rol a eliminar no sea admin
if roleToBeDeleted == "admin" {
c.JSON(http.StatusForbidden, responses.StandardResponse{
Status: http.StatusForbidden,
Expand All @@ -316,6 +323,7 @@ func AdminDeleteUser(c *gin.Context) {
return
}

// Query para eliminar el usuario
err = configs.DB.Where("usuario = ?", idUsuario).Delete(&models.Usuario{}).Error

if err != nil {
Expand All @@ -335,6 +343,7 @@ func AdminDeleteUser(c *gin.Context) {

}

// Input para la función AdminGetUserDetails (estudiante)
type AdminDetailsStudent struct {
Correo string `json:"correo"`
Nombre string `json:"nombre"`
Expand All @@ -349,6 +358,7 @@ type AdminDetailsStudent struct {
Suspendido bool `json:"suspendido"`
}

// Input para la función AdminGetUserDetails (empresa)
type AdminDetailsEnterprise struct {
Correo string `json:"correo"`
Nombre string `json:"nombre"`
Expand All @@ -369,6 +379,7 @@ func AdminGetUserDetails(c *gin.Context) {
return
}

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -380,6 +391,7 @@ func AdminGetUserDetails(c *gin.Context) {
return
}

// Obtiene el rol del usuario a suspender
userType, err := RoleFromUser(models.Usuario{Usuario: input.Correo})

if err != nil {
Expand All @@ -391,11 +403,13 @@ func AdminGetUserDetails(c *gin.Context) {
return
}

// Dependiendo del rol, se obtiene la información del usuario
switch userType {
case "student":
var usuario models.Usuario
var estudiante models.Estudiante

// Query para obtener la información del usuario
err = configs.DB.Where("usuario = ?", input.Correo).First(&usuario).Error
if err != nil {
c.JSON(http.StatusBadRequest, responses.StandardResponse{
Expand All @@ -406,6 +420,7 @@ func AdminGetUserDetails(c *gin.Context) {
return
}

// Query para obtener la información del estudiante
err = configs.DB.Where("id_estudiante = ?", input.Correo).First(&estudiante).Error
if err != nil {
c.JSON(http.StatusBadRequest, responses.StandardResponse{
Expand Down Expand Up @@ -437,6 +452,8 @@ func AdminGetUserDetails(c *gin.Context) {
})
case "enterprise":
var usuario models.Usuario

// Query para obtener la información del usuario
err = configs.DB.Where("usuario = ?", input.Correo).First(&usuario).Error

if err != nil {
Expand All @@ -449,6 +466,8 @@ func AdminGetUserDetails(c *gin.Context) {
}

var empresa models.Empresa

// Query para obtener la información de la empresa
err = configs.DB.Where("id_empresa = ?", input.Correo).First(&empresa).Error
if err != nil {
c.JSON(http.StatusBadRequest, responses.StandardResponse{
Expand All @@ -472,7 +491,7 @@ func AdminGetUserDetails(c *gin.Context) {
},
},
})
case "admin":
case "admin": // No se puede ver la información de un administrador
c.JSON(http.StatusForbidden, responses.StandardResponse{
Status: http.StatusForbidden,
Message: "Admins cannot be viewed",
Expand All @@ -487,6 +506,7 @@ func AdminGetUserDetails(c *gin.Context) {
}
}

// Input para la función GetPostulationsOfStudentAsAdmin
type PostulationsResults struct {
IdUsuario string `json:"id_usuario"`
Nombre string `json:"nombre"`
Expand All @@ -505,6 +525,7 @@ func GetPostulationsOfStudentAsAdmin(c *gin.Context) {
// id del estudiante como query.
idEstudiante := c.Query("id_estudiante")

//verifica si el usuario es administrador
err := IsAdmin(c)

if err != nil {
Expand All @@ -516,6 +537,7 @@ func GetPostulationsOfStudentAsAdmin(c *gin.Context) {
return
}

// Query para obtener las postulaciones del estudiante
err = configs.DB.Raw("select u.usuario, e.nombre, e.apellido, p.id_postulacion, p.id_oferta, p.estado from usuario u join estudiante e on u.usuario = e.id_estudiante join postulacion p on e.id_estudiante = p.id_estudiante where u.usuario = ?", idEstudiante).Scan(&results).Error
fmt.Println(err)
fmt.Println(results)
Expand Down

0 comments on commit 2f9f181

Please sign in to comment.