63 lines
1.6 KiB
Go
63 lines
1.6 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"
|
|
)
|
|
|
|
func GetProjectTimesHandler(c *fiber.Ctx) error {
|
|
// Get the username from the token
|
|
user := c.Locals("user").(*jwt.Token)
|
|
claims := user.Claims.(jwt.MapClaims)
|
|
username := claims["name"].(string)
|
|
|
|
// Get project
|
|
projectName := c.Params("projectName")
|
|
if projectName == "" {
|
|
log.Info("No project name provided")
|
|
return c.Status(400).SendString("No project name provided")
|
|
}
|
|
|
|
// Get all users in the project and roles
|
|
userProjects, err := db.GetDb(c).GetAllUsersProject(projectName)
|
|
if err != nil {
|
|
log.Info("Error getting users in project:", err)
|
|
return c.Status(500).SendString(err.Error())
|
|
}
|
|
|
|
// If the user is member
|
|
isMember := false
|
|
for _, userProject := range userProjects {
|
|
if userProject.Username == username {
|
|
isMember = true
|
|
break
|
|
}
|
|
}
|
|
|
|
// If the user is admin
|
|
if !isMember {
|
|
isAdmin, err := db.GetDb(c).IsSiteAdmin(username)
|
|
if err != nil {
|
|
log.Info("Error checking admin status:", err)
|
|
return c.Status(500).SendString(err.Error())
|
|
}
|
|
if !isAdmin {
|
|
log.Info("User is neither a project member nor a site admin:", username)
|
|
return c.Status(403).SendString("User is neither a project member nor a site admin")
|
|
}
|
|
}
|
|
|
|
// Get project times
|
|
projectTimes, err := db.GetDb(c).GetProjectTimes(projectName)
|
|
if err != nil {
|
|
log.Info("Error getting project times:", err)
|
|
return c.Status(500).SendString(err.Error())
|
|
}
|
|
|
|
// Return project times as JSON
|
|
log.Info("Returning project times for project:", projectName)
|
|
return c.JSON(projectTimes)
|
|
}
|