provision.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package database
  2. import (
  3. "context"
  4. "fmt"
  5. "git.linuxforward.com/byom/byom-onboard/internal/common/errors"
  6. "git.linuxforward.com/byom/byom-onboard/internal/common/models"
  7. )
  8. func (d *Database) AddVPS(vps *models.VPSInstance) error {
  9. return d.db.Create(vps).Error
  10. }
  11. func (d *Database) GetAvailableVPS(ctx context.Context, plan string) ([]models.VPSInstance, error) {
  12. var vps []models.VPSInstance
  13. result := d.db.WithContext(ctx).
  14. Where("plan = ? AND is_in_use = ?", plan, false).
  15. Find(&vps)
  16. if result.Error != nil {
  17. return nil, fmt.Errorf("failed to get available VPS: %w", result.Error)
  18. }
  19. if len(vps) == 0 {
  20. return nil, errors.ErrNoVPSAvailable
  21. }
  22. return vps, nil
  23. }
  24. func (d *Database) ListVPS() ([]models.VPSInstance, error) {
  25. var vps []models.VPSInstance
  26. rowzs := d.db.Find(&vps)
  27. if rowzs.Error != nil {
  28. return nil, rowzs.Error
  29. }
  30. return vps, nil
  31. }
  32. func (d *Database) AssignVPSToUser(vpsID uint, userID uint) error {
  33. return d.db.Model(&models.VPSInstance{}).
  34. Where("id = ?", vpsID).
  35. Updates(map[string]interface{}{
  36. "is_in_use": true,
  37. "user_id": userID,
  38. }).Error
  39. }
  40. func (d *Database) UnassignVPS(vpsID uint) error {
  41. return d.db.Model(&models.VPSInstance{}).
  42. Where("id = ?", vpsID).
  43. Updates(map[string]interface{}{
  44. "is_in_use": false,
  45. "user_id": nil,
  46. }).Error
  47. }