preview.go 1.6 KB

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