'array', 'decisions' => 'array', 'action_items' => 'array', 'meeting_date' => 'date', 'duration_seconds' => 'integer', 'audio_file_size' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function segments(): HasMany { return $this->hasMany(MeetingMinuteSegment::class)->orderBy('segment_order'); } public function getFormattedDurationAttribute(): string { $seconds = $this->duration_seconds; $hours = floor($seconds / 3600); $minutes = floor(($seconds % 3600) / 60); $secs = $seconds % 60; if ($hours > 0) { return sprintf('%d:%02d:%02d', $hours, $minutes, $secs); } return sprintf('%02d:%02d', $minutes, $secs); } }