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") }