trafficmonitor init...2

This commit is contained in:
최준흠 2025-11-18 15:52:41 +09:00
parent c44abcceb4
commit c2abd37cf6
6 changed files with 595 additions and 323 deletions

View File

@ -25,18 +25,6 @@ abstract class AbstractCRUDController extends AbstractWebController
return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas()); return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas());
} }
final public function create_form(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('formDatas', $this->create_form_process());
return $this->create_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
protected function create_process(): CommonEntity protected function create_process(): CommonEntity
{ {
// POST 데이터를 DTO 객체로 변환 (getPost()는 POST 요청 본문만 가져옵니다.) // POST 데이터를 DTO 객체로 변환 (getPost()는 POST 요청 본문만 가져옵니다.)
@ -49,20 +37,7 @@ abstract class AbstractCRUDController extends AbstractWebController
return $this->action_modal_process("{$this->getTitle()}에서 {$entity->getTitle()} 생성이 완료되었습니다."); return $this->action_modal_process("{$this->getTitle()}에서 {$entity->getTitle()} 생성이 완료되었습니다.");
} }
final public function create(): string|RedirectResponse
{
try {
$this->action_init_process(__FUNCTION__);
return $this->create_result_process($this->create_process());
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
}
}
// --- 수정 (Modify) --- // --- 수정 (Modify) ---
protected function modify_form_process($uid): CommonEntity protected function modify_form_process($uid): CommonEntity
{ {
if (!$uid) { if (!$uid) {
@ -80,18 +55,6 @@ abstract class AbstractCRUDController extends AbstractWebController
return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas()); return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas());
} }
final public function modify_form($uid): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('entity', $this->modify_form_process($uid));
return $this->modify_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
}
}
protected function modify_process($uid): CommonEntity protected function modify_process($uid): CommonEntity
{ {
// POST 데이터를 DTO 객체로 변환 // POST 데이터를 DTO 객체로 변환
@ -104,18 +67,6 @@ abstract class AbstractCRUDController extends AbstractWebController
return $this->action_modal_process("{$this->getTitle()}에서 {$entity->getTitle()} 수정이 완료되었습니다."); return $this->action_modal_process("{$this->getTitle()}에서 {$entity->getTitle()} 수정이 완료되었습니다.");
} }
final public function modify($uid): string|RedirectResponse
{
try {
$this->action_init_process(__FUNCTION__);
return $this->modify_result_process($this->modify_process($uid));
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
}
}
// --- 삭제 (Delete) --- // --- 삭제 (Delete) ---
protected function delete_process($uid): CommonEntity protected function delete_process($uid): CommonEntity
@ -128,15 +79,6 @@ abstract class AbstractCRUDController extends AbstractWebController
return $this->action_redirect_process('info', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다."); return $this->action_redirect_process('info', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다.");
} }
final public function delete($uid): RedirectResponse
{
try {
return $this->delete_result_process($this->delete_process($uid));
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
}
}
// --- 상세보기 (View) --- // --- 상세보기 (View) ---
protected function view_process($uid): CommonEntity protected function view_process($uid): CommonEntity
@ -155,16 +97,4 @@ abstract class AbstractCRUDController extends AbstractWebController
{ {
return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas()); return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas());
} }
final public function view($uid): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('entity', $this->view_process($uid));
return $this->view_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
}
}
} }

View File

@ -3,8 +3,11 @@
namespace App\Controllers\Admin; namespace App\Controllers\Admin;
use App\Entities\CollectorEntity; use App\Entities\CollectorEntity;
use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class CollectorController extends AdminController class CollectorController extends AdminController
@ -50,60 +53,163 @@ class CollectorController extends AdminController
$this->service->getFormService()->setBatchjobButtons($batchjobButtons); $this->service->getFormService()->setBatchjobButtons($batchjobButtons);
parent::action_init_process($action); parent::action_init_process($action);
} }
protected function create_process(): CollectorEntity public function create_form(): string|RedirectResponse
{ {
$entity = parent::create_process(); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('formDatas', $this->create_form_process());
return $this->create_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
public function create(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->create_process();
if (!$entity instanceof CollectorEntity) { if (!$entity instanceof CollectorEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능");
} }
return $entity; return $this->create_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
} }
protected function modify_form_process($uid): CollectorEntity }
public function modify_form($uid): string|RedirectResponse
{ {
$entity = parent::modify_form_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_form_process($uid);
if (!$entity instanceof CollectorEntity) { if (!$entity instanceof CollectorEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
} }
protected function modify_process($uid): CollectorEntity }
public function modify($uid): string|RedirectResponse
{ {
$entity = parent::modify_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_process($uid);
if (!$entity instanceof CollectorEntity) { if (!$entity instanceof CollectorEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
} }
protected function delete_process($uid): CollectorEntity }
public function delete($uid): RedirectResponse
{ {
$entity = parent::delete_process($uid); try {
$entity = $this->delete_process($uid);
if (!$entity instanceof CollectorEntity) { if (!$entity instanceof CollectorEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능");
} }
return $entity; return $this->delete_result_process($entity);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
} }
protected function view_process($uid): CollectorEntity }
public function view($uid): string|RedirectResponse
{ {
$entity = parent::view_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->view_process($uid);
if (!$entity instanceof CollectorEntity) { if (!$entity instanceof CollectorEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->view_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
} }
protected function batchjob_process($uid, array $formDatas): CollectorEntity }
public function batchjob(): string|RedirectResponse
{ {
$entity = parent::batchjob_process($uid, $formDatas); try {
if (!$entity instanceof CollectorEntity) { // 사전작업 및 데이터 추출 초기화
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); list($uids, $selectedFields, $formDatas) = $this->batchjob_pre_process();
$this->service->getFormService()->setFormFields($selectedFields);
$this->service->getFormService()->setFormRules(__FUNCTION__, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($selectedFields);
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (ValidationException $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
return $entity;
} }
protected function batchjob_delete_process($uid): CollectorEntity return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
}
}
public function batchjob_delete(): string|RedirectResponse
{ {
$entity = $this->service->delete($uid); try {
if (!$entity instanceof CollectorEntity) { $uids = $this->batchjob_delete_pre_process();
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 CollectorEntity만 가능"); $entities = [];
} $errors = [];
return $entity; foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
} }
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
public function index(): string|ResponseInterface
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->index_process($action);
$this->index_result_process($action);
} catch (\Exception $e) {
session()->setFlashdata('message', $e->getMessage());
}
return $this->index_result_process($action);
}
public function download(string $output_type, mixed $uid = false): DownloadResponse|RedirectResponse|string
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
}
}
//기본 함수 작업
//Custom 추가 함수
}

View File

@ -3,8 +3,11 @@
namespace App\Controllers\Admin; namespace App\Controllers\Admin;
use App\Entities\MylogEntity; use App\Entities\MylogEntity;
use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class MylogController extends AdminController class MylogController extends AdminController
@ -46,60 +49,163 @@ class MylogController extends AdminController
$this->service->getFormService()->setBatchjobFilters($batchjobFilters); $this->service->getFormService()->setBatchjobFilters($batchjobFilters);
parent::action_init_process($action); parent::action_init_process($action);
} }
protected function create_process(): MylogEntity public function create_form(): string|RedirectResponse
{ {
$entity = parent::create_process(); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('formDatas', $this->create_form_process());
return $this->create_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
public function create(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->create_process();
if (!$entity instanceof MylogEntity) { if (!$entity instanceof MylogEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능");
} }
return $entity; return $this->create_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
} }
protected function modify_form_process($uid): MylogEntity }
public function modify_form($uid): string|RedirectResponse
{ {
$entity = parent::modify_form_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_form_process($uid);
if (!$entity instanceof MylogEntity) { if (!$entity instanceof MylogEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
} }
protected function modify_process($uid): MylogEntity }
public function modify($uid): string|RedirectResponse
{ {
$entity = parent::modify_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_process($uid);
if (!$entity instanceof MylogEntity) { if (!$entity instanceof MylogEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
} }
protected function delete_process($uid): MylogEntity }
public function delete($uid): RedirectResponse
{ {
$entity = parent::delete_process($uid); try {
$entity = $this->delete_process($uid);
if (!$entity instanceof MylogEntity) { if (!$entity instanceof MylogEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능");
} }
return $entity; return $this->delete_result_process($entity);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
} }
protected function view_process($uid): MylogEntity }
public function view($uid): string|RedirectResponse
{ {
$entity = parent::view_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->view_process($uid);
if (!$entity instanceof MylogEntity) { if (!$entity instanceof MylogEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->view_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
} }
protected function batchjob_process($uid, array $formDatas): MylogEntity }
public function batchjob(): string|RedirectResponse
{ {
$entity = parent::batchjob_process($uid, $formDatas); try {
if (!$entity instanceof MylogEntity) { // 사전작업 및 데이터 추출 초기화
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); list($uids, $selectedFields, $formDatas) = $this->batchjob_pre_process();
$this->service->getFormService()->setFormFields($selectedFields);
$this->service->getFormService()->setFormRules(__FUNCTION__, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($selectedFields);
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (ValidationException $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
return $entity;
} }
protected function batchjob_delete_process($uid): MylogEntity return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
}
}
public function batchjob_delete(): string|RedirectResponse
{ {
$entity = $this->service->delete($uid); try {
if (!$entity instanceof MylogEntity) { $uids = $this->batchjob_delete_pre_process();
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 MylogEntity만 가능"); $entities = [];
} $errors = [];
return $entity; foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
} }
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
public function index(): string|ResponseInterface
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->index_process($action);
$this->index_result_process($action);
} catch (\Exception $e) {
session()->setFlashdata('message', $e->getMessage());
}
return $this->index_result_process($action);
}
public function download(string $output_type, mixed $uid = false): DownloadResponse|RedirectResponse|string
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
}
}
//기본 함수 작업
//Custom 추가 함수
}

View File

@ -3,8 +3,11 @@
namespace App\Controllers\Admin; namespace App\Controllers\Admin;
use App\Entities\TrafficEntity; use App\Entities\TrafficEntity;
use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class TrafficController extends AdminController class TrafficController extends AdminController
@ -47,62 +50,166 @@ class TrafficController extends AdminController
$this->service->getFormService()->setActionButtons($actionButtons); $this->service->getFormService()->setActionButtons($actionButtons);
parent::action_init_process($action); parent::action_init_process($action);
} }
protected function create_process(): TrafficEntity public function create_form(): string|RedirectResponse
{ {
$entity = parent::create_process(); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('formDatas', $this->create_form_process());
return $this->create_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
public function create(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->create_process();
if (!$entity instanceof TrafficEntity) { if (!$entity instanceof TrafficEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능");
} }
return $entity; return $this->create_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
} }
protected function modify_form_process($uid): TrafficEntity }
public function modify_form($uid): string|RedirectResponse
{ {
$entity = parent::modify_form_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_form_process($uid);
if (!$entity instanceof TrafficEntity) { if (!$entity instanceof TrafficEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
} }
protected function modify_process($uid): TrafficEntity }
public function modify($uid): string|RedirectResponse
{ {
$entity = parent::modify_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_process($uid);
if (!$entity instanceof TrafficEntity) { if (!$entity instanceof TrafficEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
} }
protected function delete_process($uid): TrafficEntity }
public function delete($uid): RedirectResponse
{ {
$entity = parent::delete_process($uid); try {
$entity = $this->delete_process($uid);
if (!$entity instanceof TrafficEntity) { if (!$entity instanceof TrafficEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능");
} }
return $entity; return $this->delete_result_process($entity);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
} }
protected function view_process($uid): TrafficEntity }
public function view($uid): string|RedirectResponse
{ {
$entity = parent::view_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->view_process($uid);
if (!$entity instanceof TrafficEntity) { if (!$entity instanceof TrafficEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->view_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
} }
protected function batchjob_process($uid, array $formDatas): TrafficEntity }
public function batchjob(): string|RedirectResponse
{ {
$entity = parent::batchjob_process($uid, $formDatas); try {
if (!$entity instanceof TrafficEntity) { // 사전작업 및 데이터 추출 초기화
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); list($uids, $selectedFields, $formDatas) = $this->batchjob_pre_process();
$this->service->getFormService()->setFormFields($selectedFields);
$this->service->getFormService()->setFormRules(__FUNCTION__, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($selectedFields);
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (ValidationException $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
return $entity;
} }
protected function batchjob_delete_process($uid): TrafficEntity return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
}
}
public function batchjob_delete(): string|RedirectResponse
{ {
$entity = $this->service->delete($uid); try {
if (!$entity instanceof TrafficEntity) { $uids = $this->batchjob_delete_pre_process();
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 TrafficEntity만 가능"); $entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
return $entity;
} }
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
public function index(): string|ResponseInterface
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->index_process($action);
$this->index_result_process($action);
} catch (\Exception $e) {
session()->setFlashdata('message', $e->getMessage());
}
return $this->index_result_process($action);
}
public function download(string $output_type, mixed $uid = false): DownloadResponse|RedirectResponse|string
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
}
}
//기본 함수 작업
//Custom 추가 함수
public function dashboard($uid): string public function dashboard($uid): string
{ {
$entity = $this->service->getEntity($uid); $entity = $this->service->getEntity($uid);

View File

@ -3,8 +3,11 @@
namespace App\Controllers\Admin; namespace App\Controllers\Admin;
use App\Entities\UserEntity; use App\Entities\UserEntity;
use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class UserController extends AdminController class UserController extends AdminController
@ -48,60 +51,163 @@ class UserController extends AdminController
$this->service->getFormService()->setBatchjobFilters($batchjobFilters); $this->service->getFormService()->setBatchjobFilters($batchjobFilters);
parent::action_init_process($action); parent::action_init_process($action);
} }
protected function create_process(): UserEntity public function create_form(): string|RedirectResponse
{ {
$entity = parent::create_process(); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->addViewDatas('formDatas', $this->create_form_process());
return $this->create_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
public function create(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->create_process();
if (!$entity instanceof UserEntity) { if (!$entity instanceof UserEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능");
} }
return $entity; return $this->create_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
} }
protected function modify_form_process($uid): UserEntity }
public function modify_form($uid): string|RedirectResponse
{ {
$entity = parent::modify_form_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_form_process($uid);
if (!$entity instanceof UserEntity) { if (!$entity instanceof UserEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_form_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
} }
protected function modify_process($uid): UserEntity }
public function modify($uid): string|RedirectResponse
{ {
$entity = parent::modify_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->modify_process($uid);
if (!$entity instanceof UserEntity) { if (!$entity instanceof UserEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->modify_result_process($entity);
} catch (ValidationException $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
} }
protected function delete_process($uid): UserEntity }
public function delete($uid): RedirectResponse
{ {
$entity = parent::delete_process($uid); try {
$entity = $this->delete_process($uid);
if (!$entity instanceof UserEntity) { if (!$entity instanceof UserEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능");
} }
return $entity; return $this->delete_result_process($entity);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
} }
protected function view_process($uid): UserEntity }
public function view($uid): string|RedirectResponse
{ {
$entity = parent::view_process($uid); try {
$action = __FUNCTION__;
$this->action_init_process($action);
$entity = $this->view_process($uid);
if (!$entity instanceof UserEntity) { if (!$entity instanceof UserEntity) {
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능");
} }
return $entity; $this->addViewDatas('entity', $entity);
return $this->view_result_process($action);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
} }
protected function batchjob_process($uid, array $formDatas): UserEntity }
public function batchjob(): string|RedirectResponse
{ {
$entity = parent::batchjob_process($uid, $formDatas); try {
if (!$entity instanceof UserEntity) { // 사전작업 및 데이터 추출 초기화
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); list($uids, $selectedFields, $formDatas) = $this->batchjob_pre_process();
$this->service->getFormService()->setFormFields($selectedFields);
$this->service->getFormService()->setFormRules(__FUNCTION__, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($selectedFields);
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (ValidationException $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
return $entity;
} }
protected function batchjob_delete_process($uid): UserEntity return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
}
}
public function batchjob_delete(): string|RedirectResponse
{ {
$entity = $this->service->delete($uid); try {
if (!$entity instanceof UserEntity) { $uids = $this->batchjob_delete_pre_process();
throw new \RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 UserEntity만 가능"); $entities = [];
} $errors = [];
return $entity; foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} }
} }
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
public function index(): string|ResponseInterface
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
$this->index_process($action);
$this->index_result_process($action);
} catch (\Exception $e) {
session()->setFlashdata('message', $e->getMessage());
}
return $this->index_result_process($action);
}
public function download(string $output_type, mixed $uid = false): DownloadResponse|RedirectResponse|string
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
}
}
//기본 함수 작업
//Custom 추가 함수
}

View File

@ -5,8 +5,6 @@ namespace App\Controllers;
use App\Entities\CommonEntity; use App\Entities\CommonEntity;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\Validation\Exceptions\ValidationException;
use CodeIgniter\HTTP\ResponseInterface;
use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Html; use PhpOffice\PhpSpreadsheet\Reader\Html;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf; use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
@ -87,7 +85,7 @@ abstract class CommonController extends AbstractCRUDController
/** /**
* Service에서 엔티티 목록을 가져와 처리합니다. (Override 가능) * Service에서 엔티티 목록을 가져와 처리합니다. (Override 가능)
*/ */
protected function index_process(array $entities = []): array protected function index_entities_process(array $entities = []): array
{ {
foreach ($this->service->getEntities() as $entity) { foreach ($this->service->getEntities() as $entity) {
$entities[] = $entity; $entities[] = $entity;
@ -95,9 +93,6 @@ abstract class CommonController extends AbstractCRUDController
return $entities; return $entities;
} }
/**
* HTML View 출력을 처리합니다. (Override 가능)
*/
protected function index_result_process(string $action): string protected function index_result_process(string $action): string
{ {
return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas()); return $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas());
@ -106,12 +101,10 @@ abstract class CommonController extends AbstractCRUDController
/** /**
* 인덱스(목록) 페이지의 메인 로직입니다. * 인덱스(목록) 페이지의 메인 로직입니다.
*/ */
final public function index(): string|ResponseInterface protected function index_process(string $action): void
{ {
$action = __FUNCTION__; // 현재 URL을 이전 URL 스택에 저장
try { $this->getAuthContext()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : ""));
// 초기화
$this->action_init_process($action);
$this->addViewDatas('uri', $this->request->getUri()); $this->addViewDatas('uri', $this->request->getUri());
// Paging 설정 // Paging 설정
@ -135,18 +128,9 @@ abstract class CommonController extends AbstractCRUDController
$this->service->setOffset(($page - 1) * $perpage); $this->service->setOffset(($page - 1) * $perpage);
// Entities 처리 // Entities 처리
$this->addViewDatas('entities', $this->index_process()); $this->addViewDatas('entities', $this->index_entities_process());
helper(['form']); helper(['form']);
$this->addViewDatas('formDatas', $this->request->getVar() ?? []); $this->addViewDatas('formDatas', $this->request->getVar() ?? []);
} catch (\Exception $e) {
session()->setFlashdata('message', $e->getMessage());
}
// 현재 URL을 이전 URL 스택에 저장
$this->getAuthContext()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : ""));
// HTML 뷰 렌더링
return $this->index_result_process($action);
} }
// --- 일괄 작업 (Batch Job) --- // --- 일괄 작업 (Batch Job) ---
@ -192,38 +176,6 @@ abstract class CommonController extends AbstractCRUDController
)); ));
} }
final public function batchjob(): string|RedirectResponse
{
try {
// 사전작업 및 데이터 추출
list($uids, $selectedFields, $formDatas) = $this->batchjob_pre_process();
// 초기화
$this->service->getFormService()->setFormFields($selectedFields);
$this->service->getFormService()->setFormRules(__FUNCTION__, $selectedFields);
$this->service->getFormService()->setFormFilters($selectedFields);
$this->service->getFormService()->setFormOptions($selectedFields);
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
} catch (ValidationException $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
$errors[] = $e->getMessage();
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
}
}
// --- 일괄 삭제 (Batch Job Delete) --- // --- 일괄 삭제 (Batch Job Delete) ---
protected function batchjob_delete_pre_process(): array protected function batchjob_delete_pre_process(): array
@ -257,27 +209,6 @@ abstract class CommonController extends AbstractCRUDController
return $this->service->delete($uid); return $this->service->delete($uid);
} }
final public function batchjob_delete(): string|RedirectResponse
{
try {
$uids = $this->batchjob_delete_pre_process();
$entities = [];
$errors = [];
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
} catch (\Exception $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_delete_result_process($uids, $entities, $errors);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
// --- 문서 다운로드 (Download) --- // --- 문서 다운로드 (Download) ---
protected function downloadByDocumentType(string $document_type, mixed $loaded_data): array protected function downloadByDocumentType(string $document_type, mixed $loaded_data): array
@ -308,7 +239,7 @@ abstract class CommonController extends AbstractCRUDController
helper(['form']); helper(['form']);
// 전체 목록을 다운로드하므로, 목록 조건절을 처리합니다. // 전체 목록을 다운로드하므로, 목록 조건절을 처리합니다.
$this->index_condition_process($action); $this->index_condition_process($action);
$this->addViewDatas('entities', $this->index_process()); $this->addViewDatas('entities', $this->index_entities_process());
// HTML로 렌더링된 내용을 가져옵니다. // HTML로 렌더링된 내용을 가져옵니다.
$html = $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas()); $html = $this->action_render_process($this->getActionPaths(), $action, $this->getViewDatas());
@ -337,18 +268,4 @@ abstract class CommonController extends AbstractCRUDController
} }
return $this->response->download($full_path, null)->setFileName($file_name); return $this->response->download($full_path, null)->setFileName($file_name);
} }
/**
* 최종 다운로드 액션입니다.
*/
final public function download(string $output_type, mixed $uid = false): DownloadResponse|RedirectResponse|string
{
$action = __FUNCTION__;
try {
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
} catch (\Exception $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
}
}
} }