package model import ( "git.beejay.kim/Craft/Api/connection" "github.com/samber/lo" ) //easyjson:json type PageInfo[T connection.Cursor] struct { Total int `json:"total"` StartCursor *string `json:"start_cursor,omitempty"` EndCursor *string `json:"end_cursor,omitempty"` HasNextPage bool `json:"has_next_page"` HasPreviousPage bool `json:"has_previous_page"` } func (pi *PageInfo[T]) SetTotal(nodes []T) { pi.Total = len(nodes) pi.Invalidate(nodes) } func (pi *PageInfo[T]) Invalidate(nodes []T) { l := len(nodes) if l < 1 { pi.HasPreviousPage = pi.StartCursor != nil pi.HasNextPage = pi.EndCursor != nil pi.StartCursor = nil pi.EndCursor = nil } else { if pi.StartCursor != nil { pi.HasPreviousPage = !(*pi.StartCursor == nodes[0].Cursor()) } else { pi.HasPreviousPage = false } if pi.EndCursor != nil { pi.HasNextPage = !(*pi.EndCursor == nodes[l-1].Cursor()) } else { pi.HasNextPage = false } pi.StartCursor = lo.ToPtr(nodes[0].Cursor()) pi.EndCursor = lo.ToPtr(nodes[l-1].Cursor()) } }