answer/internal/controller/template_render/controller.go

107 lines
3.0 KiB
Go
Raw Normal View History

2022-11-29 17:50:31 +08:00
package templaterender
import (
2022-11-30 15:11:06 +08:00
"math"
2022-12-12 18:21:03 +08:00
"github.com/answerdev/answer/internal/base/data"
"github.com/answerdev/answer/internal/service/comment"
"github.com/answerdev/answer/internal/service/siteinfo_common"
2022-11-30 16:18:23 +08:00
"github.com/answerdev/answer/internal/schema"
"github.com/answerdev/answer/internal/service"
2022-11-30 16:18:23 +08:00
"github.com/answerdev/answer/internal/service/tag"
"github.com/google/wire"
)
2022-11-29 17:50:31 +08:00
// ProviderSetTemplateRenderController is template render controller providers.
var ProviderSetTemplateRenderController = wire.NewSet(
NewTemplateRenderController,
2022-11-29 17:50:31 +08:00
)
type TemplateRenderController struct {
questionService *service.QuestionService
2022-11-30 12:13:26 +08:00
userService *service.UserService
2022-11-30 16:18:23 +08:00
tagService *tag.TagService
2022-12-01 15:30:02 +08:00
answerService *service.AnswerService
commentService *comment.CommentService
2022-12-12 18:21:03 +08:00
data *data.Data
siteInfoService *siteinfo_common.SiteInfoCommonService
}
func NewTemplateRenderController(
questionService *service.QuestionService,
2022-11-30 12:13:26 +08:00
userService *service.UserService,
2022-11-30 16:18:23 +08:00
tagService *tag.TagService,
2022-12-01 15:30:02 +08:00
answerService *service.AnswerService,
commentService *comment.CommentService,
2022-12-12 18:21:03 +08:00
data *data.Data,
siteInfoService *siteinfo_common.SiteInfoCommonService,
) *TemplateRenderController {
return &TemplateRenderController{
questionService: questionService,
2022-11-30 12:13:26 +08:00
userService: userService,
2022-11-30 16:18:23 +08:00
tagService: tagService,
2022-12-01 15:30:02 +08:00
answerService: answerService,
commentService: commentService,
2022-12-12 18:21:03 +08:00
data: data,
siteInfoService: siteInfoService,
}
}
2022-11-30 15:11:06 +08:00
// Paginator page
// page : now page
2022-11-30 16:27:23 +08:00
// pageSize : Number per page
2022-11-30 15:11:06 +08:00
// nums : Total
// Returns the contents of the page in the format of 1, 2, 3, 4, and 5. If the contents are less than 5 pages, the page number is returned
2022-11-30 16:27:23 +08:00
func Paginator(page, pageSize int, nums int64) *schema.Paginator {
if pageSize == 0 {
pageSize = 10
2022-11-30 16:18:23 +08:00
}
2022-11-30 15:11:06 +08:00
2022-11-30 16:27:23 +08:00
var prevpage int //Previous page address
var nextpage int //Address on the last page
2022-11-30 15:15:39 +08:00
//Generate the total number of pages based on the total number of nums and the number of prepage pages
2022-11-30 16:27:23 +08:00
totalpages := int(math.Ceil(float64(nums) / float64(pageSize))) //Total number of Pages
2022-11-30 15:11:06 +08:00
if page > totalpages {
page = totalpages
}
if page <= 0 {
page = 1
}
var pages []int
switch {
2022-11-30 15:15:39 +08:00
case page >= totalpages-5 && totalpages > 5: //The last 5 pages
2022-11-30 15:11:06 +08:00
start := totalpages - 5 + 1
2022-11-30 16:27:23 +08:00
prevpage = page - 1
nextpage = int(math.Min(float64(totalpages), float64(page+1)))
2022-11-30 15:11:06 +08:00
pages = make([]int, 5)
for i, _ := range pages {
pages[i] = start + i
}
case page >= 3 && totalpages > 5:
start := page - 3 + 1
pages = make([]int, 5)
2022-11-30 16:27:23 +08:00
prevpage = page - 3
2022-11-30 15:11:06 +08:00
for i, _ := range pages {
pages[i] = start + i
}
2022-11-30 16:27:23 +08:00
prevpage = page - 1
nextpage = page + 1
2022-11-30 15:11:06 +08:00
default:
pages = make([]int, int(math.Min(5, float64(totalpages))))
for i, _ := range pages {
pages[i] = i + 1
}
2022-11-30 16:27:23 +08:00
prevpage = int(math.Max(float64(1), float64(page-1)))
nextpage = page + 1
2022-11-30 15:11:06 +08:00
}
2022-11-30 16:18:23 +08:00
paginator := &schema.Paginator{}
paginator.Pages = pages
paginator.Totalpages = totalpages
2022-11-30 16:27:23 +08:00
paginator.Prevpage = prevpage
paginator.Nextpage = nextpage
2022-11-30 16:18:23 +08:00
paginator.Currpage = page
return paginator
2022-11-30 15:11:06 +08:00
}