jit_request.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package schema
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gravitl/netmaker/db"
  6. )
  7. const jitRequestTable = "jit_requests"
  8. type JITRequest struct {
  9. ID string `gorm:"primaryKey" json:"id"`
  10. NetworkID string `gorm:"network_id" json:"network_id"`
  11. UserID string `gorm:"user_id" json:"user_id"`
  12. UserName string `gorm:"user_name" json:"user_name"`
  13. Reason string `gorm:"reason" json:"reason"`
  14. Status string `gorm:"status" json:"status"` // pending, approved, denied, expired
  15. RevokedAt time.Time `gorm:"revoked_at" json:"revoked_at"`
  16. RequestedAt time.Time `gorm:"requested_at" json:"requested_at"`
  17. ApprovedAt time.Time `gorm:"approved_at" json:"approved_at,omitempty"`
  18. ApprovedBy string `gorm:"approved_by" json:"approved_by,omitempty"`
  19. DurationHours int `gorm:"duration_hours" json:"duration_hours,omitempty"`
  20. ExpiresAt time.Time `gorm:"expires_at" json:"expires_at,omitempty"`
  21. }
  22. func (r *JITRequest) Table() string {
  23. return jitRequestTable
  24. }
  25. func (r *JITRequest) Get(ctx context.Context) error {
  26. return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).First(&r).Error
  27. }
  28. func (r *JITRequest) Create(ctx context.Context) error {
  29. return db.FromContext(ctx).Table(r.Table()).Create(&r).Error
  30. }
  31. func (r *JITRequest) Update(ctx context.Context) error {
  32. return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).Updates(&r).Error
  33. }
  34. func (r *JITRequest) Delete(ctx context.Context) error {
  35. return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).Delete(&r).Error
  36. }
  37. func (r *JITRequest) ListByNetwork(ctx context.Context) ([]JITRequest, error) {
  38. var requests []JITRequest
  39. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ?", r.NetworkID).Order("requested_at DESC").Find(&requests).Error
  40. return requests, err
  41. }
  42. func (r *JITRequest) ListByUserAndNetwork(ctx context.Context) ([]JITRequest, error) {
  43. var requests []JITRequest
  44. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND user_id = ?", r.NetworkID, r.UserID).Find(&requests).Error
  45. return requests, err
  46. }
  47. func (r *JITRequest) ListPendingByNetwork(ctx context.Context) ([]JITRequest, error) {
  48. var requests []JITRequest
  49. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, "pending").Find(&requests).Error
  50. return requests, err
  51. }
  52. func (r *JITRequest) ListByStatusAndNetwork(ctx context.Context, status string) ([]JITRequest, error) {
  53. var requests []JITRequest
  54. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, status).Order("requested_at DESC").Find(&requests).Error
  55. return requests, err
  56. }
  57. func (r *JITRequest) CountByNetwork(ctx context.Context) (int64, error) {
  58. var count int64
  59. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ?", r.NetworkID).Count(&count).Error
  60. return count, err
  61. }
  62. func (r *JITRequest) CountByStatusAndNetwork(ctx context.Context, status string) (int64, error) {
  63. var count int64
  64. err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, status).Count(&count).Error
  65. return count, err
  66. }