/** * Handle domain logic for an action. * * @param array $input * * @return PayloadInterface */ public function __invoke(array $input) { $user = $this->user_repository->getFromInputToken($input); if ($user->role !== 'manager') { throw new AuthException('Only managers have access to do that'); } if (empty($input['manager_id'])) { $input['manager_id'] = $user->id; } $input['start_time'] = date('Y-m-d G:i:s', strtotime($input['start_time'])); if ($input['start_time'] === false) { throw new \DomainException("Could not parse 'start time'"); } $input['end_time'] = date('Y-m-d G:i:s', strtotime($input['end_time'])); if ($input['end_time'] === false) { throw new \DomainException("Could not parse 'end time'"); } // only grab the necessary fields $values = array_intersect_key($input, array_flip(['manager_id', 'employee_id', 'break', 'start_time', 'end_time'])); $shift = $this->shift_repository->create($values); return $this->payload->withStatus(PayloadInterface::OK)->withOutput([$shift]); }