features/bootstrapping #1

Merged
jtom38 merged 24 commits from features/bootstrapping into main 2024-06-02 19:55:25 -07:00
5 changed files with 112 additions and 2 deletions
Showing only changes of commit 83eb5581d4 - Show all commits

57
apiclient/articles.go Normal file
View File

@ -0,0 +1,57 @@
package apiclient
import (
"encoding/json"
"fmt"
"net/http"
"git.jamestombleson.com/jtom38/newsbot-api/domain"
)
const (
ArticlesBaseRoute = "api/v1/articles"
)
type Articles interface {
List(jwt string, page int) (domain.ArticleResponse, error)
}
type articlesClient struct {
serverAddress string
client http.Client
}
func newArticleService(serverAddress string) articlesClient {
return articlesClient{
serverAddress: serverAddress,
client: http.Client{},
}
}
func (c articlesClient) List(jwt string, page int) (domain.ArticleResponse, error) {
endpoint := fmt.Sprintf("%s/%s?page=%U", c.serverAddress, ArticlesBaseRoute, page)
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
return domain.ArticleResponse{}, err
}
//req.Header.Set(HeaderContentType, ApplicationJson)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", jwt))
resp, err := c.client.Do(req)
if err != nil {
return domain.ArticleResponse{}, err
}
defer resp.Body.Close()
var bind domain.ArticleResponse
decoder := json.NewDecoder(resp.Body)
err = decoder.Decode(&bind)
if err != nil {
return domain.ArticleResponse{}, err
}
return bind, nil
}

View File

@ -3,14 +3,17 @@ package apiclient
const (
HeaderContentType = "Content-Type"
MIMEApplicationForm = "application/x-www-form-urlencoded"
ApplicationJson = "application/json"
)
type ApiClient struct {
Users Users
Articles Articles
Users Users
}
func New(serverAddress string) ApiClient {
return ApiClient{
Users: newUserService(serverAddress),
Articles: newArticleService(serverAddress),
Users: newUserService(serverAddress),
}
}

View File

@ -0,0 +1,28 @@
package handlers
import (
"net/http"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/domain"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/views/articles"
"github.com/labstack/echo/v4"
)
func (h *Handler) ArticlesList(c echo.Context) error {
userToken, err := c.Cookie(domain.CookieToken)
if err != nil {
return err
}
resp, err := h.api.Articles.List(userToken.Value, 0)
if err != nil {
return err
}
vm := models.ListArticlesViewModel {
Items: resp.Payload,
}
return Render(c, http.StatusOK, articles.List(vm))
}

View File

@ -0,0 +1,7 @@
package models
import "git.jamestombleson.com/jtom38/newsbot-api/domain"
type ListArticlesViewModel struct {
Items []domain.ArticleDto
}

View File

@ -0,0 +1,15 @@
package articles
import (
"git.jamestombleson.com/jtom38/newsbot-portal/internal/views/layout"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
)
templ List(model models.ListArticlesViewModel) {
@layout.WithTemplate() {
for _, item := range model.Items {
{ item.Title }
}
<div>hi </div>
}
}