github.com/jamiefdhurst/journal@v0.9.2/internal/app/controller/web/index.go (about)

     1  package web
     2  
     3  import (
     4  	"net/http"
     5  	"strconv"
     6  	"text/template"
     7  
     8  	"github.com/jamiefdhurst/journal/internal/app"
     9  	"github.com/jamiefdhurst/journal/internal/app/model"
    10  	"github.com/jamiefdhurst/journal/pkg/controller"
    11  	"github.com/jamiefdhurst/journal/pkg/database"
    12  )
    13  
    14  // Index Handle displaying all blog entries
    15  type Index struct {
    16  	controller.Super
    17  	Journals   []model.Journal
    18  	Pages      []int
    19  	Pagination database.PaginationInformation
    20  	Saved      bool
    21  }
    22  
    23  // Run Index action
    24  func (c *Index) Run(response http.ResponseWriter, request *http.Request) {
    25  
    26  	container := c.Super.Container.(*app.Container)
    27  	js := model.Journals{Container: container, Gs: model.GiphyAdapter(container)}
    28  
    29  	pagination := database.PaginationQuery{Page: 1, ResultsPerPage: container.Configuration.ArticlesPerPage}
    30  	query := request.URL.Query()
    31  	if query["page"] != nil {
    32  		page, err := strconv.Atoi(query["page"][0])
    33  		if err == nil {
    34  			pagination.Page = page
    35  		}
    36  	}
    37  
    38  	c.Journals, c.Pagination = js.FetchPaginated(pagination)
    39  	c.Saved = false
    40  	flash := c.Session.GetFlash()
    41  	if flash != nil && flash[0] == "saved" {
    42  		c.Saved = true
    43  	}
    44  
    45  	c.Pages = make([]int, c.Pagination.TotalPages)
    46  	for i := range c.Pages {
    47  		c.Pages[i] = i + 1
    48  	}
    49  
    50  	c.SessionStore.Save(response)
    51  	template, _ := template.ParseFiles(
    52  		"./web/templates/_layout/default.html.tmpl",
    53  		"./web/templates/index.html.tmpl")
    54  	template.ExecuteTemplate(response, "layout", c)
    55  }