Files
fm_be/internal/transport/http/dto/response/complaint_response.go
2026-07-16 22:16:45 +07:00

99 lines
5.1 KiB
Go

package response
import shareddto "wucher/internal/transport/http/dto/shared"
// ComplaintMEL groups the MEL deferral attributes. All fields are always present
// (null when not set) so the response shape is predictable for clients.
type ComplaintMEL struct {
// Severity — MEL class: 0=NON-MEL, 1=A, 2=B, 3=C, 4=D. Always set (classification is required at creation).
Severity int8 `json:"severity" example:"2" enums:"0,1,2,3,4"`
// SeverityLabel — human label of the severity (NON-MEL/A/B/C/D).
SeverityLabel *string `json:"severity_label" example:"B"`
// ClassifiedAt / ClassifiedByName / ClassifiedByShort — when/who classified the MEL.
ClassifiedAt *string `json:"classified_at" example:"2026-06-15T03:04:05Z"`
ClassifiedByName *string `json:"classified_by_name" example:"John Doe"`
ClassifiedByShort *string `json:"classified_by_short" example:"JDO"`
// Deadline — grace deadline; after this the aircraft is AOG. null for NON-MEL.
Deadline *string `json:"deadline" example:"2026-06-18T03:04:05Z"`
}
type ComplaintNSR struct {
// IsNSR — Non-Safety Release: true = aircraft released to fly despite the open defect.
IsNSR bool `json:"is_nsr" example:"false"`
// Reason — optional justification for the NSR decision.
Reason *string `json:"reason" example:"not required"`
// DecidedAt / DecidedByName / DecidedByShort — when/who decided NSR (may differ from the reporter).
DecidedAt *string `json:"decided_at" example:"2026-06-15T03:04:05Z"`
DecidedByName *string `json:"decided_by_name" example:"John Doe"`
DecidedByShort *string `json:"decided_by_short" example:"JDO"`
}
type ComplaintAttributes struct {
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FlightID string `json:"flight_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
Description string `json:"description" example:"Engine 2 N2 vibration intermittent during cruise above 110 KIAS"`
Helicopter *shareddto.FleetStatusHelicopter `json:"helicopter,omitempty"`
ReportedBy string `json:"reported_by" example:"John Doe"`
ReportedByShort string `json:"reported_by_short,omitempty" example:"JDO"`
ReportedAt string `json:"reported_at" example:"2026-06-15T03:04:05Z"`
AircraftHoursAtReport *string `json:"aircraft_hours_at_report" example:"1245.3"`
MEL ComplaintMEL `json:"mel"`
NSR ComplaintNSR `json:"nsr"`
ActionSigned bool `json:"action_signed" example:"true"`
ActionTaken *string `json:"action_taken" example:"tightened mount"`
ActionSignedAt *string `json:"action_signed_at" example:"2026-06-15T03:04:05Z"`
ActionSignedByName *string `json:"action_signed_by_name" example:"John Doe"`
ActionSignedByShort *string `json:"action_signed_by_short" example:"JDO"`
AircraftHoursAtFix *string `json:"aircraft_hours_at_fix" example:"1250.1"`
Status string `json:"status" example:"active_mel" enums:"active_non_mel,active_mel,serviced"`
CreatedAt string `json:"created_at" example:"2026-06-15T03:04:05Z"`
UpdatedAt string `json:"updated_at" example:"2026-06-15T03:04:05Z"`
}
type ComplaintResource struct {
Type string `json:"type" example:"complaint"`
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
Attributes ComplaintAttributes `json:"attributes"`
}
type ComplaintResponse struct {
Data ComplaintResource `json:"data"`
}
type ComplaintListResponse struct {
Data []ComplaintResource `json:"data"`
Meta struct {
PageNumber int `json:"page_number" example:"1"`
PageSize int `json:"page_size" example:"20"`
Total int64 `json:"total" example:"1"`
} `json:"meta"`
}
type ComplaintHelicopterGroupAttributes struct {
Helicopter *shareddto.FleetStatusHelicopter `json:"helicopter"`
Complaints []ComplaintResource `json:"complaints"`
}
type ComplaintHelicopterGroupResource struct {
Type string `json:"type" example:"complaint_helicopter_group"`
Attributes ComplaintHelicopterGroupAttributes `json:"attributes"`
}
type ComplaintGroupedListResponse struct {
Data []ComplaintHelicopterGroupResource `json:"data"`
Meta struct {
PageNumber int `json:"page_number" example:"1"`
PageSize int `json:"page_size" example:"20"`
Total int64 `json:"total" example:"1"`
} `json:"meta"`
}
type ComplaintGroupedDataTableResponse struct {
Data []ComplaintHelicopterGroupResource `json:"data"`
Meta struct {
Draw int `json:"draw" example:"1"`
RecordsTotal int64 `json:"records_total" example:"1"`
RecordsFiltered int64 `json:"records_filtered" example:"1"`
} `json:"meta"`
}