change api and apply new schema

This commit is contained in:
aliamerj
2025-08-26 13:00:28 +03:00
parent 1fe6295d44
commit 667dfdfcc3
4 changed files with 118 additions and 87 deletions

View File

@@ -62,7 +62,7 @@ func (h *Handler) CreateJob(w http.ResponseWriter, r *http.Request) {
return
}
job, err := types.NewJob(userAuth.UserId, userAuth.AccountId, peerID, types.JobType(req.Type), req.Parameters)
job, err := types.NewJob(userAuth.UserId, userAuth.AccountId, peerID, req)
if err != nil {
util.WriteError(ctx, err, w)
return
@@ -72,7 +72,7 @@ func (h *Handler) CreateJob(w http.ResponseWriter, r *http.Request) {
return
}
util.WriteJSONObject(ctx, w, job)
util.WriteJSONObject(ctx, w, toSingleJobResponse(job))
}
func (h *Handler) ListJobs(w http.ResponseWriter, r *http.Request) {
@@ -92,7 +92,12 @@ func (h *Handler) ListJobs(w http.ResponseWriter, r *http.Request) {
return
}
util.WriteJSONObject(ctx, w, jobs)
respBody := make([]*api.Job, 0, len(jobs))
for _, job := range jobs {
respBody = append(respBody, toSingleJobResponse(job))
}
util.WriteJSONObject(ctx, w, respBody)
}
func (h *Handler) GetJob(w http.ResponseWriter, r *http.Request) {
@@ -113,7 +118,7 @@ func (h *Handler) GetJob(w http.ResponseWriter, r *http.Request) {
return
}
util.WriteJSONObject(ctx, w, job)
util.WriteJSONObject(ctx, w, toSingleJobResponse(job))
}
func (h *Handler) checkPeerStatus(peer *nbpeer.Peer) (*nbpeer.Peer, error) {
@@ -496,6 +501,29 @@ func toPeerListItemResponse(peer *nbpeer.Peer, groupsInfo []api.GroupMinimum, dn
}
}
func toSingleJobResponse(job *types.Job) *api.Job {
var parameters map[string]any
job.DecodeParameters(&parameters)
return &api.Job{
Id: job.ID,
Status: (*api.JobStatus)(&job.Status),
CompletedAt: job.CompletedAt,
CreatedAt: job.CreatedAt,
FailedReason: &job.FailedReason,
TriggeredBy: job.TriggeredBy,
Workload: struct {
Parameters *map[string]any "json:\"parameters,omitempty\""
Result *string "json:\"result,omitempty\""
Type *api.JobWorkloadType "json:\"type,omitempty\""
}{
Type: (*api.JobWorkloadType)(&job.Type),
Parameters: &parameters,
Result: &job.Result,
},
}
}
func fqdn(peer *nbpeer.Peer, dnsDomain string) string {
fqdn := peer.FQDN(dnsDomain)
if fqdn == "" {

View File

@@ -6,6 +6,7 @@ import (
"time"
"github.com/google/uuid"
"github.com/netbirdio/netbird/shared/management/http/api"
)
type JobStatus string
@@ -65,19 +66,27 @@ type JobParametersBundle struct {
}
// NewJob creates a new job with default fields and validation
func NewJob(triggeredBy, accountID, peerID string, jobType JobType, parameters map[string]any) (*Job, error) {
func NewJob(triggeredBy, accountID, peerID string, req *api.JobRequest) (*Job, error) {
if req.Workload.Type == nil {
return nil, fmt.Errorf("Job type required")
}
if req.Workload.Parameters == nil {
return nil, fmt.Errorf("Job parameters required")
}
job := &Job{
ID: uuid.New().String(),
TriggeredBy: triggeredBy,
PeerID: peerID,
AccountID: accountID,
Type: jobType,
Type: JobType(*req.Workload.Type),
Status: JobStatusPending,
CreatedAt: time.Now().UTC(),
}
// Encode parameters
if err := job.encodeParameters(parameters); err != nil {
if err := job.encodeParameters(*req.Workload.Parameters); err != nil {
return nil, fmt.Errorf("failed to encode job parameters: %w", err)
}