dbmsv3 init...1
This commit is contained in:
parent
7298defef6
commit
a17fade55d
@ -5,8 +5,9 @@ namespace App\Services;
|
|||||||
use App\Helpers\CommonHelper;
|
use App\Helpers\CommonHelper;
|
||||||
use App\Models\CommonModel;
|
use App\Models\CommonModel;
|
||||||
use App\Services\Customer\ClientService;
|
use App\Services\Customer\ClientService;
|
||||||
use App\Services\UserService;
|
|
||||||
use App\Services\MyLogService;
|
use App\Services\MyLogService;
|
||||||
|
use App\Services\UserService;
|
||||||
|
use CodeIgniter\Database\Exceptions\DatabaseException;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
abstract class CommonService
|
abstract class CommonService
|
||||||
@ -307,22 +308,25 @@ abstract class CommonService
|
|||||||
public function create(array $formDatas): mixed
|
public function create(array $formDatas): mixed
|
||||||
{
|
{
|
||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$db->transStart();
|
|
||||||
try {
|
try {
|
||||||
|
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
|
||||||
|
$db->transException(true)->transStart();
|
||||||
$entity = $this->create_process($formDatas);
|
$entity = $this->create_process($formDatas);
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
if ($db->transStatus() === false) {
|
|
||||||
throw new RuntimeException('트랜잭션 실패: DB 상태 문제');
|
|
||||||
}
|
|
||||||
return $entity;
|
return $entity;
|
||||||
} catch (\Throwable $e) {
|
} catch (DatabaseException $e) {
|
||||||
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
// DatabaseException을 포착하면 자동으로 롤백 처리됨
|
||||||
|
// 이 예외 객체($e)에 실패한 쿼리 정보가 포함됨
|
||||||
|
// 예외 메시지에 쿼리 정보 포함시키기
|
||||||
throw new RuntimeException(sprintf(
|
throw new RuntimeException(sprintf(
|
||||||
"\n------%s-----\n%s\n%s\n------------------------------\n",
|
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
$this->getModel()->getLastQuery(),
|
$this->getModel()->getLastQuery(),
|
||||||
$e->getMessage()
|
$e->getMessage()
|
||||||
), 0, $e);
|
), $e->getCode(), $e);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
||||||
|
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//수정
|
//수정
|
||||||
@ -333,22 +337,22 @@ abstract class CommonService
|
|||||||
public function modify(mixed $entity, array $formDatas): mixed
|
public function modify(mixed $entity, array $formDatas): mixed
|
||||||
{
|
{
|
||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$db->transStart();
|
|
||||||
try {
|
try {
|
||||||
|
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
|
||||||
|
$db->transException(true)->transStart();
|
||||||
$entity = $this->modify_process($entity, $formDatas);
|
$entity = $this->modify_process($entity, $formDatas);
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
if ($db->transStatus() === false) {
|
|
||||||
throw new RuntimeException('트랜잭션 실패: DB 상태 문제');
|
|
||||||
}
|
|
||||||
return $entity;
|
return $entity;
|
||||||
} catch (\Throwable $e) {
|
} catch (DatabaseException $e) { //DB 오류시 발생
|
||||||
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
|
||||||
throw new RuntimeException(sprintf(
|
throw new RuntimeException(sprintf(
|
||||||
"\n------%s-----\n%s\n%s\n------------------------------\n",
|
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
$this->getModel()->getLastQuery(),
|
$this->getModel()->getLastQuery(),
|
||||||
$e->getMessage()
|
$e->getMessage()
|
||||||
), 0, $e);
|
), $e->getCode(), $e);
|
||||||
|
} catch (\Throwable $e) { // 그 외 다른 종류의 예외 처리
|
||||||
|
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
||||||
|
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//단일작업
|
//단일작업
|
||||||
@ -359,22 +363,22 @@ abstract class CommonService
|
|||||||
public function toggle(mixed $entity, array $formDatas): mixed
|
public function toggle(mixed $entity, array $formDatas): mixed
|
||||||
{
|
{
|
||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$db->transStart();
|
|
||||||
try {
|
try {
|
||||||
|
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
|
||||||
|
$db->transException(true)->transStart();
|
||||||
$entity = $this->toggle_process($entity, $formDatas);
|
$entity = $this->toggle_process($entity, $formDatas);
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
if ($db->transStatus() === false) {
|
|
||||||
throw new RuntimeException('트랜잭션 실패: DB 상태 문제');
|
|
||||||
}
|
|
||||||
return $entity;
|
return $entity;
|
||||||
} catch (\Throwable $e) {
|
} catch (DatabaseException $e) { //DB 오류시 발생
|
||||||
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
|
||||||
throw new RuntimeException(sprintf(
|
throw new RuntimeException(sprintf(
|
||||||
"\n------%s-----\n%s\n%s\n------------------------------\n",
|
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
$this->getModel()->getLastQuery(),
|
$this->getModel()->getLastQuery(),
|
||||||
$e->getMessage()
|
$e->getMessage()
|
||||||
), 0, $e);
|
), $e->getCode(), $e);
|
||||||
|
} catch (\Throwable $e) { // 그 외 다른 종류의 예외 처리
|
||||||
|
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
||||||
|
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//일괄처리작업
|
//일괄처리작업
|
||||||
@ -385,50 +389,53 @@ abstract class CommonService
|
|||||||
public function batchjob(mixed $entity, array $formDatas): mixed
|
public function batchjob(mixed $entity, array $formDatas): mixed
|
||||||
{
|
{
|
||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$db->transStart();
|
|
||||||
try {
|
try {
|
||||||
|
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
|
||||||
|
$db->transException(true)->transStart();
|
||||||
$entity = $this->batchjob_process($entity, $formDatas);
|
$entity = $this->batchjob_process($entity, $formDatas);
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
if ($db->transStatus() === false) {
|
|
||||||
throw new RuntimeException('트랜잭션 실패: DB 상태 문제');
|
|
||||||
}
|
|
||||||
return $entity;
|
return $entity;
|
||||||
} catch (\Throwable $e) {
|
} catch (DatabaseException $e) { //DB 오류시 발생
|
||||||
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
|
||||||
throw new RuntimeException(sprintf(
|
throw new RuntimeException(sprintf(
|
||||||
"\n------%s-----\n%s\n%s\n------------------------------\n",
|
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
$this->getModel()->getLastQuery(),
|
$this->getModel()->getLastQuery(),
|
||||||
$e->getMessage()
|
$e->getMessage()
|
||||||
), 0, $e);
|
), $e->getCode(), $e);
|
||||||
|
} catch (\Throwable $e) { // 그 외 다른 종류의 예외 처리
|
||||||
|
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
||||||
|
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//삭제
|
//삭제
|
||||||
protected function delete_process(string $uid): bool
|
protected function delete_process(string $uid): void
|
||||||
{
|
{
|
||||||
return $this->getModel()->delete($uid);
|
if (!$this->getModel()->delete($uid)) {
|
||||||
|
// delete() 메서드 실패 시 모델의 errors()를 통해 상세 정보 확인
|
||||||
|
$errors = $this->getModel()->errors();
|
||||||
|
throw new RuntimeException("모델 삭제 실패: " . var_export($errors, true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public function delete(mixed $entity): mixed
|
public function delete(mixed $entity): mixed
|
||||||
{
|
{
|
||||||
$db = \Config\Database::connect();
|
$db = \Config\Database::connect();
|
||||||
$db->transStart();
|
$db->transStart();
|
||||||
try {
|
try {
|
||||||
if (!$this->delete_process($entity->getPK())) {
|
//트랜잭션 도중 DB 오류가 발생하면 DatabaseException을 던지도록 설정
|
||||||
throw new RuntimeException(var_export($this->getModel()->errors(), true));
|
$db->transException(true)->transStart();
|
||||||
}
|
$this->delete_process($entity->getPK());
|
||||||
$db->transComplete();
|
$db->transComplete();
|
||||||
if ($db->transStatus() === false) {
|
|
||||||
throw new RuntimeException('트랜잭션 실패: DB 상태 문제');
|
|
||||||
}
|
|
||||||
return $entity;
|
return $entity;
|
||||||
} catch (\Throwable $e) {
|
} catch (DatabaseException $e) { //DB 오류시 발생
|
||||||
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
|
||||||
throw new RuntimeException(sprintf(
|
throw new RuntimeException(sprintf(
|
||||||
"\n------%s-----\n%s\n%s\n------------------------------\n",
|
"\n----[%s]에서 트랜잭션 실패: DB 오류----\n%s\n%s\n------------------------------\n",
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
$this->getModel()->getLastQuery(),
|
$this->getModel()->getLastQuery(),
|
||||||
$e->getMessage()
|
$e->getMessage()
|
||||||
), 0, $e);
|
), $e->getCode(), $e);
|
||||||
|
} catch (\Throwable $e) { // 그 외 다른 종류의 예외 처리
|
||||||
|
$db->transRollback(); // 예외 발생 시 수동으로 롤백
|
||||||
|
throw new RuntimeException($e->getMessage(), 0, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
////Index 검색용
|
////Index 검색용
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user