123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package handlers
- import (
- "fmt"
- "net/http"
- "strconv"
- "git.linuxforward.com/byop/byop-engine/dbstore"
- "git.linuxforward.com/byop/byop-engine/models"
- "git.linuxforward.com/byop/byop-engine/services"
- "github.com/gin-gonic/gin"
- )
- type PreviewHandler struct {
- previewService services.PreviewService
- store *dbstore.SQLiteStore
- }
- func NewPreviewHandler(previewService services.PreviewService, store *dbstore.SQLiteStore) *PreviewHandler {
- return &PreviewHandler{
- previewService: previewService,
- store: store,
- }
- }
- // CreatePreview handles the creation of a new preview session.
- func (h *PreviewHandler) CreatePreview(c *gin.Context) {
- ctx := c.Request.Context()
- var requestBody struct {
- AppId int `json:"app_id" binding:"required"`
- }
- if err := c.ShouldBindJSON(&requestBody); err != nil {
- validationErrors := map[string]string{"request_body": fmt.Sprintf("Invalid request body: %v", err)}
- appErr := models.NewErrValidation("invalid_preview_request", validationErrors, err)
- models.RespondWithError(c, appErr)
- return
- }
- preview, err := h.previewService.CreatePreview(ctx, requestBody.AppId)
- if err != nil {
- models.RespondWithError(c, err)
- return
- }
- c.JSON(http.StatusOK, gin.H{"preview": preview})
- }
- // GetPreview retrieves details of a specific preview session.
- func (h *PreviewHandler) GetPreview(c *gin.Context) {
- ctx := c.Request.Context()
- previewIdStr := c.Param("preview_id")
- if previewIdStr == "" {
- appErr := models.NewErrValidation("missing_preview_id", map[string]string{"preview_id": "Preview ID is required in URL path"}, nil)
- models.RespondWithError(c, appErr)
- return
- }
- previewIdInt, err := strconv.Atoi(previewIdStr)
- if err != nil {
- appErr := models.NewErrValidation("invalid_preview_id_format", map[string]string{"preview_id": "Invalid preview ID format, must be an integer"}, err)
- models.RespondWithError(c, appErr)
- return
- }
- preview, err := h.store.GetPreviewByID(ctx, previewIdInt)
- if err != nil {
- models.RespondWithError(c, err)
- return
- }
- c.JSON(http.StatusOK, gin.H{"preview": preview})
- }
|