Routes2.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  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. $routes->post('deli/pendingOrdersForVendor', 'Deli::getPendingOrdersForVendor');
  117. $routes->post('deli/updateStatus', 'Deli::updateStatus');
  118. // =============================================================================
  119. // 파트너십 전용 웹 라우팅 (향후 확장)
  120. // =============================================================================
  121. $routes->group('partnership', function($routes) {
  122. // 파트너십 전용 대시보드 페이지 (향후 구현)
  123. $routes->get('dashboard/vendor/(:num)', 'PartnershipWebController::vendorDashboard/$1', [
  124. 'as' => 'partnership_web.vendor_dashboard'
  125. ]);
  126. $routes->get('dashboard/influencer/(:num)', 'PartnershipWebController::influencerDashboard/$1', [
  127. 'as' => 'partnership_web.influencer_dashboard'
  128. ]);
  129. $routes->get('analytics', 'PartnershipWebController::analytics', [
  130. 'as' => 'partnership_web.analytics'
  131. ]);
  132. // 파트너십 관리 페이지
  133. $routes->get('manage', 'PartnershipWebController::manage', [
  134. 'as' => 'partnership_web.manage'
  135. ]);
  136. $routes->get('settings', 'PartnershipWebController::settings', [
  137. 'as' => 'partnership_web.settings'
  138. ]);
  139. });
  140. // =============================================================================
  141. // 파트너십 시스템 헬스체크 및 문서
  142. // =============================================================================
  143. $routes->group('health', function($routes) {
  144. // 파트너십 시스템 헬스체크
  145. $routes->get('partnership', function() {
  146. return service('response')->setJSON([
  147. 'status' => 'OK',
  148. 'message' => 'Partnership System (Routes2.php) is healthy',
  149. 'timestamp' => date('Y-m-d H:i:s'),
  150. 'version' => '2.0',
  151. 'system' => 'Routes2.php - Independent Partnership System',
  152. 'api_endpoints' => [
  153. 'vendor_apis' => [
  154. 'POST /api/vendor-influencer/requests',
  155. 'POST /api/vendor-influencer/approve',
  156. 'POST /api/vendor-influencer/terminate'
  157. ],
  158. 'influencer_apis' => [
  159. 'POST /api/vendor-influencer/search-vendors',
  160. 'POST /api/vendor-influencer/create-request',
  161. 'POST /api/vendor-influencer/reapply-request'
  162. ],
  163. 'common_apis' => [
  164. 'POST /api/vendor-influencer/list',
  165. 'POST /api/vendor-influencer/detail/{id}',
  166. 'POST /api/vendor-influencer/history/{id}',
  167. 'POST /api/vendor-influencer/stats/{id}'
  168. ],
  169. 'debug_apis' => [
  170. 'GET /api/vendor-influencer/debug/partnership/{id}',
  171. 'GET /api/vendor-influencer/debug/stats/{id}',
  172. 'GET /api/vendor-influencer/debug/all'
  173. ]
  174. ],
  175. 'database' => [
  176. 'table' => 'VENDOR_INFLUENCER_PARTNERSHIP',
  177. 'model' => 'VendorInfluencerPartnershipModel',
  178. 'controller' => 'PartnershipController'
  179. ]
  180. ]);
  181. }, ['as' => 'health.partnership']);
  182. // 파트너십 API 문서
  183. $routes->get('partnership/docs', function() {
  184. return service('response')->setJSON([
  185. 'title' => 'Partnership API Documentation (Routes2.php)',
  186. 'description' => '벤더사-인플루언서 파트너십 관리 API 문서',
  187. 'version' => '2.0',
  188. 'base_url' => base_url('api/vendor-influencer'),
  189. 'authentication' => 'Bearer Token (JWT)',
  190. 'endpoints' => [
  191. [
  192. 'method' => 'POST',
  193. 'path' => '/requests',
  194. 'description' => '벤더사의 인플루언서 요청 목록 조회',
  195. 'parameters' => [
  196. 'vendorSeq' => 'integer (required)',
  197. 'status' => 'string (optional)',
  198. 'keyword' => 'string (optional)',
  199. 'page' => 'integer (optional)',
  200. 'size' => 'integer (optional)'
  201. ]
  202. ],
  203. [
  204. 'method' => 'POST',
  205. 'path' => '/approve',
  206. 'description' => '파트너십 승인/거부 처리',
  207. 'parameters' => [
  208. 'mappingSeq' => 'integer (required)',
  209. 'action' => 'string (required) - APPROVE|REJECT',
  210. 'processedBy' => 'integer (required)',
  211. 'responseMessage' => 'string (optional)'
  212. ]
  213. ],
  214. [
  215. 'method' => 'POST',
  216. 'path' => '/terminate',
  217. 'description' => '파트너십 해지 처리',
  218. 'parameters' => [
  219. 'mappingSeq' => 'integer (required)',
  220. 'terminatedBy' => 'integer (required)',
  221. 'terminateReason' => 'string (optional)'
  222. ]
  223. ],
  224. [
  225. 'method' => 'POST',
  226. 'path' => '/search-vendors',
  227. 'description' => '인플루언서의 벤더사 검색',
  228. 'parameters' => [
  229. 'influencerSeq' => 'integer (required)',
  230. 'keyword' => 'string (optional)',
  231. 'category' => 'string (optional)',
  232. 'page' => 'integer (optional)',
  233. 'size' => 'integer (optional)'
  234. ]
  235. ],
  236. [
  237. 'method' => 'POST',
  238. 'path' => '/create-request',
  239. 'description' => '파트너십 요청 생성',
  240. 'parameters' => [
  241. 'vendorSeq' => 'integer (required)',
  242. 'influencerSeq' => 'integer (required)',
  243. 'requestMessage' => 'string (optional)',
  244. 'commissionRate' => 'decimal (optional)',
  245. 'specialConditions' => 'string (optional)'
  246. ]
  247. ],
  248. [
  249. 'method' => 'POST',
  250. 'path' => '/reapply-request',
  251. 'description' => '재승인 요청 생성',
  252. 'parameters' => [
  253. 'vendorSeq' => 'integer (required)',
  254. 'influencerSeq' => 'integer (required)',
  255. 'requestMessage' => 'string (optional)',
  256. 'commissionRate' => 'decimal (optional)',
  257. 'specialConditions' => 'string (optional)'
  258. ]
  259. ]
  260. ]
  261. ]);
  262. }, ['as' => 'health.partnership_docs']);
  263. });
  264. // =============================================================================
  265. // Routes2.php 정보 및 관리
  266. // =============================================================================
  267. $routes->get('routes2', function() {
  268. return service('response')->setJSON([
  269. 'title' => 'Routes2.php - Independent Partnership Routing System',
  270. 'description' => '기존 Routes.php와 독립적으로 운영되는 파트너십 전용 라우팅 시스템',
  271. 'version' => '2.0',
  272. 'created' => '2024-12-22',
  273. 'features' => [
  274. '완전 독립적인 파트너십 라우팅',
  275. '기존 시스템과 충돌 없음',
  276. '확장 가능한 구조',
  277. '개발자 친화적 디버깅 도구',
  278. '자동 API 문서화'
  279. ],
  280. 'routes_count' => [
  281. 'api_routes' => 12,
  282. 'web_routes' => 5,
  283. 'health_routes' => 2,
  284. 'debug_routes' => 3
  285. ],
  286. 'health_check' => base_url('health/partnership'),
  287. 'api_docs' => base_url('health/partnership/docs'),
  288. 'status' => 'Active and Independent'
  289. ]);
  290. }, ['as' => 'routes2.info']);