Browse Source

create play route, render requirements for level

pull/1/head
Stephanie Gredell 7 months ago
parent
commit
15a0c60a68
  1. 35
      main.go
  2. 50
      static/game.html

35
main.go

@ -2,10 +2,13 @@ package main
import ( import (
"context" "context"
"fmt"
"html/template" "html/template"
"net/http" "net/http"
"net/url"
"os" "os"
"os/signal" "os/signal"
"strings"
"systemdesigngame/internals/level" "systemdesigngame/internals/level"
"time" "time"
) )
@ -17,11 +20,18 @@ func main() {
mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
mux.HandleFunc("/", index) mux.HandleFunc("/", index)
mux.HandleFunc("/game", game) mux.HandleFunc("/game", game)
mux.HandleFunc("/play/", play)
srv := &http.Server{ srv := &http.Server{
Addr: ":8080", Addr: ":8080",
Handler: mux, Handler: mux,
} }
levels, err := level.LoadLevels("data/levels.json")
if err != nil {
panic("failed to load levels: " + err.Error())
}
level.InitRegistry(levels)
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop() defer stop()
@ -62,3 +72,28 @@ func game(w http.ResponseWriter, r *http.Request) {
} }
tmpl.ExecuteTemplate(w, "game.html", data) tmpl.ExecuteTemplate(w, "game.html", data)
} }
func play(w http.ResponseWriter, r *http.Request) {
levelName := r.URL.Path[len("/play/"):]
levelName, err := url.PathUnescape(levelName)
if err != nil {
http.Error(w, "Invalid level name", http.StatusBadRequest)
return
}
lvl, err := level.GetLevel(strings.ToLower(levelName), level.DifficultyEasy)
if err != nil {
http.Error(w, "Level not found"+err.Error(), http.StatusNotFound)
return
}
allLevels := level.AllLevels()
data := struct {
Levels []level.Level
Level *level.Level
}{
Levels: allLevels,
Level: lvl,
}
tmpl.ExecuteTemplate(w, "game.html", data)
}

50
static/game.html

@ -550,7 +550,7 @@
<ul class="challenge-list"> <ul class="challenge-list">
{{range .Levels}} {{range .Levels}}
<li class="challenge-item"> <li class="challenge-item {{if and (eq .Name $.Level.Name) (eq .Difficulty $.Level.Difficulty)}}active{{end}}">
<div class="challenge-name">{{.Name}}</div> <div class="challenge-name">{{.Name}}</div>
<div class="challenge-difficulty {{.Difficulty}}">{{.Difficulty}}</div> <div class="challenge-difficulty {{.Difficulty}}">{{.Difficulty}}</div>
</li> </li>
@ -571,22 +571,38 @@
<!-- Requirements --> <!-- Requirements -->
<div id="content1" class="tab-content"> <div id="content1" class="tab-content">
<div class="requirements-section"> {{ if .Level.InterviewerRequirements }}
<h3>Functional Requirements</h3> <div class="requirements-section">
<ul class="requirements-list"> <h3>Interviewer Requirements</h3>
<li class="requirement-item">Something</li> <ul class="requirements-list">
<li class="requirement-item">Something else</li> {{ range .Level.InterviewerRequirements }}
</ul> <li class="requirement-item">{{ . }}</li>
</div> {{ end }}
</ul>
<div class="requirements-section"> </div>
<h3>Non-Functional Requirements</h3> {{ end }}
<ul class="requirements-list">
<li class="requirement-item">Something</li> {{ if .Level.FunctionalRequirements }}
<li class="requirement-item">Something else</li> <div class="requirements-section">
</ul> <h3>Functional Requirements</h3>
</div> <ul class="requirements-list">
{{ range .Level.FunctionalRequirements }}
<li class="requirement-item">{{ . }}</li>
{{ end }}
</ul>
</div>
{{ end }}
{{ if .Level.NonFunctionalRequirements }}
<div class="requirements-section">
<h3>Non-Functional Requirements</h3>
<ul class="requirements-list">
{{ range .Level.NonFunctionalRequirements }}
<li class="requirement-item">{{ . }}</li>
{{ end }}
</ul>
</div>
{{ end }}
</div> </div>
<!-- Design--> <!-- Design-->

Loading…
Cancel
Save