diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-05-26 00:05:31 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-05-26 14:41:21 +0200 | 
| commit | 349a3d1ff36a436261b1b65b870f8f262f06584f (patch) | |
| tree | 25c4d6933c49f818e520ce662ffa15e040877f4d /pkg | |
| parent | c06945c189c1d8ef3cedeb51e416ba0fec36368f (diff) | |
| download | cerrado-349a3d1ff36a436261b1b65b870f8f262f06584f.tar.gz cerrado-349a3d1ff36a436261b1b65b870f8f262f06584f.tar.bz2 cerrado-349a3d1ff36a436261b1b65b870f8f262f06584f.zip | |
feat: Add bare bones project list
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/handler/git.go | 21 | ||||
| -rw-r--r-- | pkg/handler/static.go | 18 | ||||
| -rw-r--r-- | pkg/handler/status.go | 62 | ||||
| -rw-r--r-- | pkg/service/git.go | 30 | 
4 files changed, 131 insertions, 0 deletions
| diff --git a/pkg/handler/git.go b/pkg/handler/git.go new file mode 100644 index 0000000..5b09121 --- /dev/null +++ b/pkg/handler/git.go @@ -0,0 +1,21 @@ +package handler + +import ( +	"net/http" + +	"git.gabrielgio.me/cerrado/pkg/service" +	"git.gabrielgio.me/cerrado/templates" +) + +type GitHandler struct { +	gitService *service.GitService +} + +func NewGitHandler(gitService *service.GitService) *GitHandler { +	return &GitHandler{gitService} +} + +func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) { +	gitList := &templates.GitListPage{g.gitService.ListRepositories()} +	templates.WritePageTemplate(w, gitList) +} diff --git a/pkg/handler/static.go b/pkg/handler/static.go new file mode 100644 index 0000000..9f312f4 --- /dev/null +++ b/pkg/handler/static.go @@ -0,0 +1,18 @@ +package handler + +import ( +	"io/fs" +	"net/http" + +	"git.gabrielgio.me/cerrado/static" +) + +func NewStaticHander(prefix string) (http.Handler, error) { +	staticFs, err := fs.Sub(static.Static, ".") +	if err != nil { +		return nil, err +	} + +	handler := http.StripPrefix(prefix, http.FileServer(http.FS(staticFs))) +	return handler, nil +} diff --git a/pkg/handler/status.go b/pkg/handler/status.go new file mode 100644 index 0000000..2a84a7e --- /dev/null +++ b/pkg/handler/status.go @@ -0,0 +1,62 @@ +package handler + +import ( +	"bytes" +	"encoding/json" +	"log/slog" +	"net/http" +	"os" + +	"github.com/alecthomas/chroma/v2/formatters/html" +	"github.com/alecthomas/chroma/v2/lexers" +	"github.com/alecthomas/chroma/v2/styles" + +	"git.gabrielgio.me/cerrado/pkg/config" +	"git.gabrielgio.me/cerrado/templates" +) + +func ConfigFile(configPath string) func(http.ResponseWriter, *http.Request) { +	return func(w http.ResponseWriter, _ *http.Request) { +		f, err := os.Open(configPath) +		if err != nil { +			slog.Error("Error openning config file json", "error", err, "path", configPath) +			return +		} + +		c, err := config.Parse(f) +		if err != nil { +			slog.Error("Error parsing config", "error", err, "path", configPath) +			return +		} + +		b, err := json.MarshalIndent(c, "", "	") +		if err != nil { +			slog.Error("Error parsing json", "error", err) +			return +		} + +		lexer := lexers.Get("json") +		style := styles.Get("monokailight") +		formatter := html.New( +			html.WithLineNumbers(true), +		) +		iterator, err := lexer.Tokenise(nil, string(b)) +		if err != nil { +			slog.Error("Error tokenise", "error", err) +			return +		} + +		var code bytes.Buffer +		err = formatter.Format(&code, style, iterator) +		if err != nil { +			slog.Error("Error format", "error", err) +			return +		} + +		hello := &templates.HelloPage{ +			Body: code.String(), +		} + +		templates.WritePageTemplate(w, hello) +	} +} diff --git a/pkg/service/git.go b/pkg/service/git.go new file mode 100644 index 0000000..0415cee --- /dev/null +++ b/pkg/service/git.go @@ -0,0 +1,30 @@ +package service + +import "fmt" + +type ( +	GitService struct{} +	Repository struct { +		Name        string +		Title       string +		Description string +	} +) + +func NewGitService() *GitService { +	return &GitService{} +} + +func (g *GitService) ListRepositories() []*Repository { +	repos := make([]*Repository, 10) + +	for i := range 10 { +		repos[i] = &Repository{ +			Name:        fmt.Sprintf("repository-%d", i), +			Title:       fmt.Sprintf("Repository %d", i), +			Description: fmt.Sprintf("This is a description for repository %d", i), +		} +	} + +	return repos +} | 
