added notification pagination
parent
6dbfcec0c5
commit
73e5548e32
|
@ -178,7 +178,7 @@ func GetEquipmentDocumentations(stockItemId string, query structs.PageQuery, c *
|
|||
utils.DbPageQuery(query,
|
||||
utils.EquipmentDocumentationsPaginationLimit,
|
||||
&documentations,
|
||||
"created_at",
|
||||
"created_at DESC",
|
||||
"stock_item_id = ?",
|
||||
stockItemId)
|
||||
|
||||
|
@ -196,7 +196,10 @@ func GetEquipmentDocumentations(stockItemId string, query structs.PageQuery, c *
|
|||
return c.SendStatus(fiber.StatusInternalServerError)
|
||||
}
|
||||
} else {
|
||||
totalPages = utils.GetTotalPages(&documentations, "stock_item_id = ?", stockItemId)
|
||||
totalPages = utils.GetTotalPages(utils.EquipmentDocumentationsPaginationLimit,
|
||||
&documentations,
|
||||
"stock_item_id = ?",
|
||||
stockItemId)
|
||||
}
|
||||
|
||||
logger.AddSystemLog(structs.LogMessage{
|
||||
|
|
|
@ -959,7 +959,10 @@ func StartGroupTask(userId string, groupTask structs.GroupTasks) {
|
|||
TotalPages int
|
||||
}{
|
||||
GroupTask: groupTask,
|
||||
TotalPages: utils.GetTotalPages([]structs.GroupTasks{}, "category = ?", groupTask.Category),
|
||||
TotalPages: utils.GetTotalPages(utils.GroupTasksPaginationLimit,
|
||||
[]structs.GroupTasks{},
|
||||
"category = ?",
|
||||
groupTask.Category),
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/google/uuid"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func GetTotalNotifications(userId string) int {
|
||||
|
@ -20,17 +19,20 @@ func GetTotalNotifications(userId string) int {
|
|||
return int(totalNotifications)
|
||||
}
|
||||
|
||||
func GetNotifications(userId string) []structs.Notification {
|
||||
func GetNotifications(query structs.PageQuery, userId string) []structs.Notification {
|
||||
var notifications []structs.Notification
|
||||
|
||||
database.DB.Model(&structs.Notification{}).Where("user_id = ?", userId).Find(¬ifications)
|
||||
utils.DbPageQuery(query,
|
||||
utils.NotificationsPaginationLimit,
|
||||
¬ifications,
|
||||
"created_at DESC",
|
||||
"user_id = ?",
|
||||
userId)
|
||||
|
||||
return notifications
|
||||
}
|
||||
|
||||
func AddNotification(c *fiber.Ctx, body structs.AddNotificationRequest) error {
|
||||
log.Info().Msgf("body %v", body)
|
||||
|
||||
var userIds []string
|
||||
|
||||
if len(body.UserIds) == 0 && body.NeededPermission == "" && len(body.RoleIds) == 0 {
|
||||
|
@ -86,12 +88,19 @@ func AddNotification(c *fiber.Ctx, body structs.AddNotificationRequest) error {
|
|||
// send notification to user
|
||||
socketclients.SendMessageToUser(userId, "", structs.SendSocketMessage{
|
||||
Cmd: utils.SentCmdNewNotification,
|
||||
Body: notify,
|
||||
Body: struct {
|
||||
Notification structs.Notification
|
||||
TotalPages int
|
||||
}{
|
||||
Notification: notify,
|
||||
TotalPages: utils.GetTotalPages(utils.NotificationsPaginationLimit,
|
||||
[]structs.Notification{},
|
||||
"user_id = ?",
|
||||
userId),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
log.Info().Msgf("ids %v", userIds)
|
||||
|
||||
return c.SendStatus(fiber.StatusOK)
|
||||
}
|
||||
|
||||
|
|
|
@ -26,4 +26,5 @@ type AddNotificationRequest struct {
|
|||
// swagger:model NotificationsResponse
|
||||
type NotificationsResponse struct {
|
||||
Notifications []Notification
|
||||
TotalPages int
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ const (
|
|||
|
||||
EquipmentDocumentationsPaginationLimit = 3
|
||||
GroupTasksPaginationLimit = 5
|
||||
NotificationsPaginationLimit = 10
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
@ -116,23 +116,23 @@ func QueryParserHelper(c *fiber.Ctx, query interface{}) error {
|
|||
|
||||
// GetTotalPages returns total pages for pagination
|
||||
// Example whereQuery = "stock_item_id = ?" and args = stockItemId is Where("stock_item_id = ?", stockItemId)
|
||||
func GetTotalPages(any interface{}, whereQuery interface{}, args ...interface{}) int {
|
||||
func GetTotalPages(paginationLimit int, any interface{}, whereQuery interface{}, args ...interface{}) int {
|
||||
var totalPages int64
|
||||
|
||||
database.DB.Model(any).
|
||||
Where(whereQuery, args).
|
||||
Count(&totalPages)
|
||||
|
||||
return int(math.Ceil(float64(totalPages) / float64(EquipmentDocumentationsPaginationLimit)))
|
||||
return int(math.Ceil(float64(totalPages) / float64(paginationLimit)))
|
||||
}
|
||||
|
||||
func GetPageOffset(page int) int {
|
||||
return (page - 1) * EquipmentDocumentationsPaginationLimit
|
||||
func GetPageOffset(page int, paginationLimit int) int {
|
||||
return (page - 1) * paginationLimit
|
||||
}
|
||||
|
||||
func DbPageQuery(query structs.PageQuery, paginationLimit int, result any, orderBy, whereQuery interface{}, args ...interface{}) *gorm.DB {
|
||||
return database.DB.Limit(paginationLimit).
|
||||
Offset(GetPageOffset(query.Page)).
|
||||
Offset(GetPageOffset(query.Page, paginationLimit)).
|
||||
Where(whereQuery, args).
|
||||
Order(orderBy).
|
||||
Find(result)
|
||||
|
|
|
@ -70,7 +70,10 @@ func GetGroupTasks(c *fiber.Ctx) error {
|
|||
return c.JSON(structs.GroupTasksResponse{
|
||||
CategoryGroup: categoryGroup,
|
||||
GroupTasks: grouptasks.GetAllGroupTasks(params.Category, query),
|
||||
TotalPages: utils.GetTotalPages([]structs.GroupTasks{}, "category = ?", params.Category),
|
||||
TotalPages: utils.GetTotalPages(utils.GroupTasksPaginationLimit,
|
||||
[]structs.GroupTasks{},
|
||||
"category = ?",
|
||||
params.Category),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -57,6 +57,9 @@ func GetNotifications(c *fiber.Ctx) error {
|
|||
// - name: X-Api-Key
|
||||
// in: header
|
||||
// description: You can create a new api key in your user profile
|
||||
// - name: page
|
||||
// in: query
|
||||
// description: Page number
|
||||
// responses:
|
||||
// '200':
|
||||
// description: Notifications
|
||||
|
@ -67,7 +70,19 @@ func GetNotifications(c *fiber.Ctx) error {
|
|||
// '500':
|
||||
// description: Failed to get notifications
|
||||
|
||||
var query structs.PageQuery
|
||||
|
||||
if err := utils.QueryParserHelper(c, &query); err != nil {
|
||||
return c.SendStatus(fiber.StatusBadRequest)
|
||||
}
|
||||
|
||||
userId := c.Locals("userId").(string)
|
||||
|
||||
return c.JSON(structs.NotificationsResponse{
|
||||
Notifications: notification.GetNotifications(c.Locals("userId").(string)),
|
||||
Notifications: notification.GetNotifications(query, userId),
|
||||
TotalPages: utils.GetTotalPages(utils.NotificationsPaginationLimit,
|
||||
[]structs.Notification{},
|
||||
"user_id = ?",
|
||||
userId),
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue