34 lines
1.0 KiB
Go
34 lines
1.0 KiB
Go
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
|
|
}
|