123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package provisioning
- import (
- "context"
- "fmt"
- "log"
- "strconv"
- "git.linuxforward.com/byom/byom-onboard/internal/common/models"
- "git.linuxforward.com/byom/byom-onboard/internal/platform/database"
- "github.com/gin-gonic/gin"
- )
- type Handler struct {
- client ProviderClient
- db *database.Database
- }
- func NewHandler(client ProviderClient, db *database.Database) *Handler {
- return &Handler{
- client: client,
- }
- }
- func (h *Handler) AddVPS(c *gin.Context) {
- var req models.AddVPSRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(400, gin.H{"error": err.Error()})
- return
- }
- vps := models.VPSInstance{
- DisplayName: req.DisplayName,
- IpAddress: req.IpAddress,
- Plan: req.Plan,
- }
- if err := h.db.AddVPS(&vps); err != nil {
- c.JSON(500, gin.H{"error": err.Error()})
- return
- }
- c.JSON(200, gin.H{"message": "VPS added successfully"})
- }
- func (h *Handler) ListVPS(c *gin.Context) {
- instances, err := h.db.ListVPS()
- if err != nil {
- c.JSON(500, gin.H{"error": err.Error()})
- return
- }
- c.JSON(200, instances)
- }
- var mapPlanToVPS = map[string]string{
- "basic": "1-2-40",
- "pro": "2-4-80",
- "enterprise": "16-16-160",
- }
- func (h *Handler) FindVPSForPlan(plan string, userID uint) (string, string, error) {
- vps, ok := mapPlanToVPS[plan]
- if !ok {
- return "", "", fmt.Errorf("plan not found")
- }
- availableVPS, err := h.db.GetAvailableVPS(context.Background(), vps)
- if err != nil {
- return "", "", err
- }
- //assign the vps to the user
- id, err := strconv.ParseUint(availableVPS[0].ID, 10, 32)
- if err != nil {
- return "", "", err
- }
- if err := h.db.AssignVPSToUser(uint(id), userID); err != nil {
- return "", "", err
- }
- log.Println("Found", len(availableVPS), "available VPS for plan", plan)
- return availableVPS[0].DisplayName, availableVPS[0].IpAddress, nil
- }
- func (h *Handler) GetVPSStatus(c *gin.Context) {
- var req models.GetVPSStatusRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(400, gin.H{"error": err.Error()})
- return
- }
- status, err := h.client.GetVPSStatus(req.ID)
- if err != nil {
- c.JSON(500, gin.H{"error": err.Error()})
- return
- }
- c.JSON(200, gin.H{"status": status})
- }
|