116 lines
2.2 KiB
Go
116 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"code_runner/config"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
_ "github.com/gofiber/fiber/v2"
|
|
|
|
"encoding/json"
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
"github.com/streadway/amqp"
|
|
)
|
|
|
|
func main() {
|
|
amqpServer := os.Getenv(config.AmqpServerKey)
|
|
if amqpServer == "" {
|
|
amqpServer = config.AmqpServerURL
|
|
}
|
|
|
|
connectRabbitMQ, err := amqp.Dial(amqpServer)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer connectRabbitMQ.Close()
|
|
|
|
channelRabbitMQ, err := connectRabbitMQ.Channel()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer channelRabbitMQ.Close()
|
|
|
|
_, err = channelRabbitMQ.QueueDeclare(
|
|
config.TaskQueueName,
|
|
true,
|
|
false,
|
|
false,
|
|
false,
|
|
nil,
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
app := fiber.New()
|
|
|
|
app.Use(cors.New(cors.Config{
|
|
AllowOrigins: "*",
|
|
AllowMethods: "GET,POST,HEAD,PUT,DELETE,PATCH",
|
|
AllowHeaders: "Origin, Content-Type, Accept, Authorization",
|
|
}))
|
|
|
|
app.Use(
|
|
logger.New(),
|
|
)
|
|
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
return c.SendString("Hello, CORS is enabled!")
|
|
})
|
|
|
|
app.Post("/run", func(c *fiber.Ctx) error {
|
|
mess := new(config.MessageCode)
|
|
|
|
if err := c.BodyParser(mess); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "Invalid request body",
|
|
})
|
|
}
|
|
|
|
jsonBody, err := json.Marshal(mess)
|
|
log.Println("FrontEnd JsonBody:", string( jsonBody))
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "Error encoding message",
|
|
})
|
|
}
|
|
fmt.Println("Received message:", mess)
|
|
|
|
message := amqp.Publishing{
|
|
ContentType: "application/json",
|
|
Body: jsonBody,
|
|
}
|
|
|
|
err = channelRabbitMQ.Publish(
|
|
"",
|
|
config.TaskQueueName,
|
|
false,
|
|
false,
|
|
message,
|
|
)
|
|
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"success": false,
|
|
"message": "Failed to publish message to queue",
|
|
})
|
|
}
|
|
|
|
response := config.SuccessResponse{
|
|
Success: true,
|
|
Message: "Code successfully added to queue",
|
|
Queue: config.TaskQueueName,
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(response)
|
|
})
|
|
|
|
log.Fatal(app.Listen(":3000"))
|
|
}
|