mirror of
https://github.com/gravitl/netmaker.git
synced 2026-04-22 16:07:11 +08:00
82 lines
3.1 KiB
Go
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
|
|
}
|