From e5a9f6c86fb8f2e9d0a319c6a265a7c4a1244789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Thu, 6 Nov 2025 00:32:01 +0900 Subject: [PATCH] trafficmonitor init...2 --- app/Controllers/Admin/UserController.php | 55 ++---------- app/Controllers/Auth/AuthController.php | 19 ++--- app/Controllers/CommonController.php | 103 +++++++++++++++++++---- app/DTOs/AuthDTO.php | 1 - app/DTOs/UserDTO.php | 28 ++++++ app/Services/CommonService.php | 26 +----- 6 files changed, 128 insertions(+), 104 deletions(-) create mode 100644 app/DTOs/UserDTO.php diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index 9bb2a56..b04d9e4 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -2,6 +2,7 @@ namespace App\Controllers\Admin; +use App\DTOs\UserDTO; use App\Entities\UserEntity; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RequestInterface; @@ -35,53 +36,13 @@ class UserController extends AdminController return parent::getFormRule($action, $field, $rule); } //Index,FieldForm관련. - final public function profile_form(mixed $uid): RedirectResponse|string + protected function create_process(string $action, array $viewDatas): string|RedirectResponse { - try { - $this->getService()->setAction(__FUNCTION__); - $this->getService()->setFormFields(); - $this->getService()->setFormFilters(); - $this->getService()->setFormRules(); - $this->getService()->setFormOptions(); - //기본값정의 - $this->getService()->setFormDatas($this->request->getGet()); - //기존 Entity 가져오기 - $entity = $this->getService()->getEntity($uid); - if (!$entity instanceof UserEntity) { - throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); - } - $this->entity = $entity; - helper(['form']); - $this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []]; - return $this->getResultSuccess(); - } catch (\Exception $e) { - return $this->getResultFail($e->getMessage()); - } - } - final public function profile(int $uid): RedirectResponse|string - { - //Transaction Start - $db = \Config\Database::connect(); - $this->_db->transStart(); - try { - $this->getService()->setAction(__FUNCTION__); - $this->getService()->setFormFields(); - $this->getService()->setFormFilters(); - $this->getService()->setFormRules(); - //전달값정의 - $this->getService()->setFormDatas($this->request->getPost()); - $this->doValidations(); - //기존 Entity 가져오기 - $entity = $this->getService()->getEntity($uid); - if (!$entity instanceof UserEntity) { - throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); - } - $this->entity = $this->modify_process($entity, $this->getService()->getFormDatas()); - $this->_db->transCommit(); - return $this->getResultSuccess(); - } catch (\Exception $e) { - $this->_db->transRollback(); - return $this->getResultFail($e->getMessage()); - } + $dto = new UserDTO($this->request->getPost()); + $this->doValidation($action); + $entity = $this->service->create($dto); + return redirect() + ->route('admin/user/view', [$entity->getPK()]) + ->with('message', "{$entity->getTitle()} 계정이 등록되었습니다."); } } diff --git a/app/Controllers/Auth/AuthController.php b/app/Controllers/Auth/AuthController.php index f856dc0..9486a55 100644 --- a/app/Controllers/Auth/AuthController.php +++ b/app/Controllers/Auth/AuthController.php @@ -21,29 +21,22 @@ abstract class AuthController extends CommonController abstract protected function login_process(): UserEntity; abstract protected function logout_process(): void; //로그인화면 - public function login_form_process(array $viewDatas): array + public function login_form_process(array $viewDatas = []): array { return $viewDatas; } public function login_form(): string|RedirectResponse { try { - //기본값처리 - $initFormDatas = []; - //viewData처리 - $viewDatas = []; - $viewDatas['action'] = __FUNCTION__; - $viewDatas['formFields'] = $this->service->getFormFields(); - $viewDatas['formFilters'] = $this->service->getFormFilters(); - $viewDatas['formRules'] = $this->service->getFormRules(__FUNCTION__); - $viewDatas['formOptions'] = $this->service->getFormOptions(__FUNCTION__); - $viewDatas['formDatas'] = $initFormDatas; + //초기화 + $action = __FUNCTION__; + $viewDatas = $this->action_init_process($action); $viewDatas = $this->login_form_process($viewDatas); - return $this->form_post_process($viewDatas); + return $this->action_post_process($action, $viewDatas); } catch (\Exception $e) { $viewDatas['error'] = $e->getMessage(); //리디렉션 대신 폼 뷰를 다시 렌더링하도록 form_post_process 호출 - return $this->form_post_process($viewDatas); + return $this->action_post_process($action, $viewDatas); } } diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index 7f20dd2..b152102 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -60,26 +60,93 @@ abstract class CommonController extends BaseController } return array($field, $rule); } - protected function form_post_process(array $viewDatas): string + protected function action_init_process(string $action, array $viewDatas = []): array { - $paths = $this->getPaths(); - $self_path = array_pop($paths); - $view_path = implode(DIRECTORY_SEPARATOR, [ - ...$paths, - $this->request->getVar('ActionTemplate') ?? $self_path, - $viewDatas['action'] ?? 'index' - ]); - $view_datas = [ - 'control' => $viewDatas, - 'forms' => ['attributes' => ['method' => "post",], 'hiddens' => []], - ]; - helper(['form', __FUNCTION__]); - // echo $view_path; - // dd($viewDatas); - // echo "TEST"; - // exit; - return view($view_path, ['viewDatas' => $view_datas]); + $viewDatas['action'] = $action; + $viewDatas['view_paths'] = $this->getPaths(); + $viewDatas['view_file'] = $this->request->getVar('ActionTemplate') ?? $viewDatas['action']; + $viewDatas['formFields'] = $this->service->getFormFields(); + $viewDatas['formFilters'] = $this->service->getFormFilters(); + $viewDatas['formRules'] = $this->service->getFormRules($viewDatas['action']); + $viewDatas['formOptions'] = $this->service->getFormOptions($viewDatas['action']); + if (array_key_exists('formDatas', $viewDatas)) { + $viewDatas['formDatas'] = []; + } + return $viewDatas; } + protected function action_post_process(string $action, array $viewDatas): string|RedirectResponse + { + $view_paths = array_key_exists('view_paths', $viewDatas) ? $viewDatas['paths'] : $this->getPaths(); + $lastest_path = array_pop($view_paths); //paths는 마지막을 뺀 앞단까지만 남음 + switch ($action) { + case 'create_form': + case 'modify_form': + // ✅ 중간 안내 화면으로 + // return view('posts/success_redirect', [ + // 'message' => '게시글이 성공적으로 등록되었습니다.', + // 'redirectUrl' => route_to('posts_list') + // ]); + // 중요한 작업 (결제 완료, 오류 등) → “로딩 페이지(View)”로 안내 후 JS redirect + $full_path = implode(DIRECTORY_SEPARATOR, [ + ...$view_paths, + $this->request->getVar('ActionTemplate') ?? $lastest_path, + array_key_exists('view_file', $viewDatas) ? $viewDatas['view_file'] : $action + ]); + $view_datas = [ + 'control' => $viewDatas, + 'forms' => ['attributes' => ['method' => "post",], 'hiddens' => []], + ]; + helper(['form', __FUNCTION__]); + $result = view($full_path, ['viewDatas' => $view_datas]); + break; + default: + // ✅ Flashdata로 성공 메시지 저장 + // 일반 CRUD (create/update/delete) → Flashdata + redirect() + session()->setFlashdata('success', array_key_exists('message', $viewDatas) ?: static::class . "/{$action}이 완료되었습니다."); + $result = redirect()->route( + implode(DIRECTORY_SEPARATOR, $view_paths) + ); + break; + } + return $result; + } + protected function create_form_process(array $viewDatas): array + { + return $viewDatas; + } + public function create_form(): string|RedirectResponse + { + try { + //초기화 + $action = __FUNCTION__; + $viewDatas = ['formDatas' => []]; + $viewDatas = $this->action_init_process($action, $viewDatas); + $viewDatas = $this->create_form_process($viewDatas); + return $this->action_post_process($action, $viewDatas); + } catch (\Exception $e) { + $viewDatas['error'] = $e->getMessage(); + //리디렉션 대신 폼 뷰를 다시 렌더링하도록 form_post_process 호출 + return $this->action_post_process($action, $viewDatas); + } + } + protected function create_process(string $action, array $viewDatas): string|RedirectResponse + { + $this->doValidation($action); + return $this->action_post_process($action, $viewDatas); + } + public function create(): string|RedirectResponse + { + try { + //초기화 + $action = __FUNCTION__; + $viewDatas = ['formDatas' => $this->request->getPost()]; + $viewDatas = $this->action_init_process($action, $viewDatas); + return $this->create_process($action, $viewDatas); + } catch (\Exception $e) { + return redirect()->back()->withInput()->with('error', $e->getMessage()); + } + } + //리스트관련 //조건절 처리 // protected function index_condition_process(): void diff --git a/app/DTOs/AuthDTO.php b/app/DTOs/AuthDTO.php index b3a26f4..639cb21 100644 --- a/app/DTOs/AuthDTO.php +++ b/app/DTOs/AuthDTO.php @@ -2,7 +2,6 @@ namespace App\DTOs; -use App\DTOs\CommonDTO; use App\Services\Auth\AuthService; class AuthDTO extends CommonDTO diff --git a/app/DTOs/UserDTO.php b/app/DTOs/UserDTO.php new file mode 100644 index 0000000..3545d5b --- /dev/null +++ b/app/DTOs/UserDTO.php @@ -0,0 +1,28 @@ + $value) { + if (property_exists($this, $key)) { + $this->{$key} = $value; + } + } + } + + public function toArray(): array + { + return [ + 'uid' => $this->uid, + 'title' => $this->name, + 'role' => $this->role, + ]; + } +} diff --git a/app/Services/CommonService.php b/app/Services/CommonService.php index 7b8365b..e006cb1 100644 --- a/app/Services/CommonService.php +++ b/app/Services/CommonService.php @@ -2,6 +2,7 @@ namespace App\Services; +use CodeIgniter\HTTP\RedirectResponse; use App\Models\CommonModel; abstract class CommonService @@ -11,13 +12,6 @@ abstract class CommonService protected $formServiceInstance = null; protected function __construct(protected CommonModel $model) {} abstract public function getFormService(): mixed; - final public function getLogService(): MyLogService - { - if (!$this->_logService) { - $this->_logService = service('myLogService'); - } - return $this->_logService; - } final protected function addClassPath(string $className): void { $this->classPaths[] = $className; @@ -128,22 +122,6 @@ abstract class CommonService return $entities; } //Action관련 - public function create(array $formDatas): mixed - { - try { - $this->getService()->setAction(__FUNCTION__); - $this->getService()->setFormFields(); - //전달값정의 - $this->getService()->setFormDatas($this->request->getPost()); - $this->getService()->setFormFilters(); - $this->getService()->setFormRules(); - $this->doValidations(); - $this->entity = $this->create_process($this->getService()->getFormDatas()); - return $this->getResultSuccess(); - } catch (\Exception $e) { - return $this->getResultFail($e->getMessage()); - } - } //Index용 final public function getTotalCount(): int { @@ -159,8 +137,6 @@ abstract class CommonService { $this->model->offset($offset); } - //기본 기능부분 - //FormFilter 조건절 처리 public function index_condition_filterField(string $field, mixed $filter_value): void { switch ($field) {