package query import ( "git.artlef.fr/bibliomane/internal/dto" "git.artlef.fr/bibliomane/internal/model" "gorm.io/gorm" ) func FetchAllUsers(db *gorm.DB, limit int, offset int) ([]dto.UserGet, error) { var books []dto.UserGet query := fetchAllUserQuery(db) query = query.Limit(limit) query = query.Offset(offset) query = query.Order("users.id DESC") res := query.Find(&books) return books, res.Error } func FetchAllUsersCount(db *gorm.DB) (int64, error) { var count int64 query := fetchAllUserQuery(db) res := query.Count(&count) return count, res.Error } func fetchAllUserQuery(db *gorm.DB) *gorm.DB { query := db.Model(&model.User{}) query = query.Select("users.id, users.name, users.admin, count(distinct books.id) as added_books_count, count(distinct user_books.id) as user_books_count") query = query.Joins("left join books on (books.added_by_id = users.id)") query = query.Joins("left join user_books on user_books.user_id = users.id") query = query.Group("users.id, users.name") return query }