apskel-pos-backend/internal/handler/report_handler.go
Aditya Siregar 5a42523f0f Update
2025-08-10 20:41:34 +07:00

56 lines
1.7 KiB
Go

package handler
import (
"apskel-pos-be/internal/appcontext"
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/service"
"apskel-pos-be/internal/util"
"time"
"github.com/gin-gonic/gin"
)
type ReportHandler struct {
reportService service.ReportService
userService UserService
}
func NewReportHandler(reportService service.ReportService, userService UserService) *ReportHandler {
return &ReportHandler{reportService: reportService, userService: userService}
}
// GET /api/v1/outlets/:outlet_id/reports/daily-transaction.pdf?date=YYYY-MM-DD
func (h *ReportHandler) GetDailyTransactionReportPDF(c *gin.Context) {
ctx := c.Request.Context()
ci := appcontext.FromGinContext(ctx)
outletID := c.Param("outlet_id")
var dayPtr *time.Time
if d := c.Query("date"); d != "" {
if t, err := time.Parse("2006-01-02", d); err == nil {
dayPtr = &t
}
}
// Get user name for "Dicetak Oleh"
user, err := h.userService.GetUserByID(ctx, ci.UserID)
var genBy string
if err != nil {
// Fallback to user ID if name cannot be retrieved
genBy = ci.UserID.String()
} else {
genBy = user.Name
}
publicURL, fileName, err := h.reportService.GenerateDailyTransactionPDF(ctx, ci.OrganizationID.String(), outletID, dayPtr, genBy)
if err != nil {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError("internal_error", "ReportHandler::GetDailyTransactionReportPDF", err.Error())}), "ReportHandler::GetDailyTransactionReportPDF")
return
}
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(map[string]string{
"url": publicURL,
"file_name": fileName,
}), "ReportHandler::GetDailyTransactionReportPDF")
}