Add audit start and end dates to audits

ISO audits often span a window distinct from certificate validity.
Store optional audit_start_date and audit_end_date on the audit
record and expose them through GraphQL, MCP, CLI, n8n, and console.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
This commit is contained in:
Cursor Agent
2026-07-28 14:35:36 +00:00
committed by Bryan Frimin
parent dcb7ffa945
commit fe215efbd1
25 changed files with 385 additions and 28 deletions

View File

@@ -40,6 +40,8 @@ mutation($input: CreateAuditInput!) {
state
validFrom
validUntil
auditStartDate
auditEndDate
}
}
}
@@ -50,11 +52,13 @@ type createResponse struct {
CreateAudit struct {
AuditEdge struct {
Node struct {
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
AuditStartDate *string `json:"auditStartDate"`
AuditEndDate *string `json:"auditEndDate"`
} `json:"node"`
} `json:"auditEdge"`
} `json:"createAudit"`
@@ -68,6 +72,8 @@ func NewCmdCreate(f *cmdutil.Factory) *cobra.Command {
flagState string
flagValidFrom string
flagValidUntil string
flagAuditStartDate string
flagAuditEndDate string
flagCompliancePortalVisibility string
)
@@ -160,6 +166,14 @@ func NewCmdCreate(f *cmdutil.Factory) *cobra.Command {
input["validUntil"] = flagValidUntil
}
if flagAuditStartDate != "" {
input["auditStartDate"] = flagAuditStartDate
}
if flagAuditEndDate != "" {
input["auditEndDate"] = flagAuditEndDate
}
if flagCompliancePortalVisibility != "" {
input["compliancePortalVisibility"] = flagCompliancePortalVisibility
}
@@ -195,6 +209,8 @@ func NewCmdCreate(f *cmdutil.Factory) *cobra.Command {
cmd.Flags().StringVar(&flagState, "state", "", "Audit state: NOT_STARTED, IN_PROGRESS, COMPLETED, REJECTED, OUTDATED")
cmd.Flags().StringVar(&flagValidFrom, "valid-from", "", "Valid from date (e.g. 2026-01-01)")
cmd.Flags().StringVar(&flagValidUntil, "valid-until", "", "Valid until date (e.g. 2026-12-31)")
cmd.Flags().StringVar(&flagAuditStartDate, "audit-start-date", "", "Audit start date (e.g. 2026-03-01)")
cmd.Flags().StringVar(&flagAuditEndDate, "audit-end-date", "", "Audit end date (e.g. 2026-03-15)")
cmd.Flags().StringVar(&flagCompliancePortalVisibility, "compliance-portal-visibility", "", "Compliance portal visibility: NONE, PRIVATE, PUBLIC")
return cmd

View File

@@ -43,6 +43,8 @@ query($id: ID!, $first: Int, $after: CursorKey, $orderBy: AuditOrder) {
state
validFrom
validUntil
auditStartDate
auditEndDate
}
}
pageInfo {
@@ -56,11 +58,13 @@ query($id: ID!, $first: Int, $after: CursorKey, $orderBy: AuditOrder) {
`
type audit struct {
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
AuditStartDate *string `json:"auditStartDate"`
AuditEndDate *string `json:"auditEndDate"`
}
func NewCmdList(f *cmdutil.Factory) *cobra.Command {
@@ -180,16 +184,28 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
validUntil = *a.ValidUntil
}
auditStartDate := ""
if a.AuditStartDate != nil {
auditStartDate = *a.AuditStartDate
}
auditEndDate := ""
if a.AuditEndDate != nil {
auditEndDate = *a.AuditEndDate
}
rows = append(rows, []string{
a.ID,
a.Name,
a.State,
validFrom,
validUntil,
auditStartDate,
auditEndDate,
})
}
t := cmdutil.NewTable("ID", "NAME", "STATE", "VALID FROM", "VALID UNTIL").Rows(rows...)
t := cmdutil.NewTable("ID", "NAME", "STATE", "VALID FROM", "VALID UNTIL", "AUDIT START", "AUDIT END").Rows(rows...)
_, _ = fmt.Fprintln(f.IOStreams.Out, t)

View File

@@ -38,6 +38,8 @@ mutation($input: UpdateAuditInput!) {
state
validFrom
validUntil
auditStartDate
auditEndDate
}
}
}
@@ -46,11 +48,13 @@ mutation($input: UpdateAuditInput!) {
type updateResponse struct {
UpdateAudit struct {
Audit struct {
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
AuditStartDate *string `json:"auditStartDate"`
AuditEndDate *string `json:"auditEndDate"`
} `json:"audit"`
} `json:"updateAudit"`
}
@@ -61,6 +65,8 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
flagState string
flagValidFrom string
flagValidUntil string
flagAuditStartDate string
flagAuditEndDate string
flagCompliancePortalVisibility string
)
@@ -107,6 +113,14 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
input["validUntil"] = flagValidUntil
}
if cmd.Flags().Changed("audit-start-date") {
input["auditStartDate"] = flagAuditStartDate
}
if cmd.Flags().Changed("audit-end-date") {
input["auditEndDate"] = flagAuditEndDate
}
if cmd.Flags().Changed("compliance-portal-visibility") {
input["compliancePortalVisibility"] = flagCompliancePortalVisibility
}
@@ -144,6 +158,8 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command {
cmd.Flags().StringVar(&flagState, "state", "", "Audit state: NOT_STARTED, IN_PROGRESS, COMPLETED, REJECTED, OUTDATED")
cmd.Flags().StringVar(&flagValidFrom, "valid-from", "", "Valid from date (e.g. 2026-01-01)")
cmd.Flags().StringVar(&flagValidUntil, "valid-until", "", "Valid until date (e.g. 2026-12-31)")
cmd.Flags().StringVar(&flagAuditStartDate, "audit-start-date", "", "Audit start date (e.g. 2026-03-01)")
cmd.Flags().StringVar(&flagAuditEndDate, "audit-end-date", "", "Audit end date (e.g. 2026-03-15)")
cmd.Flags().StringVar(&flagCompliancePortalVisibility, "compliance-portal-visibility", "", "Compliance portal visibility: NONE, PRIVATE, PUBLIC")
return cmd

View File

@@ -40,6 +40,8 @@ query($id: ID!) {
state
validFrom
validUntil
auditStartDate
auditEndDate
createdAt
updatedAt
}
@@ -49,14 +51,16 @@ query($id: ID!) {
type viewResponse struct {
Node *struct {
Typename string `json:"__typename"`
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
Typename string `json:"__typename"`
ID string `json:"id"`
Name string `json:"name"`
State string `json:"state"`
ValidFrom *string `json:"validFrom"`
ValidUntil *string `json:"validUntil"`
AuditStartDate *string `json:"auditStartDate"`
AuditEndDate *string `json:"auditEndDate"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
} `json:"node"`
}
@@ -134,6 +138,14 @@ func NewCmdView(f *cmdutil.Factory) *cobra.Command {
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Valid Until:"), *a.ValidUntil)
}
if a.AuditStartDate != nil && *a.AuditStartDate != "" {
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Audit Start:"), *a.AuditStartDate)
}
if a.AuditEndDate != nil && *a.AuditEndDate != "" {
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Audit End:"), *a.AuditEndDate)
}
_, _ = fmt.Fprintln(out)
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Created:"), cmdutil.FormatTime(a.CreatedAt))
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Updated:"), cmdutil.FormatTime(a.UpdatedAt))