52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
|
package projects
|
||
|
|
||
|
import (
|
||
|
db "ttime/internal/database"
|
||
|
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
"github.com/gofiber/fiber/v2/log"
|
||
|
"github.com/golang-jwt/jwt/v5"
|
||
|
)
|
||
|
|
||
|
// @Summary Promote to project manager
|
||
|
// @Description Promote a user to project manager
|
||
|
// @Tags Auth
|
||
|
// @Security JWT
|
||
|
// @Accept plain
|
||
|
// @Produce plain
|
||
|
// @Param projectName path string true "Project name"
|
||
|
// @Param userName query string true "User name"
|
||
|
// @Failure 500 {string} string "Internal server error"
|
||
|
// @Failure 403 {string} string "Forbidden"
|
||
|
// @Router /promote/{projectName} [put]
|
||
|
//
|
||
|
// Login logs in a user and returns a JWT token
|
||
|
// Promote to project manager
|
||
|
func PromoteToPm(c *fiber.Ctx) error {
|
||
|
user := c.Locals("user").(*jwt.Token)
|
||
|
claims := user.Claims.(jwt.MapClaims)
|
||
|
pm_name := claims["name"].(string)
|
||
|
|
||
|
project := c.Params("projectName")
|
||
|
new_pm_name := c.Query("userName")
|
||
|
|
||
|
// Check if the user is a project manager
|
||
|
isPM, err := db.GetDb(c).IsProjectManager(pm_name, project)
|
||
|
if err != nil {
|
||
|
log.Info("Error checking if user is project manager:", err)
|
||
|
return c.Status(500).SendString(err.Error())
|
||
|
}
|
||
|
|
||
|
if !isPM {
|
||
|
log.Info("User: ", pm_name, " is not a project manager in project: ", project)
|
||
|
return c.Status(403).SendString("User is not a project manager")
|
||
|
}
|
||
|
|
||
|
// Add the user to the project with the specified role
|
||
|
err = db.GetDb(c).ChangeUserRole(new_pm_name, project, "project_manager")
|
||
|
|
||
|
// Return success message
|
||
|
log.Info("User : ", new_pm_name, " promoted to project manager in project: ", project)
|
||
|
return c.SendStatus(fiber.StatusOK)
|
||
|
}
|