init push
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package response
|
||||
|
||||
type ActionSignoffAttributes struct {
|
||||
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
// Signed — true once checked; gates the maintenance release form.
|
||||
Signed bool `json:"signed" example:"false"`
|
||||
// SignedAt / SignedBy — when/who signed; empty until signed.
|
||||
SignedAt *string `json:"signed_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
SignedBy string `json:"signed_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
// SignedByName / SignedByShort — resolved display name + 3-letter short of the signer.
|
||||
SignedByName *string `json:"signed_by_name,omitempty" example:"John Doe"`
|
||||
SignedByShort *string `json:"signed_by_short,omitempty" example:"JDO"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
}
|
||||
|
||||
type ActionSignoffResource struct {
|
||||
Type string `json:"type" example:"action_signoff"`
|
||||
ID string `json:"id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Attributes ActionSignoffAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type ActionSignoffResponse struct {
|
||||
Data ActionSignoffResource `json:"data"`
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type AirRescuerChecklistItemResource struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Oxygen supply check"`
|
||||
Position int `json:"position,omitempty" example:"1"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistAttributes struct {
|
||||
Bases shareddto.AirRescuerChecklistBaseInfo `json:"bases"`
|
||||
ScopeCode string `json:"scope_code,omitempty" example:"TU"`
|
||||
ScopeCodeDe string `json:"scope_code_de,omitempty" example:"DI"`
|
||||
Title string `json:"title,omitempty" example:"Monday Checklist"`
|
||||
Position int `json:"position,omitempty" example:"1"`
|
||||
Items []AirRescuerChecklistItemResource `json:"items"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistResource struct {
|
||||
Type string `json:"type" example:"air_rescuer_checklist"`
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes AirRescuerChecklistAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistResponse struct {
|
||||
Data AirRescuerChecklistResource `json:"data"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistBulkResponse struct {
|
||||
Data []AirRescuerChecklistResource `json:"data"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistItemAttributes struct {
|
||||
ChecklistID string `json:"checklist_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Check radio"`
|
||||
Position int `json:"position,omitempty" example:"1"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistItemData struct {
|
||||
Type string `json:"type" example:"air_rescuer_checklist_item"`
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes AirRescuerChecklistItemAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistItemResponse struct {
|
||||
Data AirRescuerChecklistItemData `json:"data"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistItemBulkResponse struct {
|
||||
Data []AirRescuerChecklistItemData `json:"data"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistCATChecklistSummary struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Title string `json:"title,omitempty" example:"Cockpit Flugretter"`
|
||||
Position int `json:"position,omitempty" example:"1"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistCATGroup struct {
|
||||
ScopeCode string `json:"scope_code,omitempty" example:"DA"`
|
||||
ScopeCodeDe string `json:"scope_code_de,omitempty" example:"TA"`
|
||||
ScopeCodeName string `json:"scope_code_name,omitempty" example:"Daily"`
|
||||
ScopeCodeNameDe string `json:"scope_code_name_de,omitempty" example:"Taeglich"`
|
||||
Checklists []AirRescuerChecklistCATChecklistSummary `json:"checklists"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistTabChecklistDetail struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Title string `json:"title,omitempty" example:"Monday Checklist"`
|
||||
Position int `json:"position,omitempty" example:"1"`
|
||||
ChecklistItems []AirRescuerChecklistItemResource `json:"checklist_items"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistTabResource struct {
|
||||
ScopeCode string `json:"scope_code,omitempty" example:"DA"`
|
||||
ScopeCodeDe string `json:"scope_code_de,omitempty" example:"TA"`
|
||||
ScopeCodeName string `json:"scope_code_name,omitempty" example:"Daily"`
|
||||
ScopeCodeNameDe string `json:"scope_code_name_de,omitempty" example:"Taeglich"`
|
||||
Groups []AirRescuerChecklistCATGroup `json:"groups,omitempty"`
|
||||
Checklists *[]AirRescuerChecklistTabChecklistDetail `json:"checklists,omitempty"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistBaseGroupAttributes struct {
|
||||
Bases shareddto.AirRescuerChecklistBaseInfo `json:"bases"`
|
||||
Tabs []AirRescuerChecklistTabResource `json:"tabs"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistBaseGroupResource struct {
|
||||
Type string `json:"type" example:"air_rescuer_checklist_group"`
|
||||
ID string `json:"id,omitempty" example:"base-018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes AirRescuerChecklistBaseGroupAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistGroupedListResponse struct {
|
||||
Data []AirRescuerChecklistBaseGroupResource `json:"data"`
|
||||
Meta struct {
|
||||
TotalBases int `json:"total_bases" example:"8"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type AirRescuerChecklistGroupedDataTableResponse struct {
|
||||
Data []AirRescuerChecklistBaseGroupResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int `json:"records_total" example:"8"`
|
||||
RecordsFiltered int `json:"records_filtered" example:"8"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
98
internal/transport/http/dto/response/complaint_response.go
Normal file
98
internal/transport/http/dto/response/complaint_response.go
Normal file
@@ -0,0 +1,98 @@
|
||||
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"`
|
||||
}
|
||||
227
internal/transport/http/dto/response/duty_roster_response.go
Normal file
227
internal/transport/http/dto/response/duty_roster_response.go
Normal file
@@ -0,0 +1,227 @@
|
||||
package response
|
||||
|
||||
type DutyRosterShiftTime struct {
|
||||
ShiftStart string `json:"shift_start,omitempty" example:"06:00"`
|
||||
ShiftEnd string `json:"shift_end,omitempty" example:"21:00"`
|
||||
}
|
||||
|
||||
type DutyRosterShiftDate struct {
|
||||
DateStart string `json:"date_start,omitempty" example:"2026-03-16"`
|
||||
DateEnd string `json:"date_end,omitempty" example:"2026-03-16"`
|
||||
}
|
||||
|
||||
type DutyRosterCrew struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Hunter Wolfgang"`
|
||||
Role string `json:"role,omitempty" example:"doctor"`
|
||||
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
|
||||
Email string `json:"email,omitempty" example:"doctor@example.com"`
|
||||
ShiftDate *DutyRosterShiftDate `json:"shift_date,omitempty"`
|
||||
ShiftTime *DutyRosterShiftTime `json:"shift_time,omitempty"`
|
||||
}
|
||||
|
||||
type DutyRosterPilotCrew struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Hunter Wolfgang"`
|
||||
Role string `json:"role,omitempty" example:"pilot"`
|
||||
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
|
||||
Email string `json:"email,omitempty" example:"pilot@example.com"`
|
||||
ShiftDate *DutyRosterShiftDate `json:"shift_date,omitempty"`
|
||||
CrewType string `json:"crew_type,omitempty" example:"main"`
|
||||
FlightInstructor *bool `json:"flight_instructor,omitempty"`
|
||||
LineChecker *bool `json:"line_checker,omitempty"`
|
||||
Supervisor *bool `json:"supervisor,omitempty"`
|
||||
Examiner *bool `json:"examiner,omitempty"`
|
||||
CoPilot *bool `json:"co_pilot,omitempty"`
|
||||
}
|
||||
|
||||
type DutyRosterDetailsResponse struct {
|
||||
Pilot []DutyRosterPilotCrew `json:"pilot"`
|
||||
Doctor []DutyRosterCrew `json:"doctor"`
|
||||
Rescuer []DutyRosterCrew `json:"rescuer"`
|
||||
Helper []DutyRosterCrew `json:"helper"`
|
||||
OtherPerson []DutyRosterCrew `json:"other_person"`
|
||||
}
|
||||
|
||||
type DutyRosterBaseInfo struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Type string `json:"type,omitempty" example:"hems"`
|
||||
BaseName string `json:"base_name,omitempty" example:"Gallus 1 - Zurs Lech"`
|
||||
BaseAbbreviation string `json:"base_abbreviation,omitempty" example:"G1"`
|
||||
ShiftTime DutyRosterShiftTime `json:"shift_time,omitempty"`
|
||||
}
|
||||
|
||||
type DutyRosterHelicopterSummary struct {
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Designation string `json:"designation" example:"OE-XHZ"`
|
||||
Identifier string `json:"identifier" example:"1234"`
|
||||
Type string `json:"type" example:"EC-135"`
|
||||
}
|
||||
|
||||
type DutyRosterAttributes struct {
|
||||
Bases DutyRosterBaseInfo `json:"bases"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Helicopter DutyRosterHelicopterSummary `json:"helicopter"`
|
||||
DutyDate string `json:"duty_date,omitempty" example:"2026-03-16"`
|
||||
ShiftTime DutyRosterShiftTime `json:"shift_time"`
|
||||
Detail DutyRosterDetailsResponse `json:"roster_detail"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type DutyRosterResource struct {
|
||||
Type string `json:"type" example:"duty_roster"`
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes DutyRosterAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type DutyRosterResponse struct {
|
||||
Data DutyRosterResource `json:"data"`
|
||||
}
|
||||
|
||||
type DutyRosterListResponse struct {
|
||||
Data []DutyRosterResource `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"31"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterGetAllMeta struct {
|
||||
PageNumber int `json:"page_number"`
|
||||
PageSize int `json:"page_size"`
|
||||
RecordsTotal int `json:"records_total"`
|
||||
RecordsFiltered int `json:"records_filtered"`
|
||||
From string `json:"from"`
|
||||
To string `json:"to"`
|
||||
Timezone string `json:"timezone"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
|
||||
type DutyRosterGetAllData struct {
|
||||
HEMS []DutyRosterBaseGroupResource `json:"hems_base"`
|
||||
Base []DutyRosterBaseGroupResource `json:"base"`
|
||||
}
|
||||
|
||||
type DutyRosterGetAllResponse struct {
|
||||
Data DutyRosterGetAllData `json:"data"`
|
||||
Meta DutyRosterGetAllMeta `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyResource struct {
|
||||
Type string `json:"type"`
|
||||
ID string `json:"id,omitempty"`
|
||||
Attributes map[string]any `json:"attributes"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyResponse struct {
|
||||
Data DutyRosterAnyResource `json:"data"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyListResponse struct {
|
||||
Data []DutyRosterAnyResource `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"31"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyDeleteResponse struct {
|
||||
Data DutyRosterAnyDeleteResource `json:"data"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyDeleteResource struct {
|
||||
Type string `json:"type" example:"duty_roster_delete"`
|
||||
Attributes DutyRosterAnyDeleteAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type DutyRosterAnyDeleteAttributes struct {
|
||||
Deleted bool `json:"deleted" example:"true"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Base DutyRosterBaseInfo `json:"base"`
|
||||
}
|
||||
|
||||
type DutyRosterUnifiedDataTableResponse struct {
|
||||
Data DutyRosterGetAllData `json:"data"`
|
||||
Meta DutyRosterUnifiedDataTableMeta `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterUnifiedDataTableMeta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int `json:"records_total" example:"20"`
|
||||
RecordsFiltered int `json:"records_filtered" example:"20"`
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
From string `json:"from" example:"2026-03-01"`
|
||||
To string `json:"to" example:"2026-03-31"`
|
||||
Timezone string `json:"timezone" example:"UTC"`
|
||||
Total int `json:"total" example:"20"`
|
||||
TotalGroups int `json:"total_groups" example:"20"`
|
||||
TotalRosters int `json:"total_rosters" example:"45"`
|
||||
NonEmptyGroups int `json:"non_empty_groups" example:"18"`
|
||||
}
|
||||
|
||||
type DutyRosterGroupRoster struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
DutyDate string `json:"duty_date,omitempty" example:"2026-03-16"`
|
||||
ShiftTime DutyRosterShiftTime `json:"shift_time"`
|
||||
Helicopter DutyRosterHelicopterSummary `json:"helicopter"`
|
||||
Detail DutyRosterDetailsResponse `json:"roster_detail"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type DutyRosterBaseGroupAttributes struct {
|
||||
Bases DutyRosterBaseInfo `json:"bases"`
|
||||
Rosters []DutyRosterGroupRoster `json:"rosters"`
|
||||
}
|
||||
|
||||
type DutyRosterBaseGroupResource struct {
|
||||
Type string `json:"type" example:"hems_base_roster_group"`
|
||||
Attributes DutyRosterBaseGroupAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type DutyRosterGroupedListResponse struct {
|
||||
Data []DutyRosterBaseGroupResource `json:"data"`
|
||||
Meta struct {
|
||||
From string `json:"from,omitempty" example:"2026-03-16"`
|
||||
To string `json:"to,omitempty" example:"2026-04-15"`
|
||||
TotalBases int `json:"total_bases" example:"8"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterGroupedDataTableResponse struct {
|
||||
Data []DutyRosterBaseGroupResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int `json:"records_total" example:"8"`
|
||||
RecordsFiltered int `json:"records_filtered" example:"8"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type DutyRosterDeletedCrewItem struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
RosterID string `json:"roster_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
UserID string `json:"user_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Pilot One"`
|
||||
RoleCode string `json:"role_code,omitempty" example:"pilot"`
|
||||
CrewType string `json:"crew_type,omitempty" example:"main"`
|
||||
DateStart string `json:"date_start,omitempty" example:"2026-03-20"`
|
||||
DateEnd string `json:"date_end,omitempty" example:"2026-03-22"`
|
||||
}
|
||||
|
||||
type DutyRosterCrewDeleteAttributes struct {
|
||||
Deleted bool `json:"deleted" example:"true"`
|
||||
DeletedCount int `json:"deleted_count" example:"1"`
|
||||
DeletedItems []DutyRosterDeletedCrewItem `json:"deleted_items"`
|
||||
}
|
||||
|
||||
type DutyRosterCrewDeleteResource struct {
|
||||
Type string `json:"type" example:"duty_roster_crew_delete"`
|
||||
Attributes DutyRosterCrewDeleteAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type DutyRosterCrewDeleteResponse struct {
|
||||
Data DutyRosterCrewDeleteResource `json:"data"`
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package response
|
||||
|
||||
type EASAReleaseAttributes struct {
|
||||
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
ComplaintID string `json:"complaint_id,omitempty" example:"019d6774-1111-7fba-9ef4-3795c0da8a13"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
EASADate *string `json:"easa_date,omitempty" example:"2026-06-16"`
|
||||
EASAACHours *string `json:"easa_ac_hours,omitempty" example:"1245.3"`
|
||||
EASALocation *string `json:"easa_location,omitempty" example:"LOWI"`
|
||||
EASAWONo *string `json:"easa_wo_no,omitempty" example:"WO-2026-001"`
|
||||
EASAMaintManualRevAirframe *string `json:"easa_maint_manual_rev_airframe,omitempty" example:"Rev 12"`
|
||||
EASAMaintManualRevEngine *string `json:"easa_maint_manual_rev_engine,omitempty" example:"Rev 8"`
|
||||
// EASASignerID — contact id (UUIDv7) of the signer/technician.
|
||||
EASASignerID *string `json:"easa_signer_id,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
// EASASignerName / EASASignerShort — resolved display name + 3-letter short of the signer contact.
|
||||
EASASignerName *string `json:"easa_signer_name,omitempty" example:"John Doe"`
|
||||
EASASignerShort *string `json:"easa_signer_short,omitempty" example:"JDO"`
|
||||
EASAPermitNo *string `json:"easa_permit_no,omitempty" example:"145.A.50"`
|
||||
// IsSigned — true once the release is signed (Release to Service); then the complaint becomes fixed.
|
||||
IsSigned bool `json:"is_signed" example:"false"`
|
||||
// SignedAt / SignedBy — when/who signed; empty until signed.
|
||||
SignedAt *string `json:"signed_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
SignedBy string `json:"signed_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
// MissingSignFields — required fields still empty; must all be filled before it can be signed.
|
||||
MissingSignFields []string `json:"missing_sign_fields,omitempty"`
|
||||
CreatedAt string `json:"created_at" example:"2026-06-16T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at" example:"2026-06-16T03:04:05Z"`
|
||||
}
|
||||
|
||||
type EASAReleaseResource struct {
|
||||
Type string `json:"type" example:"easa_release"`
|
||||
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Attributes EASAReleaseAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type EASAReleaseResponse struct {
|
||||
Data EASAReleaseResource `json:"data"`
|
||||
}
|
||||
|
||||
// EASAReleaseDeleteResponse is the ack returned when an EASA release is voided/deleted.
|
||||
type EASAReleaseDeleteResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"easa_release_delete"`
|
||||
Attributes struct {
|
||||
Deleted bool `json:"deleted" example:"true"`
|
||||
} `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type EASAReleaseListResponse struct {
|
||||
Data []EASAReleaseResource `json:"data"`
|
||||
Meta struct {
|
||||
Total int64 `json:"total" example:"1"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package response
|
||||
|
||||
type FileManagerActionLocation struct {
|
||||
FolderID string `json:"folder_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
}
|
||||
|
||||
type FileManagerActionResultAttributes struct {
|
||||
Status string `json:"status" example:"trashed"`
|
||||
Location *FileManagerActionLocation `json:"location,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerActionResultResource struct {
|
||||
Type string `json:"type" example:"file_manager_delete_result"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes FileManagerActionResultAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerActionResultResponse struct {
|
||||
Data FileManagerActionResultResource `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerMoveNodeResultAttributes struct {
|
||||
NodeType string `json:"node_type" example:"folder"`
|
||||
Status string `json:"status" example:"moved"`
|
||||
Location *FileManagerActionLocation `json:"location,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerMoveNodeResultResource struct {
|
||||
Type string `json:"type" example:"file_manager_move_result"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes FileManagerMoveNodeResultAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerActionBulkError struct {
|
||||
Status int `json:"status" example:"422"`
|
||||
Code string `json:"code,omitempty" example:"FILE_MANAGER_VALIDATION_FAILED"`
|
||||
ErrorCode string `json:"error_code,omitempty" example:"4222111"`
|
||||
Title string `json:"title" example:"Validation error"`
|
||||
Detail string `json:"detail" example:"duplicate name in target folder"`
|
||||
}
|
||||
|
||||
type FileManagerMoveNodeBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *FileManagerMoveNodeResultResource `json:"resource,omitempty"`
|
||||
Error *FileManagerActionBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerMoveNodeBulkResponse struct {
|
||||
Data []FileManagerMoveNodeBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerPurgeNodeResultAttributes struct {
|
||||
NodeType string `json:"node_type" example:"folder"`
|
||||
Status string `json:"status" example:"purged"`
|
||||
}
|
||||
|
||||
type FileManagerPurgeNodeResultResource struct {
|
||||
Type string `json:"type" example:"file_manager_purge_result"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes FileManagerPurgeNodeResultAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerPurgeNodeBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *FileManagerPurgeNodeResultResource `json:"resource,omitempty"`
|
||||
Error *FileManagerActionBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerPurgeNodeBulkResponse struct {
|
||||
Data []FileManagerPurgeNodeBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type FileManagerAttachmentResource struct {
|
||||
Type string `json:"type" example:"file_manager_attachment"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerAttachmentAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerAttachmentResponse struct {
|
||||
Data FileManagerAttachmentResource `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerAttachmentListResponse struct {
|
||||
Data []FileManagerAttachmentResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package response
|
||||
|
||||
type FileManagerFileUpdatedSSEPayload struct {
|
||||
FileID string `json:"file_id"`
|
||||
Status string `json:"status"`
|
||||
FolderID *string `json:"folder_id"`
|
||||
Name string `json:"name"`
|
||||
MimeType string `json:"mime_type"`
|
||||
UpdatedAt string `json:"updated_at"`
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type FileManagerFileResource struct {
|
||||
Type string `json:"type" example:"file_manager_file"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFileListResource struct {
|
||||
Type string `json:"type" example:"file_manager_file"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileListAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFileResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"file_manager_file"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileAttributes `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFileDetailResource struct {
|
||||
Type string `json:"type" example:"file_manager_file"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileDetailAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFileDetailResponse struct {
|
||||
Data FileManagerFileDetailResource `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFileListResponse struct {
|
||||
Data []FileManagerFileListResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerFileDownloadURLResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"file_manager_file_download"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileDownloadAttributes `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFileUploadIntentResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"file_manager_file_upload_intent"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileUploadIntentAttributes `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFileUploadIntentResource struct {
|
||||
Type string `json:"type" example:"file_manager_file_upload_intent"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileUploadIntentAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFileWOPISessionData struct {
|
||||
FileID string `json:"file_id" example:"019f0386-0a00-7a4a-a2d8-30afc0e0c3ad"`
|
||||
CollaboraAction string `json:"collabora_action" example:"https://collabora.example.com/browser/123?WOPISrc=..."`
|
||||
AccessToken string `json:"access_token" example:"eyJhbGciOiJIUzI1NiIs..."`
|
||||
// AccessTokenTTL is the access token's absolute expiry time, in epoch
|
||||
// milliseconds (equal to the JWT exp claim), as required by WOPI/Collabora.
|
||||
AccessTokenTTL int64 `json:"access_token_ttl" example:"1782971996000"`
|
||||
}
|
||||
|
||||
type FileManagerFileWOPISessionResponse struct {
|
||||
Data FileManagerFileWOPISessionData `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFileBulkError struct {
|
||||
Status int `json:"status" example:"422"`
|
||||
Code string `json:"code,omitempty" example:"FILE_MANAGER_VALIDATION_FAILED"`
|
||||
ErrorCode string `json:"error_code,omitempty" example:"4222111"`
|
||||
Title string `json:"title" example:"Validation error"`
|
||||
Detail string `json:"detail" example:"duplicate name in target folder"`
|
||||
}
|
||||
|
||||
type FileManagerFileBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Message string `json:"message,omitempty" example:"created"`
|
||||
Resource *FileManagerFileResource `json:"resource,omitempty"`
|
||||
Error *FileManagerFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerFileBulkResponse struct {
|
||||
Data []FileManagerFileBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerFileUploadIntentBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *FileManagerFileUploadIntentResource `json:"resource,omitempty"`
|
||||
Error *FileManagerFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerFileUploadIntentBulkResponse struct {
|
||||
Data []FileManagerFileUploadIntentBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerFileCancelUploadResource struct {
|
||||
Type string `json:"type" example:"file_manager_file_cancel_upload_result"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes struct {
|
||||
Status string `json:"status" example:"canceled"`
|
||||
} `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFileCancelUploadBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *FileManagerFileCancelUploadResource `json:"resource,omitempty"`
|
||||
Error *FileManagerFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type FileManagerFileCancelUploadBulkResponse struct {
|
||||
Data []FileManagerFileCancelUploadBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type FileManagerFolderResource struct {
|
||||
Type string `json:"type" example:"file_manager_folder"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFolderAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFolderResponse struct {
|
||||
Data FileManagerFolderResource `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFolderDetailResource struct {
|
||||
Type string `json:"type" example:"file_manager_folder"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFolderDetailAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerFolderDetailResponse struct {
|
||||
Data FileManagerFolderDetailResource `json:"data"`
|
||||
}
|
||||
|
||||
type FileManagerFolderListResponse struct {
|
||||
Data []FileManagerFolderResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerNodeAttributes struct {
|
||||
NodeType string `json:"node_type" example:"folder"`
|
||||
ParentID *string `json:"parent_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name" example:"operations"`
|
||||
Extension string `json:"extension,omitempty" example:"pdf"`
|
||||
SizeBytes int64 `json:"size_bytes,omitempty" example:"1024"`
|
||||
MimeType string `json:"mime_type,omitempty" example:"application/pdf"`
|
||||
DownloadURL string `json:"download_url,omitempty" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/files/2026/04/05/policy.pdf?X-Amz-Signature=..."`
|
||||
Status string `json:"status" example:"ready"`
|
||||
PathCache string `json:"path_cache,omitempty" example:"/root/operations"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type FileManagerNodeResource struct {
|
||||
Type string `json:"type" example:"file_manager_node"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes FileManagerNodeAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerNodeListResponse struct {
|
||||
Data []FileManagerNodeResource `json:"data"`
|
||||
Meta struct {
|
||||
ParentUUID *string `json:"parent_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Breadcrumb []FileManagerBreadcrumbItem `json:"breadcrumb,omitempty"`
|
||||
IsRoot bool `json:"is_root" example:"true"`
|
||||
Folders int `json:"folders" example:"4"`
|
||||
Files int `json:"files" example:"8"`
|
||||
Total int `json:"total" example:"12"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FileManagerBreadcrumbItem struct {
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name" example:"operations"`
|
||||
}
|
||||
|
||||
type FileManagerTrashNodeAttributes struct {
|
||||
NodeType string `json:"node_type" example:"folder"`
|
||||
Name string `json:"name" example:"Documents"`
|
||||
Extension string `json:"extension,omitempty" example:"pdf"`
|
||||
SizeBytes int64 `json:"size_bytes,omitempty" example:"123456"`
|
||||
MimeType string `json:"mime_type,omitempty" example:"application/pdf"`
|
||||
DownloadURL string `json:"download_url,omitempty" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/files/2026/04/05/policy.pdf?X-Amz-Signature=..."`
|
||||
PathCache string `json:"path_cache,omitempty" example:"/Documents"`
|
||||
TrashedAt string `json:"trashed_at" example:"2026-04-01T10:00:00Z"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-31T08:52:03Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-31T08:52:03Z"`
|
||||
}
|
||||
|
||||
type FileManagerTrashNodeResource struct {
|
||||
Type string `json:"type" example:"file_manager_trash_node"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes FileManagerTrashNodeAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FileManagerTrashListResponse struct {
|
||||
Data []FileManagerTrashNodeResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int `json:"total" example:"120"`
|
||||
Folders int `json:"folders" example:"50"`
|
||||
Files int `json:"files" example:"70"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package response
|
||||
|
||||
// FleetHistoryEntry is one event in a helicopter's unified timeline (complaint /
|
||||
// MEL / NSR / action / MCF / EASA / AOG events plus maintenance servicing).
|
||||
type FleetHistoryEntry struct {
|
||||
At string `json:"at" example:"2026-06-17T10:15:00Z"`
|
||||
EntityType string `json:"entity_type" example:"easa_release"`
|
||||
EntityID string `json:"entity_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Action string `json:"action" example:"easa_signed"`
|
||||
Message string `json:"message" example:"Release to Service (EASA signed)"`
|
||||
Actor string `json:"actor,omitempty" example:"019e91e6-2908-7f37-93e6-015ed1b7587d"`
|
||||
ActorName string `json:"actor_name,omitempty" example:"John Doe"`
|
||||
}
|
||||
|
||||
type FleetHistoryListResponse struct {
|
||||
Data []FleetHistoryEntry `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"`
|
||||
}
|
||||
107
internal/transport/http/dto/response/fleet_status_response.go
Normal file
107
internal/transport/http/dto/response/fleet_status_response.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type FleetStatusAttributes struct {
|
||||
Helicopter *shareddto.FleetStatusHelicopter `json:"helicopter,omitempty"`
|
||||
Status string `json:"status" example:"active" enums:"active,serviced"`
|
||||
ServicedAt string `json:"serviced_at,omitempty" example:"2026-05-29T07:43:06Z"`
|
||||
MaintenanceSchedules []shareddto.MaintenanceScheduleAttributes `json:"maintenance_schedules"`
|
||||
Files []FleetStatusFile `json:"files"`
|
||||
Summary shareddto.FleetStatusSummary `json:"summary"`
|
||||
MCF *shareddto.FleetStatusMCF `json:"mcf,omitempty"`
|
||||
Complaints []shareddto.FleetStatusComplaint `json:"complaints,omitempty"`
|
||||
EASARelease *shareddto.FleetStatusEASARelease `json:"easa_release,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-05-29T07:43:06Z"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"John Doe"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-05-29T07:43:06Z"`
|
||||
UpdatedBy string `json:"updated_by,omitempty" example:"John Doe"`
|
||||
}
|
||||
|
||||
type FleetStatusFile struct {
|
||||
ID string `json:"id,omitempty" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
FileAttachmentID string `json:"file_attachment_id" example:"019d7000-aaaa-7bbb-8ccc-111111111111"`
|
||||
Category string `json:"category" example:"wb"`
|
||||
IsMandatory bool `json:"is_mandatory" example:"true"`
|
||||
Name string `json:"name,omitempty" example:"weight_balance.pdf"`
|
||||
DownloadURL string `json:"download_url,omitempty" example:"https://storage.example.com/fleet/wb.pdf?X-Amz-Signature=abc123"`
|
||||
ThumbnailDownloadURL string `json:"thumbnail_download_url,omitempty" example:"https://storage.example.com/fleet/wb.thumb.jpg?X-Amz-Signature=abc123"`
|
||||
SizeBytes *int64 `json:"size_bytes,omitempty" example:"1024000"`
|
||||
}
|
||||
|
||||
type FleetStatusResource struct {
|
||||
Type string `json:"type" example:"fleet_status"`
|
||||
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Attributes FleetStatusAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FleetStatusResponse struct {
|
||||
Data FleetStatusResource `json:"data"`
|
||||
}
|
||||
|
||||
type FleetStatusListResponse struct {
|
||||
Data []FleetStatusResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"100"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type FleetStatusDataTableResponse struct {
|
||||
Data []FleetStatusResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int64 `json:"records_total" example:"100"`
|
||||
RecordsFiltered int64 `json:"records_filtered" example:"20"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
// FleetStatusDeleteResponse is the ack returned when a fleet status is deleted.
|
||||
type FleetStatusDeleteResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"fleet_status_delete"`
|
||||
Attributes struct {
|
||||
Deleted bool `json:"deleted" example:"true"`
|
||||
} `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
// FleetStatusMarkServicedResponse is the ack returned when a fleet status is marked serviced.
|
||||
type FleetStatusMarkServicedResponse struct {
|
||||
Data struct {
|
||||
Type string `json:"type" example:"fleet_status_mark_serviced"`
|
||||
Attributes struct {
|
||||
Serviced bool `json:"serviced" example:"true"`
|
||||
} `json:"attributes"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type FleetStatusServiceLogAttributes struct {
|
||||
FleetStatusID string `json:"fleet_status_id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Helicopter *shareddto.FleetStatusHelicopter `json:"helicopter,omitempty"`
|
||||
FleetStatusStatus string `json:"fleet_status_status,omitempty" example:"serviced"`
|
||||
InspectionType string `json:"inspection_type" example:"A/F"`
|
||||
Type string `json:"type" example:"100H"`
|
||||
Due string `json:"due" example:"1200 FH"`
|
||||
Ext string `json:"ext" example:"1300 FH"`
|
||||
ServicedAt string `json:"serviced_at" example:"2026-05-29T07:43:06Z"`
|
||||
CreatedAt string `json:"created_at" example:"2026-05-29T07:43:06Z"`
|
||||
CreatedBy string `json:"created_by" example:"John Doe"`
|
||||
}
|
||||
|
||||
type FleetStatusServiceLogResource struct {
|
||||
Type string `json:"type" example:"fleet_status_service_log"`
|
||||
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Attributes FleetStatusServiceLogAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FleetStatusServiceLogListResponse struct {
|
||||
Data []FleetStatusServiceLogResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"100"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
139
internal/transport/http/dto/response/flight_data_response.go
Normal file
139
internal/transport/http/dto/response/flight_data_response.go
Normal file
@@ -0,0 +1,139 @@
|
||||
package response
|
||||
|
||||
type FlightDataAttributes struct {
|
||||
Status string `json:"status" example:"in_progress"`
|
||||
Mission *FlightDataMissionRef `json:"mission,omitempty"`
|
||||
RosterDetails *TakeoverDutyRosterDetailsResponse `json:"roster_details,omitempty"`
|
||||
HESLO *FlightDataSPOHESLODetails `json:"heslo,omitempty" extensions:"x-note=Only returned for SPO missions"`
|
||||
Logging *FlightDataSPOLoggingDetails `json:"logging,omitempty" extensions:"x-note=Only returned for SPO missions"`
|
||||
HEC *FlightDataSPOHECDetails `json:"hec,omitempty" extensions:"x-note=Only returned for SPO missions"`
|
||||
CoPilot *FlightDataCoPilotRef `json:"co_pilot,omitempty"`
|
||||
From *FlightDataLocationRef `json:"from,omitempty"`
|
||||
To *FlightDataLocationRef `json:"to,omitempty"`
|
||||
FlightTakeOff string `json:"flight_take_off,omitempty" example:"2026-04-20T08:00:00Z"`
|
||||
FlightLanding string `json:"flight_landing,omitempty" example:"2026-04-20T09:15:00Z"`
|
||||
FlightDuration int64 `json:"flight_duration_seconds" example:"4500"`
|
||||
FlightRED int64 `json:"flight_red_seconds" example:"300"`
|
||||
MaxN1 float64 `json:"max_n1" example:"97.5"`
|
||||
MaxN2 float64 `json:"max_n2" example:"98.1"`
|
||||
PaxCount int `json:"pax_count" example:"4"`
|
||||
LandingCount int `json:"landing_count" example:"1"`
|
||||
RotorBrakeCycle int `json:"rotor_brake_cycle" example:"1"`
|
||||
HookReleases int `json:"hook_releases" example:"0"`
|
||||
TicketNo string `json:"ticket_no,omitempty" example:"TKT-001"`
|
||||
Engine string `json:"engine,omitempty" example:"PW207D1"`
|
||||
DeliveryNoteNumber string `json:"delivery_note_number,omitempty" example:"DN-1001"`
|
||||
CustomerName string `json:"customer_name,omitempty" example:"Air Service"`
|
||||
FlightPlanDistance float64 `json:"flight_plan_distance" example:"120.5"`
|
||||
FlightPlanTimeSeconds int64 `json:"flight_plan_time_seconds" example:"4200"`
|
||||
FlightPlanTrueCourse float64 `json:"flight_plan_true_course" example:"182.3"`
|
||||
FuelBeforeFlight float64 `json:"fuel_before_flight" example:"420"`
|
||||
FuelUpload float64 `json:"fuel_upload" example:"100"`
|
||||
FuelAfterFlight float64 `json:"fuel_after_flight" example:"280"`
|
||||
FuelPlanning float64 `json:"fuel_planning" example:"390"`
|
||||
FlightPositioning bool `json:"flight_positioning" example:"false"`
|
||||
OtherInformation string `json:"other_information,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-04-20T08:00:00Z"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-04-20T08:00:00Z"`
|
||||
UpdatedBy string `json:"updated_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHESLODetails struct {
|
||||
Flights []FlightDataSPOHESLOFlight `json:"flights"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHESLOFlight struct {
|
||||
ID string `json:"id"`
|
||||
ROT int `json:"rot"`
|
||||
// Facility category: heslo-rope-label.
|
||||
HESLORopeLabelID string `json:"heslo_rope_label_id,omitempty"`
|
||||
HESLORopeLabelName string `json:"heslo_rope_label_name,omitempty"`
|
||||
Slings []FlightDataSPOHESLOSling `json:"slings"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHESLOSling struct {
|
||||
ID string `json:"id"`
|
||||
// Facility category: heslo-rope-length.
|
||||
SlingID string `json:"sling_id,omitempty"`
|
||||
SlingName string `json:"sling_name,omitempty"`
|
||||
}
|
||||
|
||||
type FlightDataSPOLoggingDetails struct {
|
||||
Slings []FlightDataSPOLoggingSling `json:"slings"`
|
||||
}
|
||||
|
||||
type FlightDataSPOLoggingSling struct {
|
||||
ID string `json:"id"`
|
||||
// Facility category: heslo-hook.
|
||||
SlingID string `json:"sling_id,omitempty"`
|
||||
SlingName string `json:"sling_name,omitempty"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHECDetails struct {
|
||||
Flights []FlightDataSPOHECFlight `json:"flights"`
|
||||
Slings []FlightDataSPOHECSling `json:"slings"`
|
||||
Loads []FlightDataSPOHECLoad `json:"loads"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHECFlight struct {
|
||||
ID string `json:"id"`
|
||||
ROT int `json:"rot"`
|
||||
HECCycle int `json:"hec_cycle"`
|
||||
// Facility category: hec-rope-label.
|
||||
EquipmentID string `json:"equipment_id,omitempty"`
|
||||
EquipmentName string `json:"equipment_name,omitempty"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHECSling struct {
|
||||
ID string `json:"id"`
|
||||
// Facility category: hec-rope-length.
|
||||
SlingID string `json:"sling_id,omitempty"`
|
||||
SlingName string `json:"sling_name,omitempty"`
|
||||
}
|
||||
|
||||
type FlightDataSPOHECLoad struct {
|
||||
ID string `json:"id"`
|
||||
// Weight band for the HEC load, e.g. "bis 199 kg", "200-600 kg", "600-800 kg", "800-1000 kg".
|
||||
LoadCategory string `json:"load_category,omitempty" example:"200-600 kg"`
|
||||
Quantity int `json:"quantity" example:"3"`
|
||||
}
|
||||
|
||||
type FlightDataMissionRef struct {
|
||||
ID string `json:"id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Type string `json:"type,omitempty" example:"HEMS"`
|
||||
}
|
||||
|
||||
type FlightDataCoPilotRef struct {
|
||||
ID string `json:"id,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
FirstName string `json:"first_name,omitempty" example:"John"`
|
||||
LastName string `json:"last_name,omitempty" example:"Doe"`
|
||||
Email string `json:"email,omitempty" example:"john.doe@example.com"`
|
||||
}
|
||||
|
||||
type FlightDataLocationRef struct {
|
||||
Type string `json:"type,omitempty" example:"icao"`
|
||||
ID string `json:"id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Code string `json:"code,omitempty" example:"WIII"`
|
||||
Name string `json:"name,omitempty" example:"General Hospital"`
|
||||
Label string `json:"label,omitempty" example:"WIII"`
|
||||
}
|
||||
|
||||
type FlightDataResource struct {
|
||||
Type string `json:"type" example:"flight_data"`
|
||||
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Attributes FlightDataAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FlightDataResponse struct {
|
||||
Data FlightDataResource `json:"data"`
|
||||
}
|
||||
|
||||
type FlightDataListResponse struct {
|
||||
Data []FlightDataResource `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"`
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type FlightInspectionFileChecklistResource struct {
|
||||
Type string `json:"type" example:"flight_inspection_file_checklist"`
|
||||
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Attributes shareddto.FlightInspectionFileChecklistAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FlightInspectionFileChecklistResponse struct {
|
||||
Data FlightInspectionFileChecklistResource `json:"data"`
|
||||
}
|
||||
|
||||
type FlightInspectionFileChecklistListResponse struct {
|
||||
Data []FlightInspectionFileChecklistResource `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"`
|
||||
}
|
||||
91
internal/transport/http/dto/response/flight_response.go
Normal file
91
internal/transport/http/dto/response/flight_response.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package response
|
||||
|
||||
type FlightAttributes struct {
|
||||
Status string `json:"status" example:"draft"`
|
||||
MissionID string `json:"mission_id,omitempty" example:"019e9640-f7af-7940-80e8-1e9a83013afb"`
|
||||
Code string `json:"code" example:"M-062226-001"`
|
||||
Date string `json:"date" example:"2026-04-14"`
|
||||
TotalDraft int `json:"total_draft" example:"6"`
|
||||
Takeover *FlightTakeoverSummary `json:"takeover,omitempty"`
|
||||
Steps []FlightStepItem `json:"steps"`
|
||||
Draft []FlightDraftGroup `json:"draft,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-04-14T08:00:00Z"`
|
||||
CreatedBy *UserRef `json:"created_by,omitempty"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-04-14T08:00:00Z"`
|
||||
UpdatedBy *UserRef `json:"updated_by,omitempty"`
|
||||
DeletedAt string `json:"deleted_at,omitempty" example:"2026-04-14T08:00:00Z"`
|
||||
DeletedBy *UserRef `json:"deleted_by,omitempty"`
|
||||
}
|
||||
|
||||
type FlightStepItem struct {
|
||||
Phase string `json:"phase" example:"duty_roster"`
|
||||
Position string `json:"position,omitempty" example:"takeover"`
|
||||
Step int `json:"step,omitempty" example:"1"`
|
||||
Complete bool `json:"complete" example:"true"`
|
||||
ID string `json:"id,omitempty" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
|
||||
Status string `json:"status" example:"completed"`
|
||||
MissionType []FlightMissionTypeSummary `json:"mission_type,omitempty"`
|
||||
CompletedAt string `json:"completed_at" example:"2026-04-14T08:00:00Z"`
|
||||
CompletedBy string `json:"completed_by" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
}
|
||||
|
||||
type FlightHelicopterSummary struct {
|
||||
AOG bool `json:"aog" example:"false"`
|
||||
Designation string `json:"designation" example:"AIRBUS H145"`
|
||||
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Identifier string `json:"identifier" example:"D-HYAR"`
|
||||
IsActive bool `json:"is_active" example:"true"`
|
||||
Type string `json:"type" example:"H145"`
|
||||
}
|
||||
|
||||
type FlightTakeoverSummary struct {
|
||||
ID string `json:"id,omitempty" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
|
||||
Helicopter *FlightHelicopterSummary `json:"helicopter,omitempty"`
|
||||
DailyInspection *FlightDailyInspectionSummary `json:"daily_inspection,omitempty"`
|
||||
RosterDetail *TakeoverDutyRosterDetailsResponse `json:"roster_detail,omitempty"`
|
||||
}
|
||||
|
||||
type FlightDailyInspectionSummary struct {
|
||||
ID string `json:"id" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
|
||||
Name string `json:"name" example:"Ganahl Stefan"`
|
||||
ShortName string `json:"short_name" example:"GAN"`
|
||||
Date string `json:"date" example:"17.04.2026"`
|
||||
UTCTime string `json:"utc_time" example:"10:57"`
|
||||
}
|
||||
|
||||
type FlightDraftItem struct {
|
||||
ID string `json:"id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Type string `json:"type" example:"HEMS"`
|
||||
Status string `json:"status" example:"draft"`
|
||||
FlightDataID string `json:"flight_data_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a55"`
|
||||
}
|
||||
|
||||
type FlightDraftGroup struct {
|
||||
Type string `json:"type" example:"HEMS"`
|
||||
Items []FlightDraftItem `json:"items"`
|
||||
}
|
||||
|
||||
type FlightMissionTypeSummary struct {
|
||||
Type string `json:"type" example:"HEMS"`
|
||||
Draft int `json:"draft" example:"5"`
|
||||
Completed int `json:"completed" example:"0"`
|
||||
}
|
||||
|
||||
type FlightResource struct {
|
||||
Type string `json:"type" example:"flight"`
|
||||
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Attributes FlightAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type FlightResponse struct {
|
||||
Data FlightResource `json:"data"`
|
||||
}
|
||||
|
||||
type FlightListResponse struct {
|
||||
Data []FlightResource `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"`
|
||||
}
|
||||
170
internal/transport/http/dto/response/helicopter_file_response.go
Normal file
170
internal/transport/http/dto/response/helicopter_file_response.go
Normal file
@@ -0,0 +1,170 @@
|
||||
package response
|
||||
|
||||
import (
|
||||
shareddto "wucher/internal/transport/http/dto/shared"
|
||||
"wucher/internal/transport/http/jsonapi"
|
||||
)
|
||||
|
||||
type HelicopterFileResource struct {
|
||||
Type string `json:"type" example:"helicopter_file"`
|
||||
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Attributes shareddto.HelicopterFileAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterFileResponse struct {
|
||||
Data HelicopterFileResource `json:"data"`
|
||||
}
|
||||
|
||||
type HelicopterFileListResponse struct {
|
||||
Data []HelicopterFileResource `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 HelicopterFileCollectionHelicopter struct {
|
||||
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Name string `json:"name" example:"AIRBUS H145"`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionAttachment struct {
|
||||
ID string `json:"id" example:"019d6771-6c8e-7a2d-a7b8-03bcb65fcb3e"`
|
||||
FileName string `json:"file_name" example:"Before Flight Checklist.pdf"`
|
||||
DownloadURL string `json:"download_url" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/files/2026/04/05/policy.pdf?X-Amz-Signature=..."`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionItem struct {
|
||||
HelicopterFileID string `json:"helicopter_file_id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Section string `json:"section" example:"bfi"`
|
||||
Position int `json:"position" example:"1"`
|
||||
IsMandatory bool `json:"is_mandatory" example:"true"`
|
||||
IsTemplate bool `json:"is_template" example:"true"`
|
||||
AttachmentPending bool `json:"attachment_pending" example:"true"`
|
||||
Attachment HelicopterFileCollectionAttachment `json:"attachment"`
|
||||
CreatedAt string `json:"created_at" example:"2026-04-14T08:00:00Z"`
|
||||
CreatedBy string `json:"created_by" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
UpdatedAt string `json:"updated_at" example:"2026-04-14T08:00:00Z"`
|
||||
UpdatedBy string `json:"updated_by" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionSections struct {
|
||||
Before []HelicopterFileCollectionItem `json:"before"`
|
||||
Prepare []HelicopterFileCollectionItem `json:"prepare"`
|
||||
After []HelicopterFileCollectionItem `json:"after"`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionAttributes struct {
|
||||
Helicopter HelicopterFileCollectionHelicopter `json:"helicopter"`
|
||||
Files HelicopterFileCollectionSections `json:"files"`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionResponse struct {
|
||||
Type string `json:"type" example:"helicopter_file_collection"`
|
||||
Attributes HelicopterFileCollectionAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterFileCollectionListResponse struct {
|
||||
Data []HelicopterFileCollectionResponse `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 HelicopterFileDeleteAttributes struct {
|
||||
Deleted bool `json:"deleted" example:"true"`
|
||||
}
|
||||
|
||||
type HelicopterFileDeleteResource struct {
|
||||
Type string `json:"type" example:"helicopter_file_delete"`
|
||||
Attributes HelicopterFileDeleteAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterFileDeleteResponse struct {
|
||||
Data HelicopterFileDeleteResource `json:"data"`
|
||||
}
|
||||
|
||||
type HelicopterFileUploadIntentResource struct {
|
||||
Type string `json:"type" example:"helicopter_file_upload_intent"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes shareddto.FileManagerFileUploadIntentAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterFileUploadIntentResponse struct {
|
||||
Data HelicopterFileUploadIntentResource `json:"data"`
|
||||
}
|
||||
|
||||
type HelicopterFileBulkError struct {
|
||||
Status int `json:"status" example:"422"`
|
||||
Code string `json:"code,omitempty" example:"HELICOPTER_FILE_INVALID_PAYLOAD"`
|
||||
ErrorCode string `json:"error_code,omitempty" example:"4220318"`
|
||||
Title string `json:"title" example:"Validation error"`
|
||||
Detail string `json:"detail" example:"helicopter_id is invalid UUID"`
|
||||
}
|
||||
|
||||
type HelicopterFileUploadIntentBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *HelicopterFileUploadIntentResource `json:"resource,omitempty"`
|
||||
Error *HelicopterFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type HelicopterFileUploadIntentBulkResponse struct {
|
||||
Data []HelicopterFileUploadIntentBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type HelicopterFileCreateBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *jsonapi.Resource `json:"resource,omitempty"`
|
||||
Error *HelicopterFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type HelicopterFileCreateBulkResponse struct {
|
||||
Data []HelicopterFileCreateBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type HelicopterFileUpdateBulkItem struct {
|
||||
Index int `json:"index" example:"0"`
|
||||
Success bool `json:"success" example:"true"`
|
||||
Resource *jsonapi.Resource `json:"resource,omitempty"`
|
||||
Error *HelicopterFileBulkError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type HelicopterFileUpdateBulkResponse struct {
|
||||
Data []HelicopterFileUpdateBulkItem `json:"data"`
|
||||
Meta struct {
|
||||
Total int `json:"total" example:"3"`
|
||||
Success int `json:"success" example:"2"`
|
||||
Failed int `json:"failed" example:"1"`
|
||||
PartialSuccess bool `json:"partial_success" example:"true"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type HelicopterFileCreatedSSEPayload struct {
|
||||
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
HelicopterFileID string `json:"helicopter_file_id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
FileID string `json:"file_id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Section string `json:"section" example:"fpwb"`
|
||||
Position int `json:"position" example:"1"`
|
||||
IsMandatory bool `json:"is_mandatory" example:"true"`
|
||||
AttachmentPending bool `json:"attachment_pending" example:"true"`
|
||||
Name string `json:"name" example:"Before Flight Checklist.pdf"`
|
||||
MimeType string `json:"mime_type,omitempty" example:"application/pdf"`
|
||||
UpdatedAt string `json:"updated_at" example:"2026-07-01T06:00:00Z"`
|
||||
}
|
||||
88
internal/transport/http/dto/response/helicopter_response.go
Normal file
88
internal/transport/http/dto/response/helicopter_response.go
Normal file
@@ -0,0 +1,88 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
// JSON:API Helicopter response DTOs
|
||||
|
||||
type HelicopterAttributes struct {
|
||||
Designation string `json:"designation" example:"OE-XHZ"`
|
||||
Identifier string `json:"identifier" example:"ABC-0001"`
|
||||
Type string `json:"type" example:"EC-135"`
|
||||
SortKey *int `json:"sortkey" example:"10"`
|
||||
Engine1 string `json:"engine_1,omitempty" example:"TM"`
|
||||
Engine2 string `json:"engine_2,omitempty" example:"TM"`
|
||||
Consumption float64 `json:"consumption_lt_min" example:"4.1"`
|
||||
NR1 bool `json:"nr1" example:"true"`
|
||||
NR2 bool `json:"nr2" example:"true"`
|
||||
LH bool `json:"lh" example:"true"`
|
||||
RH bool `json:"rh" example:"true"`
|
||||
MGB bool `json:"mgb" example:"true"`
|
||||
IGB bool `json:"igb" example:"false"`
|
||||
TGB bool `json:"tgb" example:"true"`
|
||||
UTCOffset int `json:"utc_offset" example:"-1"`
|
||||
Foto *shareddto.HelicopterFoto `json:"foto,omitempty"`
|
||||
Dry bool `json:"dry" example:"false"`
|
||||
AOG bool `json:"aog" example:"false"`
|
||||
IsInUse bool `json:"is_in_use" example:"false"`
|
||||
// Status is the operational status of the helicopter (read-time derived).
|
||||
// Values: "available", "booked", "aog", "mcf". Precedence: mcf > aog > booked > available.
|
||||
// "booked" = active flight assignment; "aog" = air_on_ground flag OR an open complaint
|
||||
// grounding it (non-MEL, or MEL past its grace deadline); "mcf" = a pending maintenance
|
||||
// check flight (MCF created, not yet passed).
|
||||
Status string `json:"status" example:"available" enums:"available,booked,aog,mcf"`
|
||||
AOGReason string `json:"aog_reason,omitempty" example:"Main rotor gearbox fault"`
|
||||
Note string `json:"note,omitempty" example:"Primary HEMS helicopter"`
|
||||
IsActive bool `json:"is_active" example:"true"`
|
||||
CreatedBy *shareddto.HelicopterAuditUser `json:"created_by,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedBy *shareddto.HelicopterAuditUser `json:"updated_by,omitempty"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
LastDailyInspection *shareddto.HelicopterLastDailyInspection `json:"last_daily_inspection"`
|
||||
// MaintenanceSchedules mirrors the helicopter's latest fleet status. It
|
||||
// always lists every inspection type; entries without data are empty.
|
||||
MaintenanceSchedules []shareddto.MaintenanceScheduleAttributes `json:"maintenance_schedules"`
|
||||
}
|
||||
|
||||
type HelicopterResource struct {
|
||||
Type string `json:"type" example:"helicopter"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes HelicopterAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterResponse struct {
|
||||
Data HelicopterResource `json:"data"`
|
||||
}
|
||||
|
||||
type HelicopterListResponse struct {
|
||||
Data []HelicopterResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type HelicopterDataTableResponse struct {
|
||||
Data []HelicopterResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int64 `json:"records_total" example:"120"`
|
||||
RecordsFiltered int64 `json:"records_filtered" example:"12"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type HelicopterNextReportNumberAttributes struct {
|
||||
Identifier string `json:"identifier" example:"ABC"`
|
||||
Sequence int `json:"sequence" example:"1"`
|
||||
ReportNumber string `json:"report_number" example:"ABC-0001"`
|
||||
}
|
||||
|
||||
type HelicopterNextReportNumberResource struct {
|
||||
Type string `json:"type" example:"helicopter_report_number"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes HelicopterNextReportNumberAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type HelicopterNextReportNumberResponse struct {
|
||||
Data HelicopterNextReportNumberResource `json:"data"`
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package response
|
||||
|
||||
type MasterSettingsMicrosoftEntraAttributes struct {
|
||||
TenantID string `json:"MS_ENTRA_TENANT_ID" example:"your-tenant-id"`
|
||||
ClientID string `json:"MS_ENTRA_CLIENT_ID" example:"your-client-id"`
|
||||
ClientSecretMasked string `json:"MS_ENTRA_CLIENT_SECRET" example:"********"`
|
||||
RedirectURL string `json:"MS_ENTRA_REDIRECT_URL" example:"https://example.com/api/v1/auth/microsoft/callback"`
|
||||
Authority string `json:"MS_ENTRA_AUTHORITY" example:"https://login.microsoftonline.com/"`
|
||||
Scopes string `json:"MS_ENTRA_SCOPES" example:"openid,profile,email"`
|
||||
}
|
||||
|
||||
type MasterSettingsMicrosoftEntraResource struct {
|
||||
Type string `json:"type" example:"master_settings_microsoft_entra_sso"`
|
||||
Attributes MasterSettingsMicrosoftEntraAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type MasterSettingsMicrosoftEntraResponse struct {
|
||||
Data MasterSettingsMicrosoftEntraResource `json:"data"`
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package response
|
||||
|
||||
type MasterSettingsAttributes struct {
|
||||
CompanyName string `json:"company_name" example:"Wucher"`
|
||||
Title string `json:"title,omitempty" example:"Welcome to Wucher"`
|
||||
Subtitle string `json:"subtitle,omitempty" example:"Flight operations platform"`
|
||||
LogoFileUUID *string `json:"logo_file_uuid" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
LogoURL *string `json:"logo_url" example:"https://cdn.example.com/logo.png"`
|
||||
LogoThumbURL *string `json:"logo_thumbnail_url,omitempty" example:"https://cdn.example.com/logo.thumb.png"`
|
||||
LogoSizeBytes *int64 `json:"logo_original_size_bytes,omitempty" example:"1024000"`
|
||||
CoverFileUUID *string `json:"cover_file_uuid" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CoverURL *string `json:"cover_url" example:"https://cdn.example.com/cover.png"`
|
||||
CoverThumbURL *string `json:"cover_thumbnail_url,omitempty" example:"https://cdn.example.com/cover.thumb.png"`
|
||||
CoverSizeBytes *int64 `json:"cover_original_size_bytes,omitempty" example:"2048000"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedBy string `json:"updated_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
DeletedAt string `json:"deleted_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
DeletedBy string `json:"deleted_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
}
|
||||
|
||||
type MasterSettingsResource struct {
|
||||
Type string `json:"type" example:"master_settings"`
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes MasterSettingsAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type MasterSettingsResponse struct {
|
||||
Data MasterSettingsResource `json:"data"`
|
||||
}
|
||||
|
||||
type MasterSettingsListResponse struct {
|
||||
Data []MasterSettingsResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type MasterSettingsDataTableResponse struct {
|
||||
Data []MasterSettingsResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int64 `json:"records_total" example:"120"`
|
||||
RecordsFiltered int64 `json:"records_filtered" example:"12"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
40
internal/transport/http/dto/response/mcf_response.go
Normal file
40
internal/transport/http/dto/response/mcf_response.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package response
|
||||
|
||||
type MCFAttributes struct {
|
||||
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Date string `json:"date" example:"2026-06-17"`
|
||||
AFHours string `json:"af_hours,omitempty" example:"1245.3"`
|
||||
LandingCount int `json:"landing_count" example:"3"`
|
||||
UTCTime *string `json:"utc_time,omitempty" example:"2026-06-17T08:30:00Z"`
|
||||
DecidedBy string `json:"decided_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
DecidedAt *string `json:"decided_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
Result *string `json:"result,omitempty" example:"passed" enums:"passed,failed"`
|
||||
|
||||
Notes *string `json:"notes,omitempty" example:"Vibration within limits"`
|
||||
CompletedBy string `json:"completed_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
CompletedAt *string `json:"completed_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
|
||||
IsComplete bool `json:"is_complete" example:"false"`
|
||||
IsCleared bool `json:"is_cleared" example:"false"`
|
||||
IsPending bool `json:"is_pending" example:"true"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-06-16T03:04:05Z"`
|
||||
}
|
||||
|
||||
type MCFResource struct {
|
||||
Type string `json:"type" example:"mcf"`
|
||||
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Attributes MCFAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type MCFResponse struct {
|
||||
Data MCFResource `json:"data"`
|
||||
}
|
||||
|
||||
type MCFListResponse struct {
|
||||
Data []MCFResource `json:"data"`
|
||||
Meta struct {
|
||||
Total int64 `json:"total" example:"1"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
93
internal/transport/http/dto/response/mission_response.go
Normal file
93
internal/transport/http/dto/response/mission_response.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package response
|
||||
|
||||
type MissionAttributes struct {
|
||||
Flight *MissionFlightRef `json:"flight,omitempty"`
|
||||
Type string `json:"type" example:"HEMS"`
|
||||
MissionCode string `json:"mission_code" example:"HEMS-26-1"`
|
||||
Subtypes *MissionSubtypeRef `json:"subtypes,omitempty"`
|
||||
Note string `json:"note,omitempty" example:"Mission note"`
|
||||
StartTime string `json:"start_time,omitempty" example:"04:49"`
|
||||
EndTime string `json:"end_time,omitempty" example:"22:05"`
|
||||
Status string `json:"status" example:"completed"`
|
||||
Forms *MissionForms `json:"forms,omitempty"`
|
||||
Files []MissionFileItem `json:"files,omitempty"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-04-20T08:00:00Z"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-04-20T08:00:00Z"`
|
||||
UpdatedBy string `json:"updated_by,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
}
|
||||
|
||||
type MissionForms struct {
|
||||
FlightData []FlightDataResource `json:"flight_data,omitempty"`
|
||||
}
|
||||
|
||||
type MissionFileItem struct {
|
||||
ID string `json:"id" example:"019d6771-6c8e-7a2d-a7b8-03bcb65fcb3e"`
|
||||
AttachmentID string `json:"attachment_id,omitempty" example:"019d6771-6c8e-7a2d-a7b8-03bcb65fcb3e"`
|
||||
FileName string `json:"file_name,omitempty" example:"mission-brief.pdf"`
|
||||
DownloadURL string `json:"download_url,omitempty" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/files/2026/04/05/brief.pdf?X-Amz-Signature=..."`
|
||||
ThumbnailURL string `json:"thumbnail_url,omitempty" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/thumbnails/2026/04/05/brief.png?X-Amz-Signature=..."`
|
||||
}
|
||||
|
||||
type MissionFlightRef struct {
|
||||
ID string `json:"id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Code string `json:"code,omitempty" example:"M-062226-001"`
|
||||
Date string `json:"date,omitempty" example:"2026-04-20"`
|
||||
}
|
||||
|
||||
type MissionSubtypeRef struct {
|
||||
ID string `json:"id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a99"`
|
||||
Subtype string `json:"subtype,omitempty" example:"PRIM"`
|
||||
SubtypeName string `json:"subtype_name,omitempty" example:"Nicht transportfaehig"`
|
||||
}
|
||||
|
||||
type MissionResource struct {
|
||||
Type string `json:"type" example:"mission"`
|
||||
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
|
||||
Attributes MissionAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type MissionResponse struct {
|
||||
Data MissionResource `json:"data"`
|
||||
}
|
||||
|
||||
type MissionListResponse struct {
|
||||
Data []MissionResource `json:"data"`
|
||||
Meta struct {
|
||||
PageNumber int `json:"page_number" example:"1"`
|
||||
PageSize int `json:"page_size" example:"20"`
|
||||
Total int64 `json:"total" example:"120"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type MissionDataTableResponse struct {
|
||||
Data []MissionResource `json:"data"`
|
||||
Meta struct {
|
||||
Draw int `json:"draw" example:"1"`
|
||||
RecordsTotal int64 `json:"records_total" example:"120"`
|
||||
RecordsFiltered int64 `json:"records_filtered" example:"42"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type MissionTypeSubtypeItem struct {
|
||||
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a99"`
|
||||
Code string `json:"code" example:"PRIM"`
|
||||
Name string `json:"name" example:"Primary"`
|
||||
TaskName string `json:"task_name" example:"Nicht transportfaehig"`
|
||||
}
|
||||
|
||||
type MissionTypeAttributes struct {
|
||||
Code string `json:"code" example:"HEMS"`
|
||||
Name string `json:"name" example:"HEMS"`
|
||||
Subtypes []MissionTypeSubtypeItem `json:"subtypes,omitempty"`
|
||||
}
|
||||
|
||||
type MissionTypeResource struct {
|
||||
Type string `json:"type" example:"mission_type"`
|
||||
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a77"`
|
||||
Attributes MissionTypeAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type MissionTypeListResponse struct {
|
||||
Data []MissionTypeResource `json:"data"`
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package response
|
||||
|
||||
type OtherPersonAttributes struct {
|
||||
Name string `json:"name" example:"Guest Person"`
|
||||
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
|
||||
Email string `json:"email,omitempty" example:"guest@example.com"`
|
||||
}
|
||||
|
||||
type OtherPersonResource struct {
|
||||
Type string `json:"type" example:"other_person"`
|
||||
ID string `json:"id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
|
||||
Attributes OtherPersonAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type OtherPersonListResponse struct {
|
||||
Data []OtherPersonResource `json:"data"`
|
||||
Meta struct {
|
||||
Total int64 `json:"total" example:"1"`
|
||||
} `json:"meta"`
|
||||
}
|
||||
|
||||
type OtherPersonResponse struct {
|
||||
Data OtherPersonResource `json:"data"`
|
||||
}
|
||||
98
internal/transport/http/dto/response/reserve_ac_response.go
Normal file
98
internal/transport/http/dto/response/reserve_ac_response.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package response
|
||||
|
||||
import shareddto "wucher/internal/transport/http/dto/shared"
|
||||
|
||||
type ReserveAcResource struct {
|
||||
Type string `json:"type" example:"reserve_ac"`
|
||||
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
|
||||
Attributes shareddto.ReserveAcAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type ReserveAcResponse struct {
|
||||
Data ReserveAcResource `json:"data"`
|
||||
}
|
||||
|
||||
type ReserveAcListResponse struct {
|
||||
Data []ReserveAcResource `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 ReserveAcHelicopterGroupResource struct {
|
||||
Type string `json:"type"`
|
||||
Attributes ReserveAcHelicopterGroupAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type ReserveAcHelicopterGroupAttributes struct {
|
||||
Helicopter ReserveAcHelicopterIdentity `json:"helicopter"`
|
||||
LastDailyInspection ReserveAcLastDailyInspectionDTO `json:"last_daily_inspection"`
|
||||
BFI ReserveAcBFISection `json:"bfi"`
|
||||
FPWB ReserveAcFPWBSection `json:"fpwb"`
|
||||
}
|
||||
|
||||
type ReserveAcHelicopterIdentity struct {
|
||||
ID string `json:"id"`
|
||||
Designation string `json:"designation"`
|
||||
Identifier string `json:"identifier"`
|
||||
Type string `json:"type"`
|
||||
Status string `json:"status"`
|
||||
BookingDetails *ReserveAcBookingDetailsDTO `json:"booking_details,omitempty"`
|
||||
}
|
||||
|
||||
type ReserveAcLastDailyInspectionDTO struct {
|
||||
ID any `json:"id"`
|
||||
InspectionBy ReserveAcInspectionBySummary `json:"inspection_by"`
|
||||
InspectionAt any `json:"inspection_at"`
|
||||
}
|
||||
|
||||
type ReserveAcInspectionBySummary struct {
|
||||
ID any `json:"id"`
|
||||
Name string `json:"name"`
|
||||
ShortName string `json:"short_name"`
|
||||
}
|
||||
|
||||
type ReserveAcBookingDetailsDTO struct {
|
||||
ReserveAcID any `json:"reserve_ac_id,omitempty"`
|
||||
FlightID any `json:"flight_id,omitempty"`
|
||||
MissionCode any `json:"mission_code,omitempty"`
|
||||
DutyDate any `json:"duty_date,omitempty"`
|
||||
BookedAt any `json:"booked_at,omitempty"`
|
||||
BookedBy map[string]any `json:"booked_by,omitempty"`
|
||||
}
|
||||
|
||||
type ReserveAcHelicopterFileItem struct {
|
||||
ID string `json:"id"`
|
||||
FileName string `json:"file_name"`
|
||||
URL string `json:"url"`
|
||||
UploadedAt string `json:"uploaded_at"`
|
||||
UploadedBy string `json:"uploaded_by"`
|
||||
}
|
||||
|
||||
type ReserveAcHelicopterFileSection struct {
|
||||
Files []ReserveAcHelicopterFileItem `json:"files"`
|
||||
}
|
||||
|
||||
type ReserveAcBFISection struct {
|
||||
FuelAddedAmount *float64 `json:"fuel_added_amount,omitempty"`
|
||||
FuelAmount *float64 `json:"fuel_amount,omitempty"`
|
||||
FuelUnit string `json:"fuel_unit,omitempty"`
|
||||
HydraulicLHChecked *bool `json:"hydraulic_lh_checked,omitempty"`
|
||||
HydraulicRHChecked *bool `json:"hydraulic_rh_checked,omitempty"`
|
||||
Note *string `json:"note,omitempty"`
|
||||
OilEngineNR1Checked *bool `json:"oil_engine_nr1_checked,omitempty"`
|
||||
OilEngineNR2Checked *bool `json:"oil_engine_nr2_checked,omitempty"`
|
||||
OilTransmissionIGBChecked *bool `json:"oil_transmission_igb_checked,omitempty"`
|
||||
OilTransmissionMGBChecked *bool `json:"oil_transmission_mgb_checked,omitempty"`
|
||||
OilTransmissionTGBChecked *bool `json:"oil_transmission_tgb_checked,omitempty"`
|
||||
Files []ReserveAcHelicopterFileItem `json:"files"`
|
||||
}
|
||||
|
||||
type ReserveAcFPWBSection struct {
|
||||
NotamBriefing *bool `json:"notam_briefing,omitempty"`
|
||||
WeatherBriefing *bool `json:"weather_briefing,omitempty"`
|
||||
OperationalFlightPlan *bool `json:"operational_flight_plan,omitempty"`
|
||||
Files []ReserveAcHelicopterFileItem `json:"files"`
|
||||
}
|
||||
112
internal/transport/http/dto/response/takeover_response.go
Normal file
112
internal/transport/http/dto/response/takeover_response.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package response
|
||||
|
||||
import (
|
||||
shareddto "wucher/internal/transport/http/dto/shared"
|
||||
)
|
||||
|
||||
type TakeoverResponseAttributes struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
FlightID string `json:"flight_id,omitempty"`
|
||||
ReserveAcID string `json:"reserve_ac_id,omitempty"`
|
||||
FlightInspectionID string `json:"flight_inspection_id,omitempty"`
|
||||
ShiftStart string `json:"shift_start,omitempty"`
|
||||
ShiftEnd string `json:"shift_end,omitempty"`
|
||||
BaseID string `json:"base_id,omitempty"`
|
||||
Base *DutyRosterBaseInfo `json:"base,omitempty"`
|
||||
DutyDate string `json:"duty_date,omitempty"`
|
||||
HelicopterID string `json:"helicopter_id,omitempty"`
|
||||
Helicopter *TakeoverHelicopter `json:"helicopter,omitempty"`
|
||||
Notes *string `json:"notes,omitempty"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
UpdatedBy string `json:"updated_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
RosterDetail TakeoverDutyRosterDetailsResponse `json:"roster_detail"`
|
||||
Inspection shareddto.ReserveAcInspectionSummary `json:"inspection"`
|
||||
Files []TakeoverFileResource `json:"files,omitempty"`
|
||||
}
|
||||
|
||||
// TakeoverHelicopter is the selected helicopter shown on a takeover, enriched
|
||||
// with its last daily inspection and its maintenance schedule (the "next due"
|
||||
// per inspection type) from the helicopter's latest fleet status.
|
||||
type TakeoverHelicopter struct {
|
||||
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Designation string `json:"designation" example:"OE-XHZ"`
|
||||
Identifier string `json:"identifier" example:"1234"`
|
||||
Type string `json:"type" example:"EC-135"`
|
||||
LastDailyInspection *shareddto.HelicopterLastDailyInspection `json:"last_daily_inspection"`
|
||||
MaintenanceSchedules []shareddto.MaintenanceScheduleAttributes `json:"maintenance_schedules"`
|
||||
}
|
||||
|
||||
type TakeoverDutyRosterAttributes struct {
|
||||
Bases DutyRosterBaseInfo `json:"bases"`
|
||||
FlightID string `json:"flight_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Helicopter DutyRosterHelicopterSummary `json:"helicopter"`
|
||||
DutyDate string `json:"duty_date,omitempty" example:"2026-03-16"`
|
||||
Detail TakeoverDutyRosterDetailsResponse `json:"roster_detail"`
|
||||
CreatedBy string `json:"created_by,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
CreatedAt string `json:"created_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
UpdatedAt string `json:"updated_at,omitempty" example:"2026-03-12T03:04:05Z"`
|
||||
}
|
||||
|
||||
type TakeoverDutyRosterResource struct {
|
||||
Type string `json:"type" example:"duty_roster"`
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Attributes TakeoverDutyRosterAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type TakeoverDutyRosterCrew struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Hunter Wolfgang"`
|
||||
Role string `json:"role,omitempty" example:"doctor"`
|
||||
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
|
||||
Email string `json:"email,omitempty" example:"doctor@example.com"`
|
||||
}
|
||||
|
||||
type TakeoverDutyRosterPilotCrew struct {
|
||||
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
|
||||
Name string `json:"name,omitempty" example:"Hunter Wolfgang"`
|
||||
Role string `json:"role,omitempty" example:"pilot"`
|
||||
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
|
||||
Email string `json:"email,omitempty" example:"pilot@example.com"`
|
||||
CrewType string `json:"crew_type,omitempty" example:"main"`
|
||||
FlightInstructor *bool `json:"flight_instructor,omitempty"`
|
||||
LineChecker *bool `json:"line_checker,omitempty"`
|
||||
Supervisor *bool `json:"supervisor,omitempty"`
|
||||
Examiner *bool `json:"examiner,omitempty"`
|
||||
CoPilot *bool `json:"co_pilot,omitempty"`
|
||||
}
|
||||
|
||||
type TakeoverDutyRosterDetailsResponse struct {
|
||||
Pilot []TakeoverDutyRosterPilotCrew `json:"pilot"`
|
||||
Doctor []TakeoverDutyRosterCrew `json:"doctor"`
|
||||
Rescuer []TakeoverDutyRosterCrew `json:"rescuer"`
|
||||
Helper []TakeoverDutyRosterCrew `json:"helper"`
|
||||
OtherPerson []TakeoverDutyRosterCrew `json:"other_person"`
|
||||
}
|
||||
|
||||
type TakeoverResource struct {
|
||||
Type string `json:"type" example:"takeover"`
|
||||
Attributes TakeoverResponseAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type TakeoverFileAttributes struct {
|
||||
FileAttachmentID string `json:"file_attachment_id" example:"019d7000-aaaa-7bbb-8ccc-222222222222"`
|
||||
FileName string `json:"file_name,omitempty" example:"takeover-report.pdf"`
|
||||
DownloadURL string `json:"download_url,omitempty" example:"https://s3.localhost.localstack.cloud:4566/wucher-file-dev/files/2026/04/05/takeover-report.pdf?X-Amz-Signature=..."`
|
||||
}
|
||||
|
||||
type TakeoverFileResource struct {
|
||||
Type string `json:"type" example:"takeover_file"`
|
||||
ID string `json:"id,omitempty" example:"019d7000-aaaa-7bbb-8ccc-111111111111"`
|
||||
Attributes TakeoverFileAttributes `json:"attributes"`
|
||||
}
|
||||
|
||||
type TakeoverResponse struct {
|
||||
Data TakeoverResource `json:"data"`
|
||||
}
|
||||
|
||||
type TakeoverListResponse struct {
|
||||
Data []TakeoverResource `json:"data"`
|
||||
Meta map[string]any `json:"meta,omitempty"`
|
||||
}
|
||||
8
internal/transport/http/dto/response/user_ref.go
Normal file
8
internal/transport/http/dto/response/user_ref.go
Normal file
@@ -0,0 +1,8 @@
|
||||
package response
|
||||
|
||||
// UserRef is an audit user reference exposing both the raw UUID and a resolved
|
||||
// display name, e.g. for created_by / updated_by fields.
|
||||
type UserRef struct {
|
||||
UUID string `json:"uuid" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
|
||||
Name string `json:"name,omitempty" example:"Ganahl Stefan"`
|
||||
}
|
||||
Reference in New Issue
Block a user