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 }