* @author Graham Campbell * @author Joe Cohen */ class ComponentGroupController extends AbstractApiController { /** * Get all groups. * * @return \Illuminate\Http\JsonResponse */ public function getGroups() { $groups = ComponentGroup::query(); $groups->search(Binput::except(['sort', 'order', 'per_page'])); if ($sortBy = Binput::get('sort')) { $direction = Binput::has('order') && Binput::get('order') == 'desc'; $groups->sort($sortBy, $direction); } $groups = $groups->paginate(Binput::get('per_page', 20)); return $this->paginator($groups, Request::instance()); } /** * Get a single group. * * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return \Illuminate\Http\JsonResponse */ public function getGroup(ComponentGroup $group) { return $this->item($group); } /** * Create a new component group. * * @return \Illuminate\Http\JsonResponse */ public function postGroups() { try { $group = dispatch(new AddComponentGroupCommand( Binput::get('name'), Binput::get('order', 0), Binput::get('collapsed', 0) )); } catch (QueryException $e) { throw new BadRequestHttpException(); } return $this->item($group); } /** * Update an existing group. * * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return \Illuminate\Http\JsonResponse */ public function putGroup(ComponentGroup $group) { try { $group = dispatch(new UpdateComponentGroupCommand( $group, Binput::get('name'), Binput::get('order'), Binput::get('collapsed') )); } catch (QueryException $e) { throw new BadRequestHttpException(); } return $this->item($group); } /** * Delete an existing group. * * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return \Illuminate\Http\JsonResponse */ public function deleteGroup(ComponentGroup $group) { dispatch(new RemoveComponentGroupCommand($group)); return $this->noContent(); } }