114 lines
2.2 KiB
Go
114 lines
2.2 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"relynolli-server/models"
|
|
"relynolli-server/status"
|
|
"relynolli-server/storage"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type handlers struct{}
|
|
|
|
type Handlers interface {
|
|
GetNews(c *gin.Context)
|
|
RetrieveNews(c *gin.Context)
|
|
}
|
|
|
|
func GetHandlers() Handlers {
|
|
return &handlers{}
|
|
}
|
|
|
|
type ListNewsRequest struct {
|
|
Limit int `form:"limit" `
|
|
Page int `form:"page"`
|
|
}
|
|
|
|
func (h *handlers) GetNews(c *gin.Context) {
|
|
ctx := context.Background()
|
|
meta := models.Meta{
|
|
RequestStarted: time.Now().Unix(),
|
|
}
|
|
|
|
query := ListNewsRequest{
|
|
Limit: 10,
|
|
Page: 1,
|
|
}
|
|
|
|
err := c.ShouldBindQuery(&query)
|
|
if err != nil {
|
|
meta.RequestFinished = time.Now().Unix()
|
|
c.JSON(400, models.Response{
|
|
Status: status.STATUS_BAD_REQUEST,
|
|
Info: fmt.Sprintf("Error: %s", err.Error()),
|
|
Meta: &meta,
|
|
})
|
|
return
|
|
}
|
|
|
|
s := storage.NewStorageArticle()
|
|
count, resp, err := s.GetArticles(ctx, int64(query.Limit), int64(query.Limit*(query.Page-1)))
|
|
if err != nil {
|
|
meta.RequestFinished = time.Now().Unix()
|
|
c.JSON(500, models.Response{
|
|
Status: status.STATUS_SERVER_ERROR,
|
|
Info: fmt.Sprintf("Error: %s", err.Error()),
|
|
Meta: &meta,
|
|
})
|
|
return
|
|
}
|
|
|
|
meta.Count = count
|
|
meta.Limit = query.Limit
|
|
meta.Page = query.Page
|
|
c.JSON(200, models.Response{
|
|
Status: status.STATUS_OK,
|
|
Data: resp,
|
|
Meta: &meta,
|
|
})
|
|
|
|
}
|
|
|
|
type retireveNewsReq struct {
|
|
Code string `uri:"code" binding:"required"`
|
|
}
|
|
|
|
func (h *handlers) RetrieveNews(c *gin.Context) {
|
|
ctx := context.Background()
|
|
meta := models.Meta{
|
|
RequestStarted: time.Now().Unix(),
|
|
}
|
|
query := new(retireveNewsReq)
|
|
|
|
err := c.ShouldBindUri(query)
|
|
if err != nil {
|
|
meta.RequestFinished = time.Now().Unix()
|
|
c.JSON(400, models.Response{
|
|
Status: status.STATUS_BAD_REQUEST,
|
|
Info: fmt.Sprintf("Error: %s", err.Error()),
|
|
Meta: &meta,
|
|
})
|
|
return
|
|
}
|
|
|
|
s := storage.NewStorageArticle()
|
|
resp, _ := s.RetrieveArticle(ctx, query.Code)
|
|
meta.RequestFinished = time.Now().Unix()
|
|
|
|
statusResult := status.STATUS_OK
|
|
responseCode := 200
|
|
if resp == nil {
|
|
statusResult = status.STATUS_NOT_FOUND
|
|
responseCode = 404
|
|
}
|
|
|
|
c.JSON(responseCode, models.Response{
|
|
Status: statusResult,
|
|
Data: resp,
|
|
Meta: &meta,
|
|
})
|
|
}
|