Files
2026-02-05 21:48:19 +04:00

82 lines
3.1 KiB
Go

package schema
import (
"context"
"time"
"github.com/gravitl/netmaker/db"
)
const jitRequestTable = "jit_requests"
type JITRequest struct {
ID string `gorm:"primaryKey" json:"id"`
NetworkID string `gorm:"network_id" json:"network_id"`
UserID string `gorm:"user_id" json:"user_id"`
UserName string `gorm:"user_name" json:"user_name"`
Reason string `gorm:"reason" json:"reason"`
Status string `gorm:"status" json:"status"` // pending, approved, denied, expired
RevokedAt time.Time `gorm:"revoked_at" json:"revoked_at"`
RequestedAt time.Time `gorm:"requested_at" json:"requested_at"`
ApprovedAt time.Time `gorm:"approved_at" json:"approved_at,omitempty"`
ApprovedBy string `gorm:"approved_by" json:"approved_by,omitempty"`
DurationHours int `gorm:"duration_hours" json:"duration_hours,omitempty"`
ExpiresAt time.Time `gorm:"expires_at" json:"expires_at,omitempty"`
}
func (r *JITRequest) Table() string {
return jitRequestTable
}
func (r *JITRequest) Get(ctx context.Context) error {
return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).First(&r).Error
}
func (r *JITRequest) Create(ctx context.Context) error {
return db.FromContext(ctx).Table(r.Table()).Create(&r).Error
}
func (r *JITRequest) Update(ctx context.Context) error {
return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).Updates(&r).Error
}
func (r *JITRequest) Delete(ctx context.Context) error {
return db.FromContext(ctx).Table(r.Table()).Where("id = ?", r.ID).Delete(&r).Error
}
func (r *JITRequest) ListByNetwork(ctx context.Context) ([]JITRequest, error) {
var requests []JITRequest
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ?", r.NetworkID).Order("requested_at DESC").Find(&requests).Error
return requests, err
}
func (r *JITRequest) ListByUserAndNetwork(ctx context.Context) ([]JITRequest, error) {
var requests []JITRequest
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND user_id = ?", r.NetworkID, r.UserID).Find(&requests).Error
return requests, err
}
func (r *JITRequest) ListPendingByNetwork(ctx context.Context) ([]JITRequest, error) {
var requests []JITRequest
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, "pending").Find(&requests).Error
return requests, err
}
func (r *JITRequest) ListByStatusAndNetwork(ctx context.Context, status string) ([]JITRequest, error) {
var requests []JITRequest
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, status).Order("requested_at DESC").Find(&requests).Error
return requests, err
}
func (r *JITRequest) CountByNetwork(ctx context.Context) (int64, error) {
var count int64
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ?", r.NetworkID).Count(&count).Error
return count, err
}
func (r *JITRequest) CountByStatusAndNetwork(ctx context.Context, status string) (int64, error) {
var count int64
err := db.FromContext(ctx).Table(r.Table()).Where("network_id = ? AND status = ?", r.NetworkID, status).Count(&count).Error
return count, err
}