include-pagination.go (1758B)
1 package main 2 3 func getUntaggedFilesPaginated(page, perPage int) ([]File, int, error) { 4 // Get total count 5 var total int 6 err := db.QueryRow(`SELECT COUNT(*) FROM files f LEFT JOIN file_tags ft ON ft.file_id = f.id WHERE ft.file_id IS NULL`).Scan(&total) 7 if err != nil { 8 return nil, 0, err 9 } 10 11 offset := (page - 1) * perPage 12 files, err := queryFilesWithTags(` 13 SELECT f.id, f.filename, f.path, COALESCE(f.description, '') as description 14 FROM files f 15 LEFT JOIN file_tags ft ON ft.file_id = f.id 16 WHERE ft.file_id IS NULL 17 ORDER BY f.id DESC 18 LIMIT ? OFFSET ? 19 `, perPage, offset) 20 21 return files, total, err 22 } 23 24 func buildPageDataWithPagination(title string, data interface{}, page, total, perPage int) PageData { 25 pd := buildPageData(title, data) 26 pd.Pagination = calculatePagination(page, total, perPage) 27 return pd 28 } 29 30 func calculatePagination(page, total, perPage int) *Pagination { 31 totalPages := (total + perPage - 1) / perPage 32 if totalPages < 1 { 33 totalPages = 1 34 } 35 36 return &Pagination{ 37 CurrentPage: page, 38 TotalPages: totalPages, 39 HasPrev: page > 1, 40 HasNext: page < totalPages, 41 PrevPage: page - 1, 42 NextPage: page + 1, 43 PerPage: perPage, 44 } 45 } 46 47 func getTaggedFilesPaginated(page, perPage int) ([]File, int, error) { 48 // Get total count 49 var total int 50 err := db.QueryRow(`SELECT COUNT(DISTINCT f.id) FROM files f JOIN file_tags ft ON ft.file_id = f.id`).Scan(&total) 51 if err != nil { 52 return nil, 0, err 53 } 54 55 offset := (page - 1) * perPage 56 files, err := queryFilesWithTags(` 57 SELECT DISTINCT f.id, f.filename, f.path, COALESCE(f.description, '') as description 58 FROM files f 59 JOIN file_tags ft ON ft.file_id = f.id 60 ORDER BY f.id DESC 61 LIMIT ? OFFSET ? 62 `, perPage, offset) 63 64 return files, total, err 65 }