tagliatelle

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }