'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() ]; } }