sonarqube-badges/router/views/project.go
2025-03-15 01:49:52 +01:00

71 lines
1.6 KiB
Go

package views
import (
"github.com/golang-jwt/jwt/v5"
"github.com/gorilla/mux"
"gorm.io/gorm"
"net/http"
"sonarqube-badge/router/middlewares"
"sonarqube-badge/router/utils"
"sonarqube-badge/templates"
"strconv"
)
func getProjects(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
db := ctx.Value("db").(*gorm.DB)
token, err := utils.GetToken(r)
if err != nil {
w.WriteHeader(http.StatusUnauthorized)
return
}
email := token.Claims.(jwt.MapClaims)["email"].(string)
user := utils.GetUser(ctx, email)
if user == nil {
w.WriteHeader(http.StatusNotFound)
return
}
templates.ProjectList(user.GetProjects(db)).Render(ctx, w)
}
func getProject(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
db := ctx.Value("db").(*gorm.DB)
idString := mux.Vars(r)["id"]
id, err := strconv.Atoi(idString)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
return
}
token, _ := utils.GetToken(r)
email := token.Claims.(jwt.MapClaims)["email"].(string)
user := utils.GetUser(ctx, email)
if user == nil {
w.WriteHeader(http.StatusUnauthorized)
return
}
project := user.GetProject(db, id)
if project.ID == 0 {
http.Redirect(w, r, "/", http.StatusFound)
return
}
name := project.ProjectName
if name == "" {
name = "Untitled Project"
}
templates.Layout(templates.Project(project), "Project - "+name, r).Render(ctx, w)
}
func ProjectRouter(router *mux.Router) {
sr := router.PathPrefix("").Subrouter()
sr.Use(middlewares.CheckJwtToken)
sr.HandleFunc("/project", getProjects).Methods("GET")
sr.HandleFunc("/project/{id}", getProject).Methods("GET")
}