Routes2.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. <?php
  2. use CodeIgniter\Router\RouteCollection;
  3. /**
  4. * @var RouteCollection $routes
  5. */
  6. // =============================================================================
  7. // Routes2.php - 파트너십 전용 라우팅 시스템 (완전 독립)
  8. // 기존 Routes.php와 별개로 동작하는 파트너십 전용 라우팅
  9. // =============================================================================
  10. $routes->group('api', function($routes) {
  11. // =============================================================================
  12. // 벤더사-인플루언서 파트너십 관리 API (완전 재설계)
  13. // =============================================================================
  14. $routes->group('vendor-influencer', function($routes) {
  15. // 벤더사용 API
  16. $routes->post('requests', 'PartnershipController::getInfluencerRequests', [
  17. 'as' => 'partnership.requests',
  18. 'filter' => 'cors'
  19. ]);
  20. $routes->post('approve', 'PartnershipController::processInfluencerRequest', [
  21. 'as' => 'partnership.approve',
  22. 'filter' => 'cors'
  23. ]);
  24. $routes->post('terminate', 'PartnershipController::terminatePartnership', [
  25. 'as' => 'partnership.terminate',
  26. 'filter' => 'cors'
  27. ]);
  28. // 인플루언서용 API
  29. $routes->post('search-vendors', 'PartnershipController::searchVendorsForInfluencer', [
  30. 'as' => 'partnership.search_vendors',
  31. 'filter' => 'cors'
  32. ]);
  33. $routes->post('create-request', 'PartnershipController::createPartnershipRequest', [
  34. 'as' => 'partnership.create_request',
  35. 'filter' => 'cors'
  36. ]);
  37. $routes->post('reapply-request', 'PartnershipController::createReapplyRequest', [
  38. 'as' => 'partnership.reapply_request',
  39. 'filter' => 'cors'
  40. ]);
  41. // 공용 API
  42. $routes->post('list', 'PartnershipController::getPartnershipList', [
  43. 'as' => 'partnership.list',
  44. 'filter' => 'cors'
  45. ]);
  46. $routes->post('detail/(:num)', 'PartnershipController::getPartnershipDetail/$1', [
  47. 'as' => 'partnership.detail',
  48. 'filter' => 'cors'
  49. ]);
  50. $routes->post('history/(:num)', 'PartnershipController::getPartnershipHistory/$1', [
  51. 'as' => 'partnership.history',
  52. 'filter' => 'cors'
  53. ]);
  54. $routes->post('stats/(:num)', 'PartnershipController::getPartnershipStats/$1', [
  55. 'as' => 'partnership.stats',
  56. 'filter' => 'cors'
  57. ]);
  58. // 관리용 API (개발/디버깅)
  59. $routes->get('debug/partnership/(:num)', 'PartnershipController::debugPartnership/$1', [
  60. 'as' => 'partnership.debug',
  61. 'filter' => 'cors'
  62. ]);
  63. $routes->get('debug/stats/(:num)', 'PartnershipController::getPartnershipStats/$1', [
  64. 'as' => 'partnership.debug_stats',
  65. 'filter' => 'cors'
  66. ]);
  67. $routes->get('debug/all', 'PartnershipController::debugAllPartnerships', [
  68. 'as' => 'partnership.debug_all',
  69. 'filter' => 'cors'
  70. ]);
  71. });
  72. // =============================================================================
  73. // 파트너십 대시보드 API (향후 확장)
  74. // =============================================================================
  75. $routes->group('partnership-dashboard', function($routes) {
  76. $routes->post('vendor/(:num)', 'PartnershipDashboardController::getVendorDashboard/$1', [
  77. 'as' => 'partnership_dashboard.vendor',
  78. 'filter' => 'cors'
  79. ]);
  80. $routes->post('influencer/(:num)', 'PartnershipDashboardController::getInfluencerDashboard/$1', [
  81. 'as' => 'partnership_dashboard.influencer',
  82. 'filter' => 'cors'
  83. ]);
  84. $routes->post('analytics', 'PartnershipDashboardController::getAnalytics', [
  85. 'as' => 'partnership_dashboard.analytics',
  86. 'filter' => 'cors'
  87. ]);
  88. });
  89. // =============================================================================
  90. // 파트너십 알림 API (향후 확장)
  91. // =============================================================================
  92. $routes->group('partnership-notifications', function($routes) {
  93. $routes->post('send', 'PartnershipNotificationController::sendNotification', [
  94. 'as' => 'partnership_notifications.send',
  95. 'filter' => 'cors'
  96. ]);
  97. $routes->post('list/(:num)', 'PartnershipNotificationController::getNotifications/$1', [
  98. 'as' => 'partnership_notifications.list',
  99. 'filter' => 'cors'
  100. ]);
  101. $routes->post('mark-read', 'PartnershipNotificationController::markAsRead', [
  102. 'as' => 'partnership_notifications.mark_read',
  103. 'filter' => 'cors'
  104. ]);
  105. });
  106. });
  107. // =============================================================================
  108. // 배송 관리 라우트 (api 그룹 외부)
  109. // =============================================================================
  110. $routes->post('deli/updateDeliveryInfo', 'Deli::updateDeliveryInfo');
  111. $routes->post('deli/shipping', 'Deli::getShippingList');
  112. $routes->post('deli/delivered', 'Deli::getDeliveredList');
  113. $routes->post('deli/markDelivered', 'Deli::markAsDelivered');
  114. $routes->post('deli/markSettled', 'Deli::markAsSettled');
  115. $routes->post('deli/settlement', 'Deli::getSettlementList');
  116. // =============================================================================
  117. // 파트너십 전용 웹 라우팅 (향후 확장)
  118. // =============================================================================
  119. $routes->group('partnership', function($routes) {
  120. // 파트너십 전용 대시보드 페이지 (향후 구현)
  121. $routes->get('dashboard/vendor/(:num)', 'PartnershipWebController::vendorDashboard/$1', [
  122. 'as' => 'partnership_web.vendor_dashboard'
  123. ]);
  124. $routes->get('dashboard/influencer/(:num)', 'PartnershipWebController::influencerDashboard/$1', [
  125. 'as' => 'partnership_web.influencer_dashboard'
  126. ]);
  127. $routes->get('analytics', 'PartnershipWebController::analytics', [
  128. 'as' => 'partnership_web.analytics'
  129. ]);
  130. // 파트너십 관리 페이지
  131. $routes->get('manage', 'PartnershipWebController::manage', [
  132. 'as' => 'partnership_web.manage'
  133. ]);
  134. $routes->get('settings', 'PartnershipWebController::settings', [
  135. 'as' => 'partnership_web.settings'
  136. ]);
  137. });
  138. // =============================================================================
  139. // 파트너십 시스템 헬스체크 및 문서
  140. // =============================================================================
  141. $routes->group('health', function($routes) {
  142. // 파트너십 시스템 헬스체크
  143. $routes->get('partnership', function() {
  144. return service('response')->setJSON([
  145. 'status' => 'OK',
  146. 'message' => 'Partnership System (Routes2.php) is healthy',
  147. 'timestamp' => date('Y-m-d H:i:s'),
  148. 'version' => '2.0',
  149. 'system' => 'Routes2.php - Independent Partnership System',
  150. 'api_endpoints' => [
  151. 'vendor_apis' => [
  152. 'POST /api/vendor-influencer/requests',
  153. 'POST /api/vendor-influencer/approve',
  154. 'POST /api/vendor-influencer/terminate'
  155. ],
  156. 'influencer_apis' => [
  157. 'POST /api/vendor-influencer/search-vendors',
  158. 'POST /api/vendor-influencer/create-request',
  159. 'POST /api/vendor-influencer/reapply-request'
  160. ],
  161. 'common_apis' => [
  162. 'POST /api/vendor-influencer/list',
  163. 'POST /api/vendor-influencer/detail/{id}',
  164. 'POST /api/vendor-influencer/history/{id}',
  165. 'POST /api/vendor-influencer/stats/{id}'
  166. ],
  167. 'debug_apis' => [
  168. 'GET /api/vendor-influencer/debug/partnership/{id}',
  169. 'GET /api/vendor-influencer/debug/stats/{id}',
  170. 'GET /api/vendor-influencer/debug/all'
  171. ]
  172. ],
  173. 'database' => [
  174. 'table' => 'VENDOR_INFLUENCER_PARTNERSHIP',
  175. 'model' => 'VendorInfluencerPartnershipModel',
  176. 'controller' => 'PartnershipController'
  177. ]
  178. ]);
  179. }, ['as' => 'health.partnership']);
  180. // 파트너십 API 문서
  181. $routes->get('partnership/docs', function() {
  182. return service('response')->setJSON([
  183. 'title' => 'Partnership API Documentation (Routes2.php)',
  184. 'description' => '벤더사-인플루언서 파트너십 관리 API 문서',
  185. 'version' => '2.0',
  186. 'base_url' => base_url('api/vendor-influencer'),
  187. 'authentication' => 'Bearer Token (JWT)',
  188. 'endpoints' => [
  189. [
  190. 'method' => 'POST',
  191. 'path' => '/requests',
  192. 'description' => '벤더사의 인플루언서 요청 목록 조회',
  193. 'parameters' => [
  194. 'vendorSeq' => 'integer (required)',
  195. 'status' => 'string (optional)',
  196. 'keyword' => 'string (optional)',
  197. 'page' => 'integer (optional)',
  198. 'size' => 'integer (optional)'
  199. ]
  200. ],
  201. [
  202. 'method' => 'POST',
  203. 'path' => '/approve',
  204. 'description' => '파트너십 승인/거부 처리',
  205. 'parameters' => [
  206. 'mappingSeq' => 'integer (required)',
  207. 'action' => 'string (required) - APPROVE|REJECT',
  208. 'processedBy' => 'integer (required)',
  209. 'responseMessage' => 'string (optional)'
  210. ]
  211. ],
  212. [
  213. 'method' => 'POST',
  214. 'path' => '/terminate',
  215. 'description' => '파트너십 해지 처리',
  216. 'parameters' => [
  217. 'mappingSeq' => 'integer (required)',
  218. 'terminatedBy' => 'integer (required)',
  219. 'terminateReason' => 'string (optional)'
  220. ]
  221. ],
  222. [
  223. 'method' => 'POST',
  224. 'path' => '/search-vendors',
  225. 'description' => '인플루언서의 벤더사 검색',
  226. 'parameters' => [
  227. 'influencerSeq' => 'integer (required)',
  228. 'keyword' => 'string (optional)',
  229. 'category' => 'string (optional)',
  230. 'page' => 'integer (optional)',
  231. 'size' => 'integer (optional)'
  232. ]
  233. ],
  234. [
  235. 'method' => 'POST',
  236. 'path' => '/create-request',
  237. 'description' => '파트너십 요청 생성',
  238. 'parameters' => [
  239. 'vendorSeq' => 'integer (required)',
  240. 'influencerSeq' => 'integer (required)',
  241. 'requestMessage' => 'string (optional)',
  242. 'commissionRate' => 'decimal (optional)',
  243. 'specialConditions' => 'string (optional)'
  244. ]
  245. ],
  246. [
  247. 'method' => 'POST',
  248. 'path' => '/reapply-request',
  249. 'description' => '재승인 요청 생성',
  250. 'parameters' => [
  251. 'vendorSeq' => 'integer (required)',
  252. 'influencerSeq' => 'integer (required)',
  253. 'requestMessage' => 'string (optional)',
  254. 'commissionRate' => 'decimal (optional)',
  255. 'specialConditions' => 'string (optional)'
  256. ]
  257. ]
  258. ]
  259. ]);
  260. }, ['as' => 'health.partnership_docs']);
  261. });
  262. // =============================================================================
  263. // Routes2.php 정보 및 관리
  264. // =============================================================================
  265. $routes->get('routes2', function() {
  266. return service('response')->setJSON([
  267. 'title' => 'Routes2.php - Independent Partnership Routing System',
  268. 'description' => '기존 Routes.php와 독립적으로 운영되는 파트너십 전용 라우팅 시스템',
  269. 'version' => '2.0',
  270. 'created' => '2024-12-22',
  271. 'features' => [
  272. '완전 독립적인 파트너십 라우팅',
  273. '기존 시스템과 충돌 없음',
  274. '확장 가능한 구조',
  275. '개발자 친화적 디버깅 도구',
  276. '자동 API 문서화'
  277. ],
  278. 'routes_count' => [
  279. 'api_routes' => 12,
  280. 'web_routes' => 5,
  281. 'health_routes' => 2,
  282. 'debug_routes' => 3
  283. ],
  284. 'health_check' => base_url('health/partnership'),
  285. 'api_docs' => base_url('health/partnership/docs'),
  286. 'status' => 'Active and Independent'
  287. ]);
  288. }, ['as' => 'routes2.info']);