| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- namespace App\Models;
- use CodeIgniter\Model;
- class VendorInfluencerMappingModel extends Model
- {
- protected $table = 'VENDOR_INFLUENCER_MAPPING';
- protected $primaryKey = 'SEQ';
- protected $useAutoIncrement = true;
- protected $returnType = 'array';
- protected $useSoftDeletes = false;
-
- protected $allowedFields = [
- 'VENDOR_SEQ',
- 'INFLUENCER_SEQ',
- 'REQUEST_TYPE',
- 'STATUS',
- 'REQUEST_MESSAGE',
- 'RESPONSE_MESSAGE',
- 'REQUESTED_BY',
- 'APPROVED_BY',
- 'COMMISSION_RATE',
- 'SPECIAL_CONDITIONS',
- 'EXPIRED_DATE',
- 'REQUEST_DATE',
- 'RESPONSE_DATE',
- 'REG_DATE',
- 'MOD_DATE',
- 'IS_ACT'
- ];
-
- protected $useTimestamps = true;
- protected $createdField = 'REG_DATE';
- protected $updatedField = 'MOD_DATE';
-
- protected $validationRules = [
- 'VENDOR_SEQ' => 'required|integer',
- 'INFLUENCER_SEQ' => 'required|integer',
- 'REQUEST_TYPE' => 'required|in_list[INFLUENCER_REQUEST,VENDOR_REQUEST]',
- 'STATUS' => 'required|in_list[PENDING,APPROVED,REJECTED,CANCELLED,EXPIRED]',
- 'REQUESTED_BY' => 'required|integer',
- ];
-
- protected $validationMessages = [
- 'VENDOR_SEQ' => [
- 'required' => '벤더 SEQ는 필수입니다.',
- 'integer' => '벤더 SEQ는 숫자여야 합니다.'
- ],
- 'INFLUENCER_SEQ' => [
- 'required' => '인플루언서 SEQ는 필수입니다.',
- 'integer' => '인플루언서 SEQ는 숫자여야 합니다.'
- ],
- 'REQUEST_TYPE' => [
- 'required' => '요청 타입은 필수입니다.',
- 'in_list' => '유효하지 않은 요청 타입입니다.'
- ],
- 'STATUS' => [
- 'required' => '상태는 필수입니다.',
- 'in_list' => '유효하지 않은 상태입니다.'
- ],
- 'REQUESTED_BY' => [
- 'required' => '요청자는 필수입니다.',
- 'integer' => '요청자는 숫자여야 합니다.'
- ]
- ];
-
- protected $skipValidation = false;
- protected $cleanValidationRules = true;
-
- /**
- * 만료된 요청들을 처리
- */
- public function processExpiredRequests()
- {
- return $this->where('STATUS', 'PENDING')
- ->where('EXPIRED_DATE <', date('Y-m-d H:i:s'))
- ->where('IS_ACT', 'Y')
- ->set([
- 'STATUS' => 'EXPIRED',
- 'MOD_DATE' => date('Y-m-d H:i:s')
- ])
- ->update();
- }
-
- /**
- * 특정 벤더-인플루언서 조합의 활성 요청 확인
- */
- public function getActiveRequest($vendorSeq, $influencerSeq)
- {
- return $this->where('VENDOR_SEQ', $vendorSeq)
- ->where('INFLUENCER_SEQ', $influencerSeq)
- ->where('STATUS', 'PENDING')
- ->where('IS_ACT', 'Y')
- ->first();
- }
-
- /**
- * 사용자의 요청 목록 조회
- */
- public function getUserRequests($userSeq, $asInfluencer = true, $status = null)
- {
- $field = $asInfluencer ? 'INFLUENCER_SEQ' : 'VENDOR_SEQ';
-
- $builder = $this->where($field, $userSeq)
- ->where('IS_ACT', 'Y');
-
- if ($status) {
- $builder->where('STATUS', $status);
- }
-
- return $builder->findAll();
- }
-
- /**
- * 벤더사별 승인요청 통계
- */
- public function getVendorRequestStats($vendorSeq)
- {
- $builder = $this->where('VENDOR_SEQ', $vendorSeq)
- ->where('IS_ACT', 'Y');
-
- return [
- 'pending' => $builder->where('STATUS', 'PENDING')->countAllResults(false),
- 'approved' => $builder->where('STATUS', 'APPROVED')->countAllResults(false),
- 'rejected' => $builder->where('STATUS', 'REJECTED')->countAllResults(false),
- 'total' => $builder->countAllResults()
- ];
- }
-
- /**
- * 인플루언서별 요청 통계
- */
- public function getInfluencerRequestStats($influencerSeq)
- {
- $builder = $this->where('INFLUENCER_SEQ', $influencerSeq)
- ->where('IS_ACT', 'Y');
-
- return [
- 'pending' => $builder->where('STATUS', 'PENDING')->countAllResults(false),
- 'approved' => $builder->where('STATUS', 'APPROVED')->countAllResults(false),
- 'rejected' => $builder->where('STATUS', 'REJECTED')->countAllResults(false),
- 'total' => $builder->countAllResults()
- ];
- }
- }
|