Initial commit
This commit is contained in:
99
pkg/router/response.go
Normal file
99
pkg/router/response.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
http.ResponseWriter
|
||||
}
|
||||
|
||||
func (resp Response) View(name string, data any) {
|
||||
fp := filepath.Join("internal/views", fmt.Sprintf("%s.html", name))
|
||||
tmpl, _ := template.ParseFiles(fp)
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
if err := tmpl.ExecuteTemplate(buf, "index", data); err != nil {
|
||||
resp.statusCode(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
resp.html(buf.Bytes(), http.StatusOK)
|
||||
}
|
||||
|
||||
func (resp Response) OK(data any) {
|
||||
resp.json(data, http.StatusOK)
|
||||
}
|
||||
|
||||
func (resp Response) NoContent() {
|
||||
resp.statusCode(http.StatusNoContent)
|
||||
}
|
||||
|
||||
func (resp Response) BadRequest(err error) {
|
||||
resp.error(err, http.StatusBadRequest)
|
||||
}
|
||||
|
||||
func (resp Response) Unauthorized(err error) {
|
||||
resp.error(err, http.StatusUnauthorized)
|
||||
}
|
||||
|
||||
func (resp Response) Forbidden(err error) {
|
||||
resp.error(err, http.StatusForbidden)
|
||||
}
|
||||
|
||||
func (resp Response) NotFound(err error) {
|
||||
resp.error(err, http.StatusNotFound)
|
||||
}
|
||||
|
||||
func (resp Response) Conflict(err error) {
|
||||
resp.error(err, http.StatusConflict)
|
||||
}
|
||||
|
||||
func (resp Response) UnsupportedMediaType(err error) {
|
||||
resp.error(err, http.StatusUnsupportedMediaType)
|
||||
}
|
||||
|
||||
func (resp Response) InternalServerError(err error) {
|
||||
resp.error(err, http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
func (resp Response) error(err error, status int) {
|
||||
er := struct {
|
||||
Message string `json:"message"`
|
||||
}{
|
||||
Message: err.Error(),
|
||||
}
|
||||
resp.json(er, status)
|
||||
}
|
||||
|
||||
func (resp Response) html(content []byte, status int) {
|
||||
resp.Header().Add("Content-Type", "text/html; charset=utf-8")
|
||||
resp.WriteHeader(status)
|
||||
|
||||
if _, err := resp.Write(content); err != nil {
|
||||
panic("Failed to write HTTP response: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func (resp Response) json(data any, statusCode int) {
|
||||
content, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
panic("Failed to marshal JSON: " + err.Error())
|
||||
}
|
||||
|
||||
resp.Header().Add("Content-Type", "application/json; charset=utf-8")
|
||||
resp.WriteHeader(statusCode)
|
||||
|
||||
if _, err := resp.Write(content); err != nil {
|
||||
panic("Failed to write HTTP response: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func (resp Response) statusCode(code int) {
|
||||
resp.WriteHeader(code)
|
||||
}
|
||||
Reference in New Issue
Block a user