Implement FCM
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"apskel-pos-be/internal/client"
|
||||
"apskel-pos-be/internal/constants"
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/entities"
|
||||
@@ -14,6 +15,7 @@ import (
|
||||
"apskel-pos-be/internal/util"
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
@@ -28,6 +30,7 @@ type SelfOrderHandler struct {
|
||||
userRepo processor.UserRepository
|
||||
sessionRepo repository.SessionRepository
|
||||
orderRepo repository.OrderRepository
|
||||
fcmClient client.FcmClient
|
||||
}
|
||||
|
||||
func NewSelfOrderHandler(
|
||||
@@ -39,6 +42,7 @@ func NewSelfOrderHandler(
|
||||
userRepo processor.UserRepository,
|
||||
sessionRepo repository.SessionRepository,
|
||||
orderRepo repository.OrderRepository,
|
||||
fcmClient client.FcmClient,
|
||||
) *SelfOrderHandler {
|
||||
return &SelfOrderHandler{
|
||||
orderService: orderService,
|
||||
@@ -49,6 +53,7 @@ func NewSelfOrderHandler(
|
||||
userRepo: userRepo,
|
||||
sessionRepo: sessionRepo,
|
||||
orderRepo: orderRepo,
|
||||
fcmClient: fcmClient,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,10 +356,38 @@ func (h *SelfOrderHandler) CreateOrder(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
go h.sendNewOrderNotification(context.Background(), table.OrganizationID, table.TableName, len(req.OrderItems))
|
||||
|
||||
contractResp := transformer.OrderModelToContract(response)
|
||||
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResp), "SelfOrderHandler::CreateOrder")
|
||||
}
|
||||
|
||||
func (h *SelfOrderHandler) sendNewOrderNotification(ctx context.Context, organizationID uuid.UUID, tableName string, itemCount int) {
|
||||
users, err := h.userRepo.GetUsersWithFcmTokenByOrganization(ctx, organizationID)
|
||||
if err != nil {
|
||||
log.Printf("SelfOrderHandler::sendNewOrderNotification -> failed to get users with FCM token: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
tokens := make([]string, 0, len(users))
|
||||
for _, u := range users {
|
||||
if u.FcmToken != nil && *u.FcmToken != "" {
|
||||
tokens = append(tokens, *u.FcmToken)
|
||||
}
|
||||
}
|
||||
|
||||
if len(tokens) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
title := "Order Baru"
|
||||
body := fmt.Sprintf("Order baru dari Meja %s — %d item", tableName, itemCount)
|
||||
|
||||
if err := h.fcmClient.SendMulticastNotification(ctx, tokens, title, body); err != nil {
|
||||
log.Printf("SelfOrderHandler::sendNewOrderNotification -> failed to send FCM notification: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *SelfOrderHandler) GetOrdersBySession(c *gin.Context) {
|
||||
ctx := c.Request.Context()
|
||||
sessionID := c.Param("sessionId")
|
||||
|
||||
Reference in New Issue
Block a user