Added a basic view to list articles
This commit is contained in:
parent
b55ad0a99b
commit
83eb5581d4
57
apiclient/articles.go
Normal file
57
apiclient/articles.go
Normal 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
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -3,14 +3,17 @@ package apiclient
|
|||||||
const (
|
const (
|
||||||
HeaderContentType = "Content-Type"
|
HeaderContentType = "Content-Type"
|
||||||
MIMEApplicationForm = "application/x-www-form-urlencoded"
|
MIMEApplicationForm = "application/x-www-form-urlencoded"
|
||||||
|
ApplicationJson = "application/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ApiClient struct {
|
type ApiClient struct {
|
||||||
Users Users
|
Articles Articles
|
||||||
|
Users Users
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(serverAddress string) ApiClient {
|
func New(serverAddress string) ApiClient {
|
||||||
return ApiClient{
|
return ApiClient{
|
||||||
Users: newUserService(serverAddress),
|
Articles: newArticleService(serverAddress),
|
||||||
|
Users: newUserService(serverAddress),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
28
internal/handlers/articles.go
Normal file
28
internal/handlers/articles.go
Normal 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))
|
||||||
|
}
|
7
internal/models/articles.go
Normal file
7
internal/models/articles.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import "git.jamestombleson.com/jtom38/newsbot-api/domain"
|
||||||
|
|
||||||
|
type ListArticlesViewModel struct {
|
||||||
|
Items []domain.ArticleDto
|
||||||
|
}
|
15
internal/views/articles/list.templ
Normal file
15
internal/views/articles/list.templ
Normal 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>
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user