preview.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package handlers
  2. import (
  3. "fmt"
  4. "net/http"
  5. "strconv"
  6. "git.linuxforward.com/byop/byop-engine/dbstore"
  7. "git.linuxforward.com/byop/byop-engine/models"
  8. "git.linuxforward.com/byop/byop-engine/services"
  9. "github.com/gin-gonic/gin"
  10. )
  11. type PreviewHandler struct {
  12. previewService services.PreviewService
  13. store *dbstore.SQLiteStore
  14. }
  15. func NewPreviewHandler(previewService services.PreviewService, store *dbstore.SQLiteStore) *PreviewHandler {
  16. return &PreviewHandler{
  17. previewService: previewService,
  18. store: store,
  19. }
  20. }
  21. // CreatePreview handles the creation of a new preview session.
  22. func (h *PreviewHandler) CreatePreview(c *gin.Context) {
  23. ctx := c.Request.Context()
  24. var requestBody struct {
  25. AppId int `json:"app_id" binding:"required"`
  26. }
  27. if err := c.ShouldBindJSON(&requestBody); err != nil {
  28. validationErrors := map[string]string{"request_body": fmt.Sprintf("Invalid request body: %v", err)}
  29. appErr := models.NewErrValidation("invalid_preview_request", validationErrors, err)
  30. models.RespondWithError(c, appErr)
  31. return
  32. }
  33. preview, err := h.previewService.CreatePreview(ctx, requestBody.AppId)
  34. if err != nil {
  35. models.RespondWithError(c, err)
  36. return
  37. }
  38. c.JSON(http.StatusOK, gin.H{"preview": preview})
  39. }
  40. // GetPreview retrieves details of a specific preview session.
  41. func (h *PreviewHandler) GetPreview(c *gin.Context) {
  42. ctx := c.Request.Context()
  43. previewIdStr := c.Param("preview_id")
  44. if previewIdStr == "" {
  45. appErr := models.NewErrValidation("missing_preview_id", map[string]string{"preview_id": "Preview ID is required in URL path"}, nil)
  46. models.RespondWithError(c, appErr)
  47. return
  48. }
  49. previewIdInt, err := strconv.Atoi(previewIdStr)
  50. if err != nil {
  51. appErr := models.NewErrValidation("invalid_preview_id_format", map[string]string{"preview_id": "Invalid preview ID format, must be an integer"}, err)
  52. models.RespondWithError(c, appErr)
  53. return
  54. }
  55. preview, err := h.store.GetPreviewByID(ctx, previewIdInt)
  56. if err != nil {
  57. models.RespondWithError(c, err)
  58. return
  59. }
  60. c.JSON(http.StatusOK, gin.H{"preview": preview})
  61. }