init push

This commit is contained in:
2026-07-16 22:16:45 +07:00
commit 8b068bdb10
1021 changed files with 332816 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package request
// ActionSignoffSignAttributes — optional fields for the sign-off.
// - ComplaintID: when set, the sign-off marks that complaint's corrective action as
// signed off (the complaint must already have action_taken recorded, else 422).
// - When ComplaintID is omitted it is a complaint-independent (fleet) sign-off, which
// still allows an EASA release.
type ActionSignoffSignAttributes struct {
// Sign toggles the sign-off: true (or omitted) signs it, false unsigns (clears the
// signature). Combine with complaint_id to toggle a specific complaint's sign-off.
Sign *bool `json:"sign,omitempty" example:"true"`
ComplaintID *string `json:"complaint_id,omitempty" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
// FlightID — REQUIRED for the fleet (complaint-independent) sign-off; scopes it to a
// flight so it no longer leaks across takeovers of the same aircraft. Ignored when
// complaint_id is set (that sign-off is keyed by the complaint).
FlightID *string `json:"flight_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
}
type ActionSignoffSignData struct {
Type string `json:"type,omitempty" example:"action_signoff"`
Attributes ActionSignoffSignAttributes `json:"attributes"`
}
// ActionSignoffSignRequest — body is OPTIONAL for the sign endpoint.
type ActionSignoffSignRequest struct {
Data ActionSignoffSignData `json:"data"`
}

View File

@@ -0,0 +1,87 @@
package request
import shareddto "wucher/internal/transport/http/dto/shared"
type AirRescuerChecklistCreateEntry struct {
ScopeCode string `json:"scope_code" validate:"required" example:"MO"`
Title string `json:"title" validate:"required" example:"Monday Checklist"`
Position *int `json:"position,omitempty" example:"1"`
Items []shareddto.AirRescuerChecklistItemInput `json:"items,omitempty" validate:"omitempty,dive"`
}
type AirRescuerChecklistCreateAttributes struct {
BaseID string `json:"base_id" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Checklists []AirRescuerChecklistCreateEntry `json:"checklists" validate:"required,min=1,dive"`
}
type AirRescuerChecklistCreateData struct {
Type string `json:"type" validate:"required,oneof=air_rescuer_checklist_create"`
Attributes AirRescuerChecklistCreateAttributes `json:"attributes" validate:"required"`
}
type AirRescuerChecklistCreateRequest struct {
Data AirRescuerChecklistCreateData `json:"data" validate:"required"`
}
type AirRescuerChecklistUpdateAttributes struct {
ScopeCode *string `json:"scope_code,omitempty" example:"MO"`
Title *string `json:"title,omitempty" example:"Monday Checklist Updated"`
Position *int `json:"position,omitempty" example:"1"`
NewItems []shareddto.AirRescuerChecklistItemInput `json:"new_items,omitempty" validate:"omitempty,dive"`
}
type AirRescuerChecklistUpdateData struct {
Type string `json:"type" validate:"required,oneof=air_rescuer_checklist_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes AirRescuerChecklistUpdateAttributes `json:"attributes" validate:"required"`
}
type AirRescuerChecklistUpdateRequest struct {
Data AirRescuerChecklistUpdateData `json:"data" validate:"required"`
}
type AirRescuerChecklistItemCreateAttributes struct {
Items []shareddto.AirRescuerChecklistItemInput `json:"items" validate:"required,min=1,dive"`
}
type AirRescuerChecklistItemCreateData struct {
Type string `json:"type" validate:"required,oneof=air_rescuer_checklist_item_create"`
Attributes AirRescuerChecklistItemCreateAttributes `json:"attributes" validate:"required"`
}
type AirRescuerChecklistItemCreateRequest struct {
Data AirRescuerChecklistItemCreateData `json:"data" validate:"required"`
}
type AirRescuerChecklistItemUpdateAttributes struct {
Name *string `json:"name,omitempty" example:"Check radio"`
Position *int `json:"position,omitempty" example:"2"`
}
type AirRescuerChecklistItemUpdateData struct {
Type string `json:"type" validate:"required,oneof=air_rescuer_checklist_item_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes AirRescuerChecklistItemUpdateAttributes `json:"attributes" validate:"required"`
}
type AirRescuerChecklistItemUpdateRequest struct {
Data AirRescuerChecklistItemUpdateData `json:"data" validate:"required"`
}
type AirRescuerChecklistItemReorderEntry struct {
ItemUUID string `json:"item_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Position *int `json:"position" validate:"required" example:"2"`
}
type AirRescuerChecklistItemReorderAttributes struct {
Items []AirRescuerChecklistItemReorderEntry `json:"items" validate:"required,min=1,dive"`
}
type AirRescuerChecklistItemReorderData struct {
Type string `json:"type" validate:"required,oneof=air_rescuer_checklist_item_reorder"`
Attributes AirRescuerChecklistItemReorderAttributes `json:"attributes" validate:"required"`
}
type AirRescuerChecklistItemReorderRequest struct {
Data AirRescuerChecklistItemReorderData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,82 @@
package request
type ComplaintCreateAttributes struct {
// HelicopterID — the helicopter this complaint is filed against. REQUIRED.
HelicopterID string `json:"helicopter_id" validate:"required,uuid" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
// FlightID — the flight/report this complaint was filed in (attribution). OPTIONAL;
// open-defect tracking stays per-helicopter so defects carry forward across flights.
FlightID string `json:"flight_id,omitempty" validate:"omitempty,uuid" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
// Description — the defect description. REQUIRED.
Description string `json:"description" validate:"required" example:"Engine 2 N2 vibration intermittent during cruise above 110 KIAS"`
// MELSeverity — MEL (Minimum Equipment List) classification. OPTIONAL at creation:
// omit it to file the complaint as "pending_mel" and classify later. It MUST be
// classified (via update) before recording action taken. A pending complaint does
// NOT ground the aircraft — grounding starts at classification. Values: 0 = NON-MEL
// (grounds immediately), 1 = A (grace 1 day), 2 = B (3 days), 3 = C (10 days), 4 = D (120 days).
MELSeverity *int8 `json:"mel_severity,omitempty" validate:"omitempty,oneof=0 1 2 3 4" enums:"0,1,2,3,4" example:"2"`
// AircraftHoursAtReport — OPTIONAL airframe hours recorded when the defect was reported.
AircraftHoursAtReport *string `json:"aircraft_hours_at_report,omitempty" example:"1245.3"`
// NSR is no longer set here — it is its own flow: POST /complaints/nsr/sign/{id}.
}
type ComplaintCreateData struct {
Type string `json:"type" validate:"required,oneof=complaint_create complaint" example:"complaint_create"`
Attributes ComplaintCreateAttributes `json:"attributes" validate:"required"`
}
type ComplaintCreateRequest struct {
Data ComplaintCreateData `json:"data" validate:"required"`
}
type ComplaintUpdateAttributes struct {
// Description — defect description.
Description *string `json:"description,omitempty" example:"Engine 2 vibration confirmed"`
// MELSeverity — MEL classification. 0 = NON-MEL (immediate AOG), 1 = A (1 day),
// 2 = B (3 days), 3 = C (10 days), 4 = D (120 days). AOG after grace passes.
MELSeverity *int8 `json:"mel_severity,omitempty" validate:"omitempty,oneof=0 1 2 3 4" enums:"0,1,2,3,4" example:"2"`
// AircraftHoursAtReport — airframe hours at report time.
AircraftHoursAtReport *string `json:"aircraft_hours_at_report,omitempty" example:"1245.3"`
// NSR is no longer set here — it is its own flow: POST /complaints/nsr/sign/{id}.
}
// ComplaintNSRSignAttributes carries the (optional) justification for a Non-Safety
// Release decision. NSR is signed via its own endpoint, separate from complaint update.
type ComplaintNSRSignAttributes struct {
// NSRReason — OPTIONAL free-text justification for the NSR (MEL deferral) decision.
NSRReason *string `json:"nsr_reason,omitempty" example:"Released under MEL A, defect deferred"`
}
type ComplaintNSRSignData struct {
Type string `json:"type" validate:"omitempty,oneof=complaint_nsr_sign complaint_nsr" example:"complaint_nsr_sign"`
Attributes ComplaintNSRSignAttributes `json:"attributes"`
}
type ComplaintNSRSignRequest struct {
Data ComplaintNSRSignData `json:"data"`
}
type ComplaintUpdateData struct {
Type string `json:"type" validate:"required,oneof=complaint_update complaint" example:"complaint_update"`
ID string `json:"id" validate:"required" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
Attributes ComplaintUpdateAttributes `json:"attributes" validate:"required"`
}
type ComplaintUpdateRequest struct {
Data ComplaintUpdateData `json:"data" validate:"required"`
}
type ComplaintActionTakenAttributes struct {
// ActionTaken — corrective action text. Required when recording (create); on update an
// empty value clears it (allowed only while the action has not been signed off).
ActionTaken string `json:"action_taken" example:"Tightened engine mount and rechecked torque"`
AircraftHoursAtFix *string `json:"aircraft_hours_at_fix,omitempty" example:"1250.1"`
}
type ComplaintActionTakenData struct {
Type string `json:"type" validate:"required,oneof=complaint_action_taken complaint" example:"complaint_action_taken"`
Attributes ComplaintActionTakenAttributes `json:"attributes" validate:"required"`
}
type ComplaintActionTakenRequest struct {
Data ComplaintActionTakenData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,143 @@
package request
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 DutyRosterCrewInput struct {
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
ShiftDate *DutyRosterShiftDate `json:"shift_date,omitempty"`
}
type DutyRosterPilotCrewInput struct {
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
ShiftDate *DutyRosterShiftDate `json:"shift_date,omitempty"`
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"`
CrewType string `json:"crew_type,omitempty" example:"main" enums:"main,additional"`
}
type DutyRosterOtherPersonInput struct {
// OtherPersonID — OPTIONAL master person id to reuse (from GET /contact/other).
// When set, name/mobile_phone/email are snapshotted from the master (may be omitted).
OtherPersonID string `json:"other_person_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
Name string `json:"name,omitempty" example:"Guest Person"`
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
Email string `json:"email,omitempty" example:"guest@example.com"`
}
type DutyRosterDetailsInput struct {
Pilot []DutyRosterPilotCrewInput `json:"pilot"`
Doctor []DutyRosterCrewInput `json:"doctor"`
Rescuer []DutyRosterCrewInput `json:"rescuer"`
Helper []DutyRosterCrewInput `json:"helper"`
OtherPerson []DutyRosterOtherPersonInput `json:"other_person"`
}
type DutyRosterCreateAttributes struct {
BaseID string `json:"base_id" validate:"required"`
DutyDate string `json:"duty_date" validate:"required"`
ShiftTime DutyRosterShiftTime `json:"shift_time"`
Detail DutyRosterDetailsInput `json:"roster_detail"`
}
type DutyRosterCreateData struct {
Type string `json:"type" validate:"required,oneof=duty_roster_create duty_roster"`
Attributes DutyRosterCreateAttributes `json:"attributes" validate:"required"`
}
type DutyRosterCreateRequest struct {
Data DutyRosterCreateData `json:"data" validate:"required"`
}
type DutyRosterUpdateAttributes struct {
BaseID *string `json:"base_id,omitempty"`
DutyDate *string `json:"duty_date,omitempty"`
ShiftTime *DutyRosterShiftTime `json:"shift_time,omitempty"`
Detail *DutyRosterDetailsInput `json:"roster_detail,omitempty"`
}
type DutyRosterUpdateData struct {
Type string `json:"type" validate:"required,oneof=duty_roster_update duty_roster"`
ID string `json:"id"`
Attributes DutyRosterUpdateAttributes `json:"attributes" validate:"required"`
}
type DutyRosterUpdateRequest struct {
Data DutyRosterUpdateData `json:"data" validate:"required"`
}
type DutyRosterDeleteCrewAttributes struct {
Detail DutyRosterDetailsInput `json:"roster_detail"`
}
type DutyRosterDeleteCrewData struct {
Type string `json:"type" validate:"required,oneof=duty_roster_crew_delete duty_roster_update duty_roster"`
Attributes DutyRosterDeleteCrewAttributes `json:"attributes" validate:"required"`
}
type DutyRosterDeleteCrewRequest struct {
Data DutyRosterDeleteCrewData `json:"data" validate:"required"`
}
type DutyRosterDeleteCrewByIDAttributes struct {
RosterID string `json:"roster_id" validate:"required"`
CrewID string `json:"crew_id" validate:"required"`
}
type DutyRosterDeleteCrewByIDData struct {
Type string `json:"type" validate:"required,oneof=duty_roster_crew_delete duty_roster_update duty_roster"`
Attributes DutyRosterDeleteCrewByIDAttributes `json:"attributes" validate:"required"`
}
type DutyRosterDeleteCrewByIDRequest struct {
Data DutyRosterDeleteCrewByIDData `json:"data" validate:"required"`
}
type DutyRosterAnyDeleteData struct {
ID string `json:"id" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type DutyRosterAnyDeleteRequest struct {
Data DutyRosterAnyDeleteData `json:"data" validate:"required"`
}
// DutyRosterAnyCreateRequestDoc is documentation-only schema for cleaner Swagger examples.
type DutyRosterAnyCreateRequestDoc struct {
Data DutyRosterAnyCreateDataDoc `json:"data"`
}
type DutyRosterAnyCreateDataDoc struct {
Type string `json:"type" example:"duty_roster_create" enums:"duty_roster_create,duty_roster"`
Attributes DutyRosterAnyCreateAttributesDoc `json:"attributes"`
}
type DutyRosterAnyCreateAttributesDoc struct {
BaseID string `json:"base_id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
DutyDate string `json:"duty_date" example:"2026-03-16"`
ShiftTime DutyRosterShiftTime `json:"shift_time"`
Detail DutyRosterAnyCreateDetailDoc `json:"roster_detail"`
}
type DutyRosterAnyCreateDetailDoc struct {
Pilot []DutyRosterPilotAdditionalExampleDoc `json:"pilot"`
Doctor []DutyRosterCrewInput `json:"doctor"`
Rescuer []DutyRosterCrewInput `json:"rescuer"`
Helper []DutyRosterCrewInput `json:"helper"`
OtherPerson []DutyRosterOtherPersonInput `json:"other_person"`
}
type DutyRosterPilotAdditionalExampleDoc struct {
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
CrewType string `json:"crew_type" example:"additional" enums:"main,additional"`
FlightInstructor bool `json:"flight_instructor" example:"true"`
}

View File

@@ -0,0 +1,53 @@
package request
type EASAReleaseCreateAttributes struct {
HelicopterID string `json:"helicopter_id" validate:"required,uuid" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
// ComplaintID — OPTIONAL complaint (UUIDv7) this release closes. Set it to scope the
// release to a specific defect; leave empty for a standalone (aircraft-clear) release.
ComplaintID string `json:"complaint_id,omitempty" validate:"omitempty,uuid" example:"019d6774-1111-7fba-9ef4-3795c0da8a13"`
// FlightID — OPTIONAL flight context. Used for the standalone (no-complaint) sign-off gate.
FlightID string `json:"flight_id,omitempty" validate:"omitempty,uuid" 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 — OPTIONAL contact id (UUIDv7) of the signer/technician. Required only to sign.
EASASignerID *string `json:"easa_signer_id,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
EASAPermitNo *string `json:"easa_permit_no,omitempty" example:"145.A.50"`
// Sign, when true, signs the release immediately at creation. Requires all
// required fields to be present; otherwise the request is rejected.
Sign bool `json:"sign,omitempty" example:"false"`
}
type EASAReleaseCreateData struct {
Type string `json:"type" validate:"required,oneof=easa_release_create easa_release" example:"easa_release_create"`
Attributes EASAReleaseCreateAttributes `json:"attributes" validate:"required"`
}
type EASAReleaseCreateRequest struct {
Data EASAReleaseCreateData `json:"data" validate:"required"`
}
type EASAReleaseUpdateAttributes struct {
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 — OPTIONAL contact id (UUIDv7) of the signer/technician. Required only to sign.
EASASignerID *string `json:"easa_signer_id,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
EASAPermitNo *string `json:"easa_permit_no,omitempty" example:"145.A.50"`
}
type EASAReleaseUpdateData struct {
Type string `json:"type" validate:"required,oneof=easa_release_update easa_release" example:"easa_release_update"`
ID string `json:"id" validate:"required" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
Attributes EASAReleaseUpdateAttributes `json:"attributes" validate:"required"`
}
type EASAReleaseUpdateRequest struct {
Data EASAReleaseUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,19 @@
package request
type FileManagerAttachmentCreateAttributes struct {
FileID string `json:"file_id" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
RefType string `json:"ref_type" validate:"required" example:"helicopter"`
RefID string `json:"ref_id" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Category *string `json:"category,omitempty" example:"document"`
SortOrder *int `json:"sort_order,omitempty" example:"0"`
IsPrimary *bool `json:"is_primary,omitempty" example:"false"`
}
type FileManagerAttachmentCreateData struct {
Type string `json:"type" validate:"required,oneof=file_manager_attachment_create file_manager_attachment" example:"file_manager_attachment_create"`
Attributes FileManagerAttachmentCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerAttachmentCreateRequest struct {
Data FileManagerAttachmentCreateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,197 @@
package request
type FileManagerFileCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
FolderID *string `json:"folder_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"policy-final.pdf"`
}
type FileManagerFileUploadIntentAttributes struct {
Name string `json:"name" validate:"required" example:"policy-final.pdf"`
ContentType string `json:"content_type" validate:"required" example:"application/pdf"`
SizeBytes int64 `json:"size_bytes" validate:"required,gte=0" example:"1024"`
}
type FileManagerFileUploadIntentData struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_upload_intent" example:"file_manager_file_upload_intent"`
Attributes FileManagerFileUploadIntentAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileUploadIntentRequest struct {
Data FileManagerFileUploadIntentData `json:"data" validate:"required"`
}
type FileManagerFileUploadIntentBulkRequest struct {
Data []FileManagerFileUploadIntentData `json:"data" validate:"required,min=1"`
}
type FileManagerFileCancelUploadAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerFileCancelUploadData struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_cancel_upload" example:"file_manager_file_cancel_upload"`
Attributes FileManagerFileCancelUploadAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileCancelUploadBulkRequest struct {
Data []FileManagerFileCancelUploadData `json:"data" validate:"required,min=1"`
}
type FileManagerFileUploadCompleteAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerFileUploadCompleteData struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_upload_complete" example:"file_manager_file_upload_complete"`
Attributes FileManagerFileUploadCompleteAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileUploadCompleteRequest struct {
Data FileManagerFileUploadCompleteData `json:"data" validate:"required"`
}
type FileManagerFileCreateData struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileCreateRequest struct {
Data FileManagerFileCreateData `json:"data" validate:"required"`
}
// FileManagerFileCreateFlexibleRequest is used for swagger documentation.
// Runtime accepts:
// - single: {"data": { ...FileManagerFileCreateData }}
// - bulk: {"data": [ ...FileManagerFileBulkCreateItem ]}
type FileManagerFileCreateFlexibleRequest struct {
Data interface{} `json:"data"`
}
type FileManagerFileBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileBulkCreateRequest struct {
Data []FileManagerFileBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileUserCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
UserUUID string `json:"user_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"profile.jpg"`
}
type FileManagerFileUserBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileUserCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileUserBulkCreateRequest struct {
Data []FileManagerFileUserBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileAircraftCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
AircraftUUID string `json:"aircraft_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"aircraft.jpg"`
}
type FileManagerFileAircraftBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileAircraftCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileAircraftBulkCreateRequest struct {
Data []FileManagerFileAircraftBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileBaseCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
BaseUUID string `json:"base_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"base.jpg"`
}
type FileManagerFileBaseBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileBaseCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileBaseBulkCreateRequest struct {
Data []FileManagerFileBaseBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileDULCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
DULUUID string `json:"dul_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"dul.jpg"`
}
type FileManagerFileDULBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileDULCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileDULBulkCreateRequest struct {
Data []FileManagerFileDULBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileTakeoverCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
TakeoverUUID string `json:"takeover_uuid,omitempty" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
Name string `json:"name" validate:"required" example:"takeover-report.pdf"`
}
type FileManagerFileTakeoverBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileTakeoverCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileTakeoverBulkCreateRequest struct {
Data []FileManagerFileTakeoverBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileTemplateCreateAttributes struct {
TemplateUUID string `json:"template_uuid" validate:"required" example:"019f0386-0a00-7a4a-a2d8-30afc0e0c3ad"`
HelicopterID string `json:"helicopter_id" validate:"required" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
TakeoverID string `json:"takeover_id,omitempty" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
Name string `json:"name" validate:"required" example:"collabora-draft.docx"`
}
type FileManagerFileTemplateCreateRequest struct {
Data struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create_from_template file_manager_file_create"`
Attributes FileManagerFileTemplateCreateAttributes `json:"attributes" validate:"required"`
} `json:"data" validate:"required"`
}
type FileManagerFileMissionCreateAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
MissionUUID string `json:"mission_uuid" validate:"required" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
Name string `json:"name" validate:"required" example:"mission-brief.pdf"`
}
type FileManagerFileMissionBulkCreateItem struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_create file_manager_file" example:"file_manager_file_create"`
Attributes FileManagerFileMissionCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileMissionBulkCreateRequest struct {
Data []FileManagerFileMissionBulkCreateItem `json:"data" validate:"required,min=1"`
}
type FileManagerFileUpdateAttributes struct {
FolderID *string `json:"folder_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name *string `json:"name,omitempty" example:"policy-v2.pdf"`
}
type FileManagerFileUpdateData struct {
Type string `json:"type" validate:"required,oneof=file_manager_file_update file_manager_file" example:"file_manager_file_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes FileManagerFileUpdateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFileUpdateRequest struct {
Data FileManagerFileUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,47 @@
package request
type FileManagerFolderCreateAttributes struct {
ParentID *string `json:"parent_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" validate:"required" example:"operations"`
}
type FileManagerFolderCreateData struct {
Type string `json:"type" validate:"required,oneof=file_manager_folder_create file_manager_folder" example:"file_manager_folder_create"`
Attributes FileManagerFolderCreateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFolderCreateRequest struct {
Data FileManagerFolderCreateData `json:"data" validate:"required"`
}
type FileManagerFolderUpdateAttributes struct {
Name *string `json:"name,omitempty" example:"operations-updated"`
ParentID *string `json:"parent_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerFolderUpdateData struct {
Type string `json:"type" validate:"required,oneof=file_manager_folder_update file_manager_folder" example:"file_manager_folder_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes FileManagerFolderUpdateAttributes `json:"attributes" validate:"required"`
}
type FileManagerFolderUpdateRequest struct {
Data FileManagerFolderUpdateData `json:"data" validate:"required"`
}
type FileManagerNodeMoveItem struct {
UUID string `json:"uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
DestinationFolderUUID *string `json:"destination_folder_uuid" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerNodeMoveBulkRequest struct {
Data []FileManagerNodeMoveItem `json:"data" validate:"required,min=1"`
}
type FileManagerNodePurgeItem struct {
UUID string `json:"uuid" validate:"required" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerNodePurgeBulkRequest struct {
Data []FileManagerNodePurgeItem `json:"data" validate:"required,min=1"`
}

View File

@@ -0,0 +1,13 @@
package request
type FileManagerRestoreTargetAttributes struct {
TargetFolderID *string `json:"target_folder_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type FileManagerRestoreTargetData struct {
Attributes FileManagerRestoreTargetAttributes `json:"attributes"`
}
type FileManagerRestoreTargetRequest struct {
Data *FileManagerRestoreTargetData `json:"data,omitempty"`
}

View File

@@ -0,0 +1,70 @@
package request
import shared "wucher/internal/transport/http/dto/shared"
type FleetStatusMarkServicedAttributes struct {
ServicedAt string `json:"serviced_at,omitempty" example:"2026-05-29T07:43:06Z"`
}
type FleetStatusMarkServicedData struct {
Type string `json:"type" validate:"required,oneof=fleet_status_mark_serviced fleet_status" example:"fleet_status_mark_serviced"`
Attributes FleetStatusMarkServicedAttributes `json:"attributes"`
}
type FleetStatusMarkServicedRequest struct {
Data FleetStatusMarkServicedData `json:"data" validate:"required"`
}
type FleetStatusCreateAttributes struct {
HelicopterID string `json:"helicopter_id" validate:"required" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
MaintenanceSchedules []shared.MaintenanceScheduleAttributes `json:"maintenance_schedules" validate:"omitempty,dive"`
Files []shared.FleetStatusFileAttributes `json:"files"`
}
type FleetStatusCreateData struct {
Type string `json:"type" validate:"required,oneof=fleet_status_create fleet_status" example:"fleet_status_create"`
Attributes FleetStatusCreateAttributes `json:"attributes" validate:"required"`
}
type FleetStatusCreateRequest struct {
Data FleetStatusCreateData `json:"data" validate:"required"`
}
type FleetStatusUpdateAttributes struct {
HelicopterID *string `json:"helicopter_id,omitempty"`
MaintenanceSchedules []shared.MaintenanceScheduleAttributes `json:"maintenance_schedules" validate:"omitempty,dive"`
Files []shared.FleetStatusFileAttributes `json:"files"`
Summary *FleetStatusSummaryUpdate `json:"summary,omitempty"`
}
type FleetStatusSummaryUpdate struct {
Airframe *FleetStatusSummaryAirframeUpdate `json:"airframe,omitempty"`
Engine1 *FleetStatusSummaryEngineUpdate `json:"engine_1,omitempty"`
Engine2 *FleetStatusSummaryEngineUpdate `json:"engine_2,omitempty"`
Landings *float64 `json:"landings,omitempty" example:"120"`
FlightReports *float64 `json:"flight_reports,omitempty" example:"80"`
RotorBrakeCycles *float64 `json:"rotor_brake_cycles,omitempty" example:"8"`
HookReleases *float64 `json:"hook_releases,omitempty" example:"10"`
}
type FleetStatusSummaryAirframeUpdate struct {
Hours *float64 `json:"hours,omitempty" example:"6610.5"`
Cycles *float64 `json:"cycles,omitempty" example:"320"`
}
type FleetStatusSummaryEngineUpdate struct {
Hours *float64 `json:"hours,omitempty" example:"8001.7"`
GpcNgN1 *float64 `json:"gpc_ng_n1,omitempty" example:"98.7"`
PtcNfN2 *float64 `json:"ptc_nf_n2,omitempty" example:"97.2"`
Ccc *float64 `json:"ccc,omitempty" example:"44"`
}
type FleetStatusUpdateData struct {
Type string `json:"type" validate:"required,oneof=fleet_status_update fleet_status" example:"fleet_status_update"`
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Attributes FleetStatusUpdateAttributes `json:"attributes" validate:"required"`
}
type FleetStatusUpdateRequest struct {
Data FleetStatusUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,135 @@
package request
type FlightDataCreateAttributes struct {
MissionID string `json:"mission_id" validate:"required"`
CoPilotID *string `json:"co_pilot_id,omitempty"`
FromICAOID *string `json:"from_icao_id,omitempty"`
FromHospitalID *string `json:"from_hospital_id,omitempty"`
ToICAOID *string `json:"to_icao_id,omitempty"`
ToHospitalID *string `json:"to_hospital_id,omitempty"`
FlightTakeOff *string `json:"flight_take_off,omitempty"`
FlightLanding *string `json:"flight_landing,omitempty"`
FlightDurationSecs *int64 `json:"flight_duration_seconds,omitempty"`
FlightREDSecs *int64 `json:"flight_red_seconds,omitempty"`
MaxN1 *float64 `json:"max_n1,omitempty"`
MaxN2 *float64 `json:"max_n2,omitempty"`
PaxCount *int `json:"pax_count,omitempty"`
LandingCount *int `json:"landing_count,omitempty"`
RotorBrakeCycle *int `json:"rotor_brake_cycle,omitempty"`
HookReleases *int `json:"hook_releases,omitempty"`
TicketNo *string `json:"ticket_no,omitempty"`
Engine *string `json:"engine,omitempty"`
DeliveryNoteNumber *string `json:"delivery_note_number,omitempty"`
CustomerName *string `json:"customer_name,omitempty"`
FlightPlanDistance *float64 `json:"flight_plan_distance,omitempty"`
FlightPlanTimeSecs *int64 `json:"flight_plan_time_seconds,omitempty"`
FlightPlanTrueCourse *float64 `json:"flight_plan_true_course,omitempty"`
FuelBeforeFlight *float64 `json:"fuel_before_flight,omitempty"`
FuelUpload *float64 `json:"fuel_upload,omitempty"`
FuelAfterFlight *float64 `json:"fuel_after_flight,omitempty"`
FuelPlanning *float64 `json:"fuel_planning,omitempty"`
FlightPositioning *bool `json:"flight_positioning,omitempty" example:"false"`
HESLO *FlightDataCreateSPOHESLOAttributes `json:"heslo,omitempty"`
Logging *FlightDataCreateSPOLoggingAttributes `json:"logging,omitempty"`
HEC *FlightDataCreateSPOHECAttributes `json:"hec,omitempty"`
OtherInformation *string `json:"other_information,omitempty"`
}
type FlightDataCreateSPOHESLOAttributes struct {
Flights []FlightDataCreateSPOHESLOFlight `json:"flights,omitempty"`
}
type FlightDataCreateSPOHESLOFlight struct {
ROT int `json:"rot" example:"0"`
// Facility category: heslo-rope-label.
HESLORopeLabelID string `json:"heslo_rope_label_id,omitempty" example:"string"`
HESLORopeLabelName string `json:"heslo_rope_label_name,omitempty" example:"string"`
// Facility category: heslo-rope-length.
Slings []FlightDataCreateSPOHESLOSling `json:"slings,omitempty"`
}
type FlightDataCreateSPOHESLOSling struct {
// Facility category: heslo-rope-length.
SlingID string `json:"sling_id,omitempty" example:"string"`
SlingName string `json:"sling_name,omitempty" example:"string"`
}
type FlightDataCreateSPOLoggingAttributes struct {
Slings []FlightDataCreateSPOLoggingSling `json:"slings,omitempty"`
}
type FlightDataCreateSPOLoggingSling struct {
// Facility category: heslo-hook.
SlingID string `json:"sling_id,omitempty" example:"string"`
SlingName string `json:"sling_name,omitempty" example:"string"`
}
type FlightDataCreateSPOHECAttributes struct {
Flights []FlightDataCreateSPOHECFlight `json:"flights,omitempty"`
Loads []FlightDataCreateSPOHECLoad `json:"loads,omitempty"`
Slings []FlightDataCreateSPOHECSling `json:"slings,omitempty"`
}
type FlightDataCreateSPOHECFlight struct {
// Facility category: hec-rope-label.
EquipmentID string `json:"equipment_id,omitempty" example:"string"`
EquipmentName string `json:"equipment_name,omitempty" example:"string"`
HECCycle int `json:"hec_cycle" example:"0"`
ROT int `json:"rot" example:"0"`
}
type FlightDataCreateSPOHECLoad struct {
// 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 FlightDataCreateSPOHECSling struct {
// Facility category: hec-rope-length.
SlingID string `json:"sling_id,omitempty" example:"string"`
SlingName string `json:"sling_name,omitempty" example:"string"`
}
type FlightDataCreateData struct {
Type string `json:"type" validate:"required,oneof=flight_data_create flight_data" example:"flight_data_create"`
Attributes FlightDataCreateAttributes `json:"attributes" validate:"required"`
}
type FlightDataCreateRequest struct {
Data FlightDataCreateData `json:"data" validate:"required"`
}
type FlightDataUpdateData struct {
Type string `json:"type" validate:"required,oneof=flight_data_update" example:"flight_data_update"`
Attributes FlightDataCreateAttributes `json:"attributes" validate:"required"`
}
type FlightDataUpdateRequest struct {
Data FlightDataUpdateData `json:"data" validate:"required"`
}
// FlightDataCreateSPOExampleRequest is used only for Swagger examples.
// Runtime parsing still uses FlightDataCreateRequest.
type FlightDataCreateSPOExampleRequest struct {
Data FlightDataCreateSPOExampleData `json:"data"`
}
type FlightDataCreateSPOExampleData struct {
Type string `json:"type" example:"flight_data_create"`
Attributes FlightDataCreateSPOExampleAttributes `json:"attributes"`
}
type FlightDataCreateSPOExampleAttributes struct {
MissionID string `json:"mission_id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
CoPilotID string `json:"co_pilot_id,omitempty" example:"019d61db-53c6-7280-87ec-e65f205c6d3b"`
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"`
FromICAOID string `json:"from_icao_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
ToICAOID string `json:"to_icao_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
HookReleases int `json:"hook_releases,omitempty" example:"0"`
TicketNo string `json:"ticket_no,omitempty" example:"SPO-001"`
Engine string `json:"engine,omitempty" example:"AIRBUS H145"`
DeliveryNoteNumber string `json:"delivery_note_number,omitempty" example:"DN-2026-0001"`
CustomerName string `json:"customer_name,omitempty" example:"Patient Transfer"`
OtherInformation string `json:"other_information,omitempty" example:"SPO mission sample"`
}

View File

@@ -0,0 +1,32 @@
package request
type FlightInspectionFileChecklistCreateAttributes struct {
IsDone *bool `json:"is_done,omitempty" example:"false"`
HelicopterFileID string `json:"helicopter_file_id" validate:"required" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FlightInspectionID string `json:"flight_inspection_id" validate:"required" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
}
type FlightInspectionFileChecklistCreateData struct {
Type string `json:"type" validate:"required,oneof=flight_inspection_file_checklist_create flight_inspection_file_checklist" example:"flight_inspection_file_checklist_create"`
Attributes FlightInspectionFileChecklistCreateAttributes `json:"attributes" validate:"required"`
}
type FlightInspectionFileChecklistCreateRequest struct {
Data FlightInspectionFileChecklistCreateData `json:"data" validate:"required"`
}
type FlightInspectionFileChecklistUpdateAttributes struct {
IsDone *bool `json:"is_done,omitempty" example:"true"`
HelicopterFileID *string `json:"helicopter_file_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FlightInspectionID *string `json:"flight_inspection_id,omitempty" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
}
type FlightInspectionFileChecklistUpdateData struct {
Type string `json:"type" validate:"required,oneof=flight_inspection_file_checklist_update flight_inspection_file_checklist" example:"flight_inspection_file_checklist_update"`
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Attributes FlightInspectionFileChecklistUpdateAttributes `json:"attributes" validate:"required"`
}
type FlightInspectionFileChecklistUpdateRequest struct {
Data FlightInspectionFileChecklistUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,32 @@
package request
type FlightCreateAttributes struct {
Date string `json:"date" validate:"required" example:"2026-04-14"`
DutyRosterID *string `json:"duty_roster_id,omitempty" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
ReserveAcID *string `json:"reserve_ac_id,omitempty" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
}
type FlightCreateData struct {
Type string `json:"type" validate:"required,oneof=flight_create flight" example:"flight_create"`
Attributes FlightCreateAttributes `json:"attributes" validate:"required"`
}
type FlightCreateRequest struct {
Data FlightCreateData `json:"data" validate:"required"`
}
type FlightUpdateAttributes struct {
Date *string `json:"date,omitempty" example:"2026-04-14"`
DutyRosterID *string `json:"duty_roster_id,omitempty" example:"019d6772-471c-7b70-b42a-d94020ef61e4"`
ReserveAcID *string `json:"reserve_ac_id,omitempty" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
}
type FlightUpdateData struct {
Type string `json:"type" validate:"required,oneof=flight_update flight" example:"flight_update"`
ID string `json:"id" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
Attributes FlightUpdateAttributes `json:"attributes" validate:"required"`
}
type FlightUpdateRequest struct {
Data FlightUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,21 @@
package request
type FMReportUpdateAttributes struct {
// Engine1GpcN1 - GPC/N1 value for engine 1. Optional.
Engine1GpcN1 *string `json:"engine1_gpc_n1,omitempty" example:"GPC/N1 63.2"`
// Engine1PtcN2 - PTC/N2 value for engine 1. Optional.
Engine1PtcN2 *string `json:"engine1_ptc_n2,omitempty" example:"PTC/N2 61.8"`
// Engine2GpcN1 - GPC/N1 value for engine 2. Optional.
Engine2GpcN1 *string `json:"engine2_gpc_n1,omitempty" example:"GPC/N1 63.2"`
// Engine2PtcN2 - PTC/N2 value for engine 2. Optional.
Engine2PtcN2 *string `json:"engine2_ptc_n2,omitempty" example:"PTC/N2 61.8"`
}
type FMReportUpdateData struct {
Type string `json:"type" validate:"required,oneof=fm_report_update fm_report" example:"fm_report_update"`
Attributes FMReportUpdateAttributes `json:"attributes" validate:"required"`
}
type FMReportUpdateRequest struct {
Data FMReportUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,87 @@
package request
type HelicopterFileCreateAttributes struct {
Section string `json:"section" validate:"required,oneof=bfi fpwb afi" enums:"bfi,fpwb,afi" example:"bfi"`
Position *int `json:"position,omitempty" example:"1"`
IsMandatory *bool `json:"is_mandatory,omitempty" example:"true"`
HelicopterID string `json:"helicopter_id" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"019d6d0d-2de2-7db1-80a2-2862d43af620"`
FileName string `json:"file_name" validate:"required" example:"Before Flight Checklist.pdf"`
FolderUUID *string `json:"folder_uuid,omitempty" example:"019d6d0d-8c24-72e3-9f58-c9ea0fbf0bb1"`
}
type HelicopterFileUploadAttributes struct {
Name string `json:"name" validate:"required" example:"Before Flight Checklist.pdf"`
ContentType string `json:"content_type" validate:"required" example:"application/pdf"`
SizeBytes int64 `json:"size_bytes" validate:"required,gte=0" example:"1024"`
}
type HelicopterFileUploadData struct {
Type string `json:"type" validate:"required,oneof=helicopter_file_upload" example:"helicopter_file_upload"`
Attributes HelicopterFileUploadAttributes `json:"attributes" validate:"required"`
}
type HelicopterFileUploadRequest struct {
Data HelicopterFileUploadData `json:"data" validate:"required"`
}
type HelicopterFileUploadBulkRequest struct {
Data []HelicopterFileUploadData `json:"data" validate:"required,min=1"`
}
type HelicopterFileCancelUploadAttributes struct {
UploadIntentUUID string `json:"upload_intent_uuid" validate:"required" example:"019d6d0d-2de2-7db1-80a2-2862d43af620"`
}
type HelicopterFileCancelUploadData struct {
Type string `json:"type" validate:"required,oneof=helicopter_file_cancel_upload" example:"helicopter_file_cancel_upload"`
Attributes HelicopterFileCancelUploadAttributes `json:"attributes" validate:"required"`
}
type HelicopterFileCancelUploadBulkRequest struct {
Data []HelicopterFileCancelUploadData `json:"data" validate:"required,min=1"`
}
type HelicopterFileCreateData struct {
Type string `json:"type" validate:"required,oneof=helicopter_file_create helicopter_file" example:"helicopter_file_create"`
Attributes HelicopterFileCreateAttributes `json:"attributes" validate:"required"`
}
type HelicopterFileCreateRequest struct {
Data HelicopterFileCreateData `json:"data" validate:"required"`
}
type HelicopterFileCreateBulkRequest struct {
Data []HelicopterFileCreateData `json:"data" validate:"required,min=1"`
}
type HelicopterFileUpdateAttributes struct {
Section *string `json:"section,omitempty" validate:"omitempty,oneof=bfi fpwb afi" enums:"bfi,fpwb,afi" example:"fpwb"`
Position *int `json:"position,omitempty" example:"1"`
IsMandatory *bool `json:"is_mandatory,omitempty" example:"true"`
HelicopterID *string `json:"helicopter_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FileName *string `json:"file_name,omitempty" example:"Before Flight Checklist v2.pdf"`
}
type HelicopterFileUpdateData struct {
Type string `json:"type" validate:"required,oneof=helicopter_file_update helicopter_file" example:"helicopter_file_update"`
ID string `json:"id" validate:"required" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Attributes HelicopterFileUpdateAttributes `json:"attributes" validate:"required"`
}
type HelicopterFileUpdateRequest struct {
Data HelicopterFileUpdateData `json:"data" validate:"required"`
}
type HelicopterFileUpdateBulkRequest struct {
Data []HelicopterFileUpdateData `json:"data" validate:"required,min=1"`
}
type HelicopterFileDeleteData struct {
Type string `json:"type" validate:"required,oneof=helicopter_file_delete helicopter_file" example:"helicopter_file_delete"`
ID string `json:"id" validate:"required" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
}
type HelicopterFileDeleteRequest struct {
Data HelicopterFileDeleteData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,70 @@
package request
import "wucher/internal/transport/http/dto"
type HelicopterCreateAttributes struct {
Designation string `json:"designation" validate:"required" example:"OE-XHZ"`
Identifier string `json:"identifier" validate:"required" example:"ABC"`
Type string `json:"type" validate:"required" 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,omitempty" example:"4.1"`
NR1 *bool `json:"nr1,omitempty" example:"true"`
NR2 *bool `json:"nr2,omitempty" example:"true"`
LH *bool `json:"lh,omitempty" example:"true"`
RH *bool `json:"rh,omitempty" example:"true"`
MGB *bool `json:"mgb,omitempty" example:"true"`
IGB *bool `json:"igb,omitempty" example:"false"`
TGB *bool `json:"tgb,omitempty" example:"true"`
UTCOffset *int `json:"utc_offset,omitempty" example:"-1"`
FileUUID *string `json:"file_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e90"`
Dry *bool `json:"dry,omitempty" example:"false"`
AOG *bool `json:"aog,omitempty" example:"false"`
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,omitempty" example:"true"`
}
type HelicopterCreateData struct {
Type string `json:"type" validate:"required,oneof=helicopter_create helicopter" example:"helicopter_create"`
Attributes HelicopterCreateAttributes `json:"attributes" validate:"required"`
}
type HelicopterCreateRequest struct {
Data HelicopterCreateData `json:"data" validate:"required"`
}
type HelicopterUpdateAttributes struct {
Designation *string `json:"designation,omitempty" example:"OE-XHZ"`
Identifier *string `json:"identifier,omitempty" example:"ABC"`
Type *string `json:"type,omitempty" example:"EC-135"`
SortKey dto.NullInt `json:"sortkey,omitempty" swaggertype:"integer" example:"10"`
Engine1 *string `json:"engine_1,omitempty" example:"TM"`
Engine2 *string `json:"engine_2,omitempty" example:"TM"`
Consumption *float64 `json:"consumption_lt_min,omitempty" example:"4.1"`
NR1 *bool `json:"nr1,omitempty" example:"true"`
NR2 *bool `json:"nr2,omitempty" example:"true"`
LH *bool `json:"lh,omitempty" example:"true"`
RH *bool `json:"rh,omitempty" example:"true"`
MGB *bool `json:"mgb,omitempty" example:"true"`
IGB *bool `json:"igb,omitempty" example:"false"`
TGB *bool `json:"tgb,omitempty" example:"true"`
UTCOffset *int `json:"utc_offset,omitempty" example:"-1"`
FileUUID *string `json:"file_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e90"`
Dry *bool `json:"dry,omitempty" example:"false"`
AOG *bool `json:"aog,omitempty" example:"false"`
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,omitempty" example:"true"`
}
type HelicopterUpdateData struct {
Type string `json:"type" validate:"required,oneof=helicopter_update helicopter" example:"helicopter_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes HelicopterUpdateAttributes `json:"attributes" validate:"required"`
}
type HelicopterUpdateRequest struct {
Data HelicopterUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,19 @@
package request
type MasterSettingsMicrosoftEntraUpsertAttributes struct {
TenantID string `json:"MS_ENTRA_TENANT_ID" validate:"required" example:"your-tenant-id"`
ClientID string `json:"MS_ENTRA_CLIENT_ID" validate:"required" example:"your-client-id"`
ClientSecret string `json:"MS_ENTRA_CLIENT_SECRET" example:"********"`
RedirectURL string `json:"MS_ENTRA_REDIRECT_URL" validate:"required" example:"https://example.com/api/v1/auth/microsoft/callback"`
Authority string `json:"MS_ENTRA_AUTHORITY" validate:"required" example:"https://login.microsoftonline.com/"`
Scopes string `json:"MS_ENTRA_SCOPES" validate:"required" example:"openid,profile,email"`
}
type MasterSettingsMicrosoftEntraUpsertData struct {
Type string `json:"type" validate:"required,oneof=master_settings_microsoft_entra_upsert master_settings" example:"master_settings_microsoft_entra_upsert"`
Attributes MasterSettingsMicrosoftEntraUpsertAttributes `json:"attributes" validate:"required"`
}
type MasterSettingsMicrosoftEntraUpsertRequest struct {
Data MasterSettingsMicrosoftEntraUpsertData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,36 @@
package request
type MasterSettingsCreateAttributes struct {
CompanyName string `json:"company_name" validate:"required" 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,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
CoverFileUUID *string `json:"cover_file_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type MasterSettingsCreateData struct {
Type string `json:"type" validate:"required,oneof=master_settings_create master_settings" example:"master_settings_create"`
Attributes MasterSettingsCreateAttributes `json:"attributes" validate:"required"`
}
type MasterSettingsCreateRequest struct {
Data MasterSettingsCreateData `json:"data" validate:"required"`
}
type MasterSettingsUpdateAttributes struct {
CompanyName *string `json:"company_name,omitempty" 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,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
CoverFileUUID *string `json:"cover_file_uuid,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type MasterSettingsUpdateData struct {
Type string `json:"type" validate:"required,oneof=master_settings_update master_settings" example:"master_settings_update"`
ID string `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Attributes MasterSettingsUpdateAttributes `json:"attributes" validate:"required"`
}
type MasterSettingsUpdateRequest struct {
Data MasterSettingsUpdateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,52 @@
package request
// MCFSetAttributes toggles a helicopter's MCF (Yes/No) and is the DRAFT work endpoint.
// active=true (or omitted) ACTIVATES it — creates the draft MCF if none is open, or
// UPDATES the open draft with the provided check-flight fields (all optional; partial
// edits allowed). Finalize it later via POST /mcf/sign (sign:true).
// active=false DEACTIVATES it — cancels the open draft ("tidak jadi") and releases the
// MCF status; the cancelled record stays in the list. A signed MCF is a real event and
// is not cancelled by this.
type MCFSetAttributes struct {
Active *bool `json:"active,omitempty" example:"true"`
// FlightID — OPTIONAL flight this check flight is performed on (on activate).
FlightID string `json:"flight_id,omitempty" validate:"omitempty,uuid" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
AFHours string `json:"af_hours,omitempty" example:"1245.3"`
LandingCount *int `json:"landing_count,omitempty" example:"3"`
UTCTime string `json:"utc_time,omitempty" example:"2026-06-17T08:30:00Z"`
Date string `json:"date,omitempty" example:"2026-06-17"`
Result string `json:"result,omitempty" validate:"omitempty,oneof=passed failed" enums:"passed,failed" example:"passed"`
Notes *string `json:"notes,omitempty" example:"MCF required after engine mount work"`
}
type MCFSetData struct {
Type string `json:"type" validate:"required,oneof=mcf_set mcf" example:"mcf_set"`
Attributes MCFSetAttributes `json:"attributes" validate:"required"`
}
type MCFSetRequest struct {
Data MCFSetData `json:"data" validate:"required"`
}
// MCFCompleteAttributes signs (completes) or unsigns an MCF. sign toggles the state:
// - sign=true (or omitted) SIGNS it — af_hours, landing_count, utc_time, date and
// result are required. "passed" clears the aircraft; "failed" keeps it grounded.
// - sign=false UNSIGNS it — reverts the MCF to a draft (the fields below are ignored).
type MCFCompleteAttributes struct {
Sign *bool `json:"sign,omitempty" example:"true"`
AFHours string `json:"af_hours,omitempty" example:"1245.3"`
LandingCount *int `json:"landing_count,omitempty" example:"3"`
UTCTime string `json:"utc_time,omitempty" example:"2026-06-17T08:30:00Z"`
Date string `json:"date,omitempty" example:"2026-06-17"`
Result string `json:"result,omitempty" validate:"omitempty,oneof=passed failed" enums:"passed,failed" example:"passed"`
Notes *string `json:"notes,omitempty" example:"Vibration within limits after check flight"`
}
type MCFCompleteData struct {
Type string `json:"type" validate:"required,oneof=mcf_complete mcf_sign mcf" example:"mcf_sign"`
Attributes MCFCompleteAttributes `json:"attributes" validate:"required"`
}
type MCFCompleteRequest struct {
Data MCFCompleteData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,53 @@
package request
type MissionFileInput struct {
UploadIntentUUID string `json:"upload_intent_uuid" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
Name string `json:"name" example:"mission-brief.pdf"`
}
type MissionCreateAttributes struct {
FlightID string `json:"flight_id" validate:"required" example:"019d6774-98e8-7fba-9ef4-3795c0da8a13"`
Type string `json:"type" validate:"required" example:"HEMS"`
SubtypeID string `json:"subtype_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a99"`
Note string `json:"note,omitempty" example:"Mission note"`
Files []MissionFileInput `json:"files,omitempty"`
}
type MissionCreateData struct {
Type string `json:"type" validate:"required,oneof=mission_create mission" example:"mission_create"`
Attributes MissionCreateAttributes `json:"attributes" validate:"required"`
}
type MissionCreateRequest struct {
Data MissionCreateData `json:"data" validate:"required"`
}
type MissionUpdateAttributes struct {
Type string `json:"type" validate:"required" example:"SPO"`
SubtypeID string `json:"subtype_id,omitempty" example:"019d6774-98e8-7fba-9ef4-3795c0da8a99"`
Note string `json:"note,omitempty" example:"Mission note"`
Files []MissionFileInput `json:"files,omitempty"`
}
type MissionUpdateData struct {
Type string `json:"type" validate:"required,oneof=mission_update mission" example:"mission_update"`
Attributes MissionUpdateAttributes `json:"attributes" validate:"required"`
}
type MissionUpdateRequest struct {
Data MissionUpdateData `json:"data" validate:"required"`
}
type MissionTypeCreateAttributes struct {
CodeType string `json:"code_type" validate:"required" example:"HEMS"`
TypeName string `json:"name" validate:"required" example:"HEMS"`
}
type MissionTypeCreateData struct {
Type string `json:"type" validate:"required,oneof=mission_type_create mission_type" example:"mission_type_create"`
Attributes MissionTypeCreateAttributes `json:"attributes" validate:"required"`
}
type MissionTypeCreateRequest struct {
Data MissionTypeCreateData `json:"data" validate:"required"`
}

View File

@@ -0,0 +1,18 @@
package request
// OtherPersonAttributesInput carries the editable fields of a reusable non-staff person.
type OtherPersonAttributesInput 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 OtherPersonRequestData struct {
Type string `json:"type,omitempty" example:"other_person"`
Attributes OtherPersonAttributesInput `json:"attributes"`
}
// OtherPersonRequest is the JSON:API body for create/update of the other-people master.
type OtherPersonRequest struct {
Data OtherPersonRequestData `json:"data"`
}

View File

@@ -0,0 +1,249 @@
package request
import "encoding/json"
type ReserveAcCreateAttributes struct {
AircraftID string `json:"helicopter_id" validate:"required" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FlightID string `json:"flight_id" validate:"required" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Inspection ReserveAcInspectionCreateAttributes `json:"inspection" validate:"required"`
}
type ReserveAcInspectionCreateAttributes struct {
InspectionDate string `json:"inspection_date" validate:"required" example:"2026-04-15"`
Before ReserveAcBeforeInspectionAttributes `json:"before" validate:"required"`
Prepare ReserveAcPrepareInspectionAttributes `json:"prepare" validate:"required"`
FleetStatusFile ReserveAcFleetStatusFileAttributes `json:"fleet_status_file,omitempty"`
}
type ReserveAcBeforeInspectionAttributes struct {
OilEngineNR1Checked *bool `json:"oil_engine_nr1_checked,omitempty"`
OilEngineNR2Checked *bool `json:"oil_engine_nr2_checked,omitempty"`
HydraulicLHChecked *bool `json:"hydraulic_lh_checked,omitempty"`
HydraulicRHChecked *bool `json:"hydraulic_rh_checked,omitempty"`
OilTransmissionMGBChecked *bool `json:"oil_transmission_mgb_checked,omitempty"`
OilTransmissionIGBChecked *bool `json:"oil_transmission_igb_checked,omitempty"`
OilTransmissionTGBChecked *bool `json:"oil_transmission_tgb_checked,omitempty"`
FuelAmount *float64 `json:"fuel_amount,omitempty"`
FuelUnit *string `json:"fuel_unit,omitempty"`
FuelAddedAmount *float64 `json:"fuel_added_amount,omitempty"`
Note *string `json:"note,omitempty"`
FileChecklist []ReserveAcFileChecklistItem `json:"file_checklist,omitempty"`
}
type ReserveAcFileChecklistItem struct {
HelicopterFileID string `json:"helicopter_file_id" validate:"required" example:"019d7000-aaaa-7bbb-8ccc-111111111111"`
IsDone bool `json:"is_done" example:"true"`
}
type ReserveAcPrepareInspectionAttributes struct {
NotamBriefing *bool `json:"notam_briefing,omitempty"`
WeatherBriefing *bool `json:"weather_briefing,omitempty"`
OperationalFlightPlan *bool `json:"operational_flight_plan,omitempty"`
FileChecklist []ReserveAcFileChecklistItem `json:"file_checklist,omitempty"`
}
type ReserveAcFleetStatusFileAttributes struct {
FileChecklist []ReserveAcFileChecklistItem `json:"file_checklist,omitempty"`
}
type ReserveAcAfterFlightInspectionAttributes struct {
OilEngineNR1Checked *string `json:"oil_engine_nr1_checked,omitempty"`
OilEngineNR2Checked *string `json:"oil_engine_nr2_checked,omitempty"`
HydraulicLHChecked *string `json:"hydraulic_lh_checked,omitempty"`
HydraulicRHChecked *string `json:"hydraulic_rh_checked,omitempty"`
OilTransmissionMGBChecked *string `json:"oil_transmission_mgb_checked,omitempty"`
OilTransmissionIGBChecked *string `json:"oil_transmission_igb_checked,omitempty"`
OilTransmissionTGBChecked *string `json:"oil_transmission_tgb_checked,omitempty"`
Note *string `json:"note,omitempty"`
FileChecklist []ReserveAcFileChecklistItem `json:"file_checklist,omitempty"`
}
type ReserveAcAfterFlightInspectionUpsertData struct {
Type string `json:"type" validate:"required,oneof=after_flight_inspection_upsert after_flight_inspection"`
Attributes ReserveAcAfterFlightInspectionAttributes `json:"attributes" validate:"required"`
}
type ReserveAcAfterFlightInspectionUpsertRequest struct {
Data ReserveAcAfterFlightInspectionUpsertData `json:"data" validate:"required"`
}
type LastFlightsInspectionUpsertAttributes struct {
FlightInspectionID string `json:"flight_inspection_id" validate:"required"`
ReserveAcAfterFlightInspectionAttributes
}
type LastFlightsInspectionCreateData struct {
Type string `json:"type" validate:"required,oneof=last_flights_inspection_create last_flights_inspection"`
Attributes LastFlightsInspectionUpsertAttributes `json:"attributes" validate:"required"`
}
type LastFlightsInspectionCreateRequest struct {
Data LastFlightsInspectionCreateData `json:"data" validate:"required"`
}
type LastFlightsInspectionUpdateData struct {
Type string `json:"type" validate:"required,oneof=last_flights_inspection_update last_flights_inspection"`
Attributes LastFlightsInspectionUpsertAttributes `json:"attributes" validate:"required"`
}
type LastFlightsInspectionUpdateRequest struct {
Data LastFlightsInspectionUpdateData `json:"data" validate:"required"`
}
type LastFlightsInspectionDeleteAttributes struct {
FlightInspectionID string `json:"flight_inspection_id" validate:"required"`
}
type LastFlightsInspectionDeleteData struct {
Type string `json:"type" validate:"required,oneof=last_flights_inspection_delete last_flights_inspection"`
Attributes LastFlightsInspectionDeleteAttributes `json:"attributes" validate:"required"`
}
type LastFlightsInspectionDeleteRequest struct {
Data LastFlightsInspectionDeleteData `json:"data" validate:"required"`
}
type ReserveAcCreateData struct {
Type string `json:"type" validate:"required,oneof=reserve_ac_create reserve_ac" example:"reserve_ac_create"`
Attributes ReserveAcCreateAttributes `json:"attributes" validate:"required"`
}
type ReserveAcCreateRequest struct {
Data ReserveAcCreateData `json:"data" validate:"required"`
}
type ReserveAcUpdateAttributes struct {
AircraftID *string `json:"helicopter_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
FlightID *string `json:"flight_id,omitempty" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Inspection *ReserveAcInspectionUpdateAttributes `json:"inspection,omitempty"`
}
type ReserveAcInspectionUpdateAttributes struct {
InspectionDate *string `json:"inspection_date,omitempty" example:"2026-04-15"`
Before *ReserveAcBeforeInspectionAttributes `json:"before,omitempty"`
Prepare *ReserveAcPrepareInspectionAttributes `json:"prepare,omitempty"`
}
type ReserveAcUpdateData struct {
Type string `json:"type" validate:"required,oneof=reserve_ac_update reserve_ac" example:"reserve_ac_update"`
ID string `json:"id" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
Attributes ReserveAcUpdateAttributes `json:"attributes" validate:"required"`
}
type ReserveAcUpdateRequest struct {
Data ReserveAcUpdateData `json:"data" validate:"required"`
}
type ReserveAcDeleteData struct {
ID string `json:"id" validate:"required" example:"019d6773-ccca-71dd-b9c7-8e6f531deb90"`
}
type ReserveAcDeleteRequest struct {
Data ReserveAcDeleteData `json:"data" validate:"required"`
}
type TakeoverCreateAttributes struct {
BaseID *string `json:"base_id,omitempty"`
DutyDate string `json:"duty_date" validate:"required"`
Notes *string `json:"notes,omitempty"`
Detail *TakeoverRosterDetailsInput `json:"roster_detail,omitempty"`
AircraftID *string `json:"helicopter_id,omitempty"`
Inspection *ReserveAcInspectionCreateAttributes `json:"inspection,omitempty"`
Files []TakeoverCreateFileInput `json:"files,omitempty" validate:"omitempty,dive"`
EditedTemplateFileIDs []string `json:"edited_template_file_ids,omitempty" validate:"omitempty,dive,uuid"`
}
type TakeoverCreateData struct {
Type string `json:"type" validate:"required,oneof=takeover_create takeover"`
Attributes TakeoverCreateAttributes `json:"attributes" validate:"required"`
}
type TakeoverCreateRequest struct {
Data TakeoverCreateData `json:"data" validate:"required"`
}
type TakeoverCreateFileInput struct {
FileID string `json:"file_id,omitempty" validate:"omitempty,uuid" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
UploadIntentUUID string `json:"upload_intent_uuid,omitempty" validate:"omitempty,uuid" example:"019e8713-aa19-7fb7-a510-a0332dc69697"`
Name string `json:"name,omitempty" example:"takeover-report.pdf"`
}
type TakeoverUpdateAttributes struct {
BaseID *string `json:"base_id,omitempty"`
Bases *TakeoverBaseRef `json:"bases,omitempty"`
DutyDate *string `json:"duty_date,omitempty"`
Notes *string `json:"notes,omitempty"`
Detail *TakeoverRosterDetailsInput `json:"roster_detail,omitempty"`
RosterDetail *TakeoverRosterDetailsInput `json:"roster_details,omitempty"`
AircraftID *string `json:"helicopter_id,omitempty"`
Inspection *ReserveAcInspectionCreateAttributes `json:"inspection,omitempty"`
Files []TakeoverCreateFileInput `json:"files,omitempty" validate:"omitempty,dive"`
FilesAdd []TakeoverCreateFileInput `json:"files_add,omitempty" validate:"omitempty,dive"`
FilesRemove []string `json:"files_remove,omitempty" validate:"omitempty,dive,uuid"`
FilesReplace []TakeoverCreateFileInput `json:"files_replace,omitempty" validate:"omitempty,dive"`
}
type TakeoverUpdateData struct {
Type string `json:"type" validate:"required,oneof=takeover_update takeover"`
ID string `json:"id"`
Attributes TakeoverUpdateAttributes `json:"attributes" validate:"required"`
}
type TakeoverUpdateRequest struct {
Data TakeoverUpdateData `json:"data" validate:"required"`
}
func (a *TakeoverUpdateAttributes) UnmarshalJSON(data []byte) error {
type alias TakeoverUpdateAttributes
var raw struct {
alias
Bases *TakeoverBaseRef `json:"bases,omitempty"`
RosterDetail *TakeoverRosterDetailsInput `json:"roster_details,omitempty"`
}
if err := json.Unmarshal(data, &raw); err != nil {
return err
}
*a = TakeoverUpdateAttributes(raw.alias)
if a.BaseID == nil && raw.Bases != nil && raw.Bases.ID != "" {
id := raw.Bases.ID
a.BaseID = &id
}
if a.Detail == nil && raw.RosterDetail != nil {
a.Detail = raw.RosterDetail
}
return nil
}
type TakeoverBaseRef struct {
ID string `json:"id,omitempty"`
}
type TakeoverRosterCrewInput struct {
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
}
type TakeoverRosterPilotInput struct {
ID string `json:"id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
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"`
CrewType string `json:"crew_type,omitempty" example:"main" enums:"main,additional"`
}
type TakeoverRosterOtherPersonInput struct {
// OtherPersonID — OPTIONAL master person id to reuse (from GET /contact/other).
OtherPersonID string `json:"other_person_id,omitempty" example:"019d6771-5fb5-7337-837f-bc5ed85181a1"`
Name string `json:"name,omitempty" example:"Guest Person"`
MobilePhone string `json:"mobile_phone,omitempty" example:"+43-1234"`
Email string `json:"email,omitempty" example:"guest@example.com"`
}
type TakeoverRosterDetailsInput struct {
Pilot []TakeoverRosterPilotInput `json:"pilot"`
Doctor []TakeoverRosterCrewInput `json:"doctor"`
Rescuer []TakeoverRosterCrewInput `json:"rescuer"`
Helper []TakeoverRosterCrewInput `json:"helper"`
OtherPerson []TakeoverRosterOtherPersonInput `json:"other_person"`
}