ai-first-cli 1.3.0 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/.ai-dev/index.db +0 -0
  2. package/.github/workflows/publish.yml +4 -1
  3. package/BETA_EVALUATION_REPORT.md +151 -0
  4. package/CHANGELOG.md +178 -0
  5. package/PHASE1_USER_SIMULATION.md +56 -0
  6. package/PHASE2_USER_SIMULATION.md +81 -0
  7. package/PHASE3_USER_SIMULATION.md +176 -0
  8. package/README.es.md +18 -0
  9. package/README.md +80 -1
  10. package/ai/graph/knowledge-graph.json +10 -0
  11. package/ai-context/ai_context.md +130 -0
  12. package/{test-projects/react-app/.ai-dev → ai-context}/ai_rules.md +10 -5
  13. package/ai-context/architecture.md +136 -0
  14. package/ai-context/context/features/src.json +69 -0
  15. package/ai-context/context/features/test-projects.json +69 -0
  16. package/ai-context/context/flows/App.json +17 -0
  17. package/ai-context/context/flows/DashboardPage.json +14 -0
  18. package/ai-context/context/flows/LoginPage.json +14 -0
  19. package/ai-context/context/flows/admin.json +10 -0
  20. package/ai-context/context/flows/ai-first.json +9 -0
  21. package/ai-context/context/flows/androidresources.json +11 -0
  22. package/ai-context/context/flows/auth.json +13 -0
  23. package/ai-context/context/flows/authController.json +14 -0
  24. package/ai-context/context/flows/doctor.json +9 -0
  25. package/ai-context/context/flows/entrypoints.json +9 -0
  26. package/ai-context/context/flows/explore.json +9 -0
  27. package/ai-context/context/flows/fastapiAdapter.json +14 -0
  28. package/ai-context/context/flows/fastapiadapter.json +11 -0
  29. package/ai-context/context/flows/index.json +19 -0
  30. package/ai-context/context/flows/indexer.json +9 -0
  31. package/ai-context/context/flows/indexstate.json +9 -0
  32. package/ai-context/context/flows/init.json +22 -0
  33. package/ai-context/context/flows/main.json +18 -0
  34. package/ai-context/context/flows/mainactivity.json +9 -0
  35. package/ai-context/context/flows/models.json +15 -0
  36. package/ai-context/context/flows/posts.json +15 -0
  37. package/ai-context/context/flows/repoMapper.json +20 -0
  38. package/ai-context/context/flows/repomapper.json +11 -0
  39. package/ai-context/context/flows/routes.json +15 -0
  40. package/ai-context/context/flows/serializers.json +10 -0
  41. package/ai-context/context/flows/user.json +23 -0
  42. package/ai-context/context/flows/views.json +12 -0
  43. package/{test-projects/react-app/.ai-dev → ai-context}/conventions.md +3 -2
  44. package/ai-context/dependencies.json +3360 -0
  45. package/ai-context/entrypoints.md +45 -0
  46. package/ai-context/index-state.json +196 -0
  47. package/ai-context/modules.json +901 -0
  48. package/ai-context/project.json +33 -0
  49. package/ai-context/repo_map.json +8857 -0
  50. package/ai-context/repo_map.md +2002 -0
  51. package/{test-projects/flask-app/.ai-dev → ai-context}/schema.json +1 -1
  52. package/ai-context/summary.md +46 -0
  53. package/ai-context/symbols.json +82467 -0
  54. package/{test-projects/react-app/.ai-dev → ai-context}/tech_stack.md +15 -7
  55. package/ai-context-evaluation-report-1774223059505.md +206 -0
  56. package/dist/analyzers/architecture.d.ts.map +1 -1
  57. package/dist/analyzers/architecture.js +6 -0
  58. package/dist/analyzers/architecture.js.map +1 -1
  59. package/dist/analyzers/entrypoints.d.ts.map +1 -1
  60. package/dist/analyzers/entrypoints.js +105 -0
  61. package/dist/analyzers/entrypoints.js.map +1 -1
  62. package/dist/analyzers/symbols.d.ts.map +1 -1
  63. package/dist/analyzers/symbols.js +72 -1
  64. package/dist/analyzers/symbols.js.map +1 -1
  65. package/dist/analyzers/techStack.d.ts +8 -0
  66. package/dist/analyzers/techStack.d.ts.map +1 -1
  67. package/dist/analyzers/techStack.js +75 -0
  68. package/dist/analyzers/techStack.js.map +1 -1
  69. package/dist/scripts/ai-context-evaluator.js +367 -0
  70. package/package.json +1 -1
  71. package/quick-evaluation-report-1774396002305.md +64 -0
  72. package/quick-evaluator.ts +200 -0
  73. package/scripts/ai-context-evaluator.ts +440 -0
  74. package/src/analyzers/architecture.ts +8 -0
  75. package/src/analyzers/entrypoints.ts +115 -0
  76. package/src/analyzers/symbols.ts +77 -1
  77. package/src/analyzers/techStack.ts +93 -0
  78. package/test_adapters.mjs +11 -11
  79. package/tests/apex-parser.test.ts +193 -0
  80. package/tests/cli-commands-batch1.test.ts +808 -0
  81. package/tests/cli-commands-batch2.test.ts +1113 -0
  82. package/tests/cli-commands-batch3.test.ts +1128 -0
  83. package/tests/cli-index.test.ts +1007 -0
  84. package/tests/cli-init.test.ts +761 -0
  85. package/tests/salesforce-apex-classes.test.ts +713 -0
  86. package/tests/salesforce-apex-triggers.test.ts +871 -0
  87. package/tests/salesforce-custom-objects.test.ts +918 -0
  88. package/tests/salesforce-flows.test.ts +710 -0
  89. package/tests/salesforce-lwc.test.ts +963 -0
  90. package/tests/salesforce-sfdx-integration.test.ts +1125 -0
  91. package/CONTRIBUTING.md +0 -89
  92. package/FLOW.md +0 -129
  93. package/install.sh +0 -188
  94. package/run-all-tests.sh +0 -184
  95. package/test-projects/django-app/.ai-dev/ai_context.md +0 -92
  96. package/test-projects/django-app/.ai-dev/ai_rules.md +0 -47
  97. package/test-projects/django-app/.ai-dev/architecture.md +0 -57
  98. package/test-projects/django-app/.ai-dev/cache.json +0 -169
  99. package/test-projects/django-app/.ai-dev/context/flows/views.json +0 -10
  100. package/test-projects/django-app/.ai-dev/conventions.md +0 -51
  101. package/test-projects/django-app/.ai-dev/dependencies.json +0 -312
  102. package/test-projects/django-app/.ai-dev/entrypoints.md +0 -4
  103. package/test-projects/django-app/.ai-dev/files.json +0 -209
  104. package/test-projects/django-app/.ai-dev/graph/knowledge-graph.json +0 -36
  105. package/test-projects/django-app/.ai-dev/graph/module-graph.json +0 -145
  106. package/test-projects/django-app/.ai-dev/graph/symbol-graph.json +0 -1488
  107. package/test-projects/django-app/.ai-dev/graph/symbol-references.json +0 -1
  108. package/test-projects/django-app/.ai-dev/index-state.json +0 -294
  109. package/test-projects/django-app/.ai-dev/modules.json +0 -35
  110. package/test-projects/django-app/.ai-dev/project.json +0 -11
  111. package/test-projects/django-app/.ai-dev/repo_map.json +0 -412
  112. package/test-projects/django-app/.ai-dev/repo_map.md +0 -105
  113. package/test-projects/django-app/.ai-dev/schema.json +0 -5
  114. package/test-projects/django-app/.ai-dev/summary.md +0 -15
  115. package/test-projects/django-app/.ai-dev/symbols.json +0 -1
  116. package/test-projects/django-app/.ai-dev/tech_stack.md +0 -32
  117. package/test-projects/django-app/README.md +0 -91
  118. package/test-projects/django-app/blog/__init__.py +0 -0
  119. package/test-projects/django-app/blog/admin.py +0 -31
  120. package/test-projects/django-app/blog/models.py +0 -55
  121. package/test-projects/django-app/blog/serializers.py +0 -69
  122. package/test-projects/django-app/blog/urls.py +0 -14
  123. package/test-projects/django-app/blog/views.py +0 -96
  124. package/test-projects/django-app/django_app/__init__.py +0 -0
  125. package/test-projects/django-app/django_app/settings.py +0 -90
  126. package/test-projects/django-app/django_app/urls.py +0 -11
  127. package/test-projects/django-app/django_app/wsgi.py +0 -9
  128. package/test-projects/django-app/manage.py +0 -23
  129. package/test-projects/django-app/requirements.txt +0 -3
  130. package/test-projects/django-app/users/__init__.py +0 -0
  131. package/test-projects/django-app/users/admin.py +0 -42
  132. package/test-projects/django-app/users/models.py +0 -54
  133. package/test-projects/django-app/users/serializers.py +0 -113
  134. package/test-projects/django-app/users/urls.py +0 -13
  135. package/test-projects/django-app/users/views.py +0 -135
  136. package/test-projects/express-api/.ai-dev/ai_context.md +0 -112
  137. package/test-projects/express-api/.ai-dev/ai_rules.md +0 -50
  138. package/test-projects/express-api/.ai-dev/architecture.md +0 -62
  139. package/test-projects/express-api/.ai-dev/context/features/controllers.json +0 -13
  140. package/test-projects/express-api/.ai-dev/context/features/services.json +0 -13
  141. package/test-projects/express-api/.ai-dev/context/flows/auth.json +0 -12
  142. package/test-projects/express-api/.ai-dev/context/flows/user.json +0 -13
  143. package/test-projects/express-api/.ai-dev/conventions.md +0 -51
  144. package/test-projects/express-api/.ai-dev/dependencies.json +0 -54
  145. package/test-projects/express-api/.ai-dev/entrypoints.md +0 -17
  146. package/test-projects/express-api/.ai-dev/modules.json +0 -30
  147. package/test-projects/express-api/.ai-dev/project.json +0 -15
  148. package/test-projects/express-api/.ai-dev/repo_map.json +0 -100
  149. package/test-projects/express-api/.ai-dev/repo_map.md +0 -36
  150. package/test-projects/express-api/.ai-dev/schema.json +0 -5
  151. package/test-projects/express-api/.ai-dev/summary.md +0 -14
  152. package/test-projects/express-api/.ai-dev/symbols.json +0 -7
  153. package/test-projects/express-api/.ai-dev/tech_stack.md +0 -38
  154. package/test-projects/express-api/.ai-dev/tools.json +0 -10
  155. package/test-projects/express-api/controllers/authController.js +0 -32
  156. package/test-projects/express-api/controllers/userController.js +0 -51
  157. package/test-projects/express-api/index.js +0 -30
  158. package/test-projects/express-api/middleware/authMiddleware.js +0 -30
  159. package/test-projects/express-api/models/userRepository.js +0 -25
  160. package/test-projects/express-api/package.json +0 -18
  161. package/test-projects/express-api/services/authService.js +0 -17
  162. package/test-projects/express-api/services/userService.js +0 -28
  163. package/test-projects/fastapi-app/.ai-dev/ai_context.md +0 -89
  164. package/test-projects/fastapi-app/.ai-dev/ai_rules.md +0 -47
  165. package/test-projects/fastapi-app/.ai-dev/architecture.md +0 -39
  166. package/test-projects/fastapi-app/.ai-dev/cache.json +0 -125
  167. package/test-projects/fastapi-app/.ai-dev/conventions.md +0 -51
  168. package/test-projects/fastapi-app/.ai-dev/dependencies.json +0 -244
  169. package/test-projects/fastapi-app/.ai-dev/entrypoints.md +0 -4
  170. package/test-projects/fastapi-app/.ai-dev/files.json +0 -154
  171. package/test-projects/fastapi-app/.ai-dev/graph/knowledge-graph.json +0 -15
  172. package/test-projects/fastapi-app/.ai-dev/graph/module-graph.json +0 -78
  173. package/test-projects/fastapi-app/.ai-dev/graph/symbol-graph.json +0 -1724
  174. package/test-projects/fastapi-app/.ai-dev/graph/symbol-references.json +0 -51
  175. package/test-projects/fastapi-app/.ai-dev/index-state.json +0 -217
  176. package/test-projects/fastapi-app/.ai-dev/modules.json +0 -16
  177. package/test-projects/fastapi-app/.ai-dev/project.json +0 -9
  178. package/test-projects/fastapi-app/.ai-dev/repo_map.json +0 -298
  179. package/test-projects/fastapi-app/.ai-dev/repo_map.md +0 -74
  180. package/test-projects/fastapi-app/.ai-dev/schema.json +0 -5
  181. package/test-projects/fastapi-app/.ai-dev/summary.md +0 -12
  182. package/test-projects/fastapi-app/.ai-dev/symbols.json +0 -1
  183. package/test-projects/fastapi-app/.ai-dev/tech_stack.md +0 -32
  184. package/test-projects/fastapi-app/.ai-dev/tools.json +0 -10
  185. package/test-projects/fastapi-app/README.md +0 -118
  186. package/test-projects/fastapi-app/app/database.py +0 -21
  187. package/test-projects/fastapi-app/app/dependencies.py +0 -107
  188. package/test-projects/fastapi-app/app/main.py +0 -47
  189. package/test-projects/fastapi-app/app/models.py +0 -149
  190. package/test-projects/fastapi-app/app/routers/auth.py +0 -117
  191. package/test-projects/fastapi-app/app/routers/posts.py +0 -272
  192. package/test-projects/fastapi-app/app/schemas.py +0 -191
  193. package/test-projects/fastapi-app/requirements.txt +0 -10
  194. package/test-projects/flask-app/.ai-dev/ai_context.md +0 -94
  195. package/test-projects/flask-app/.ai-dev/ai_rules.md +0 -47
  196. package/test-projects/flask-app/.ai-dev/architecture.md +0 -49
  197. package/test-projects/flask-app/.ai-dev/cache.json +0 -157
  198. package/test-projects/flask-app/.ai-dev/context/features/app.json +0 -25
  199. package/test-projects/flask-app/.ai-dev/context/flows/routes.json +0 -14
  200. package/test-projects/flask-app/.ai-dev/conventions.md +0 -51
  201. package/test-projects/flask-app/.ai-dev/dependencies.json +0 -298
  202. package/test-projects/flask-app/.ai-dev/entrypoints.md +0 -4
  203. package/test-projects/flask-app/.ai-dev/files.json +0 -194
  204. package/test-projects/flask-app/.ai-dev/graph/knowledge-graph.json +0 -60
  205. package/test-projects/flask-app/.ai-dev/graph/module-graph.json +0 -95
  206. package/test-projects/flask-app/.ai-dev/graph/symbol-graph.json +0 -1448
  207. package/test-projects/flask-app/.ai-dev/graph/symbol-references.json +0 -45
  208. package/test-projects/flask-app/.ai-dev/index-state.json +0 -273
  209. package/test-projects/flask-app/.ai-dev/modules.json +0 -21
  210. package/test-projects/flask-app/.ai-dev/project.json +0 -13
  211. package/test-projects/flask-app/.ai-dev/repo_map.json +0 -400
  212. package/test-projects/flask-app/.ai-dev/repo_map.md +0 -98
  213. package/test-projects/flask-app/.ai-dev/summary.md +0 -13
  214. package/test-projects/flask-app/.ai-dev/symbols.json +0 -1
  215. package/test-projects/flask-app/.ai-dev/tech_stack.md +0 -32
  216. package/test-projects/flask-app/.ai-dev/tools.json +0 -10
  217. package/test-projects/flask-app/README.md +0 -129
  218. package/test-projects/flask-app/app/__init__.py +0 -46
  219. package/test-projects/flask-app/app/api/__init__.py +0 -7
  220. package/test-projects/flask-app/app/api/routes.py +0 -122
  221. package/test-projects/flask-app/app/auth/__init__.py +0 -7
  222. package/test-projects/flask-app/app/auth/forms.py +0 -52
  223. package/test-projects/flask-app/app/auth/routes.py +0 -68
  224. package/test-projects/flask-app/app/blog/__init__.py +0 -7
  225. package/test-projects/flask-app/app/blog/forms.py +0 -35
  226. package/test-projects/flask-app/app/blog/routes.py +0 -140
  227. package/test-projects/flask-app/app/main/__init__.py +0 -7
  228. package/test-projects/flask-app/app/main/routes.py +0 -88
  229. package/test-projects/flask-app/app/models.py +0 -177
  230. package/test-projects/flask-app/config.py +0 -64
  231. package/test-projects/flask-app/requirements.txt +0 -10
  232. package/test-projects/laravel-app/.ai-dev/ai_context.md +0 -97
  233. package/test-projects/laravel-app/.ai-dev/ai_rules.md +0 -47
  234. package/test-projects/laravel-app/.ai-dev/architecture.md +0 -60
  235. package/test-projects/laravel-app/.ai-dev/cache.json +0 -161
  236. package/test-projects/laravel-app/.ai-dev/context/features/app.json +0 -21
  237. package/test-projects/laravel-app/.ai-dev/context/flows/.json +0 -9
  238. package/test-projects/laravel-app/.ai-dev/context/flows/category.json +0 -12
  239. package/test-projects/laravel-app/.ai-dev/context/flows/comment.json +0 -12
  240. package/test-projects/laravel-app/.ai-dev/context/flows/post.json +0 -12
  241. package/test-projects/laravel-app/.ai-dev/context/flows/unnamed.json +0 -9
  242. package/test-projects/laravel-app/.ai-dev/conventions.md +0 -51
  243. package/test-projects/laravel-app/.ai-dev/dependencies.json +0 -6
  244. package/test-projects/laravel-app/.ai-dev/entrypoints.md +0 -4
  245. package/test-projects/laravel-app/.ai-dev/files.json +0 -199
  246. package/test-projects/laravel-app/.ai-dev/graph/knowledge-graph.json +0 -98
  247. package/test-projects/laravel-app/.ai-dev/graph/module-graph.json +0 -30
  248. package/test-projects/laravel-app/.ai-dev/graph/symbol-graph.json +0 -5
  249. package/test-projects/laravel-app/.ai-dev/graph/symbol-references.json +0 -1
  250. package/test-projects/laravel-app/.ai-dev/index-state.json +0 -280
  251. package/test-projects/laravel-app/.ai-dev/modules.json +0 -29
  252. package/test-projects/laravel-app/.ai-dev/project.json +0 -17
  253. package/test-projects/laravel-app/.ai-dev/repo_map.json +0 -419
  254. package/test-projects/laravel-app/.ai-dev/repo_map.md +0 -106
  255. package/test-projects/laravel-app/.ai-dev/schema.json +0 -5
  256. package/test-projects/laravel-app/.ai-dev/summary.md +0 -15
  257. package/test-projects/laravel-app/.ai-dev/symbols.json +0 -1
  258. package/test-projects/laravel-app/.ai-dev/tech_stack.md +0 -34
  259. package/test-projects/laravel-app/.ai-dev/tools.json +0 -10
  260. package/test-projects/laravel-app/README.md +0 -107
  261. package/test-projects/laravel-app/app/Http/Controllers/Api/CategoryController.php +0 -88
  262. package/test-projects/laravel-app/app/Http/Controllers/Api/CommentController.php +0 -56
  263. package/test-projects/laravel-app/app/Http/Controllers/Api/PostController.php +0 -174
  264. package/test-projects/laravel-app/app/Http/Controllers/Controller.php +0 -12
  265. package/test-projects/laravel-app/app/Models/Category.php +0 -34
  266. package/test-projects/laravel-app/app/Models/Comment.php +0 -51
  267. package/test-projects/laravel-app/app/Models/Post.php +0 -108
  268. package/test-projects/laravel-app/app/Models/User.php +0 -85
  269. package/test-projects/laravel-app/bootstrap/app.php +0 -25
  270. package/test-projects/laravel-app/composer.json +0 -35
  271. package/test-projects/laravel-app/routes/api.php +0 -40
  272. package/test-projects/nestjs-backend/.ai-dev/ai_context.md +0 -111
  273. package/test-projects/nestjs-backend/.ai-dev/ai_rules.md +0 -52
  274. package/test-projects/nestjs-backend/.ai-dev/architecture.md +0 -49
  275. package/test-projects/nestjs-backend/.ai-dev/cache.json +0 -169
  276. package/test-projects/nestjs-backend/.ai-dev/context/features/src.json +0 -23
  277. package/test-projects/nestjs-backend/.ai-dev/context/flows/auth.controller.json +0 -14
  278. package/test-projects/nestjs-backend/.ai-dev/context/flows/auth.json +0 -10
  279. package/test-projects/nestjs-backend/.ai-dev/context/flows/users..json +0 -10
  280. package/test-projects/nestjs-backend/.ai-dev/context/flows/users.controller.json +0 -14
  281. package/test-projects/nestjs-backend/.ai-dev/context/flows/users.json +0 -10
  282. package/test-projects/nestjs-backend/.ai-dev/conventions.md +0 -52
  283. package/test-projects/nestjs-backend/.ai-dev/dependencies.json +0 -152
  284. package/test-projects/nestjs-backend/.ai-dev/entrypoints.md +0 -18
  285. package/test-projects/nestjs-backend/.ai-dev/files.json +0 -209
  286. package/test-projects/nestjs-backend/.ai-dev/graph/knowledge-graph.json +0 -132
  287. package/test-projects/nestjs-backend/.ai-dev/graph/module-graph.json +0 -29
  288. package/test-projects/nestjs-backend/.ai-dev/graph/symbol-graph.json +0 -304
  289. package/test-projects/nestjs-backend/.ai-dev/graph/symbol-references.json +0 -5
  290. package/test-projects/nestjs-backend/.ai-dev/index-state.json +0 -294
  291. package/test-projects/nestjs-backend/.ai-dev/modules.json +0 -19
  292. package/test-projects/nestjs-backend/.ai-dev/project.json +0 -18
  293. package/test-projects/nestjs-backend/.ai-dev/repo_map.json +0 -427
  294. package/test-projects/nestjs-backend/.ai-dev/repo_map.md +0 -104
  295. package/test-projects/nestjs-backend/.ai-dev/schema.json +0 -5
  296. package/test-projects/nestjs-backend/.ai-dev/summary.md +0 -13
  297. package/test-projects/nestjs-backend/.ai-dev/symbols.json +0 -1
  298. package/test-projects/nestjs-backend/.ai-dev/tech_stack.md +0 -38
  299. package/test-projects/nestjs-backend/.ai-dev/tools.json +0 -10
  300. package/test-projects/nestjs-backend/package.json +0 -22
  301. package/test-projects/nestjs-backend/src/app.module.ts +0 -8
  302. package/test-projects/nestjs-backend/src/auth/auth.controller.ts +0 -22
  303. package/test-projects/nestjs-backend/src/auth/auth.module.ts +0 -11
  304. package/test-projects/nestjs-backend/src/auth/auth.service.ts +0 -28
  305. package/test-projects/nestjs-backend/src/auth/dto/login.dto.ts +0 -4
  306. package/test-projects/nestjs-backend/src/auth/strategies/jwt.strategy.ts +0 -18
  307. package/test-projects/nestjs-backend/src/main.ts +0 -9
  308. package/test-projects/nestjs-backend/src/users/users.controller.ts +0 -32
  309. package/test-projects/nestjs-backend/src/users/users.module.ts +0 -10
  310. package/test-projects/nestjs-backend/src/users/users.service.ts +0 -42
  311. package/test-projects/nestjs-backend/tsconfig.json +0 -21
  312. package/test-projects/python-cli/.ai-dev/ai_context.md +0 -95
  313. package/test-projects/python-cli/.ai-dev/ai_rules.md +0 -47
  314. package/test-projects/python-cli/.ai-dev/architecture.md +0 -55
  315. package/test-projects/python-cli/.ai-dev/cache.json +0 -149
  316. package/test-projects/python-cli/.ai-dev/context/features/cli.json +0 -16
  317. package/test-projects/python-cli/.ai-dev/context/flows/list_.json +0 -9
  318. package/test-projects/python-cli/.ai-dev/context/flows/remove_.json +0 -9
  319. package/test-projects/python-cli/.ai-dev/conventions.md +0 -51
  320. package/test-projects/python-cli/.ai-dev/dependencies.json +0 -66
  321. package/test-projects/python-cli/.ai-dev/entrypoints.md +0 -4
  322. package/test-projects/python-cli/.ai-dev/files.json +0 -184
  323. package/test-projects/python-cli/.ai-dev/graph/knowledge-graph.json +0 -83
  324. package/test-projects/python-cli/.ai-dev/graph/module-graph.json +0 -31
  325. package/test-projects/python-cli/.ai-dev/graph/symbol-graph.json +0 -358
  326. package/test-projects/python-cli/.ai-dev/graph/symbol-references.json +0 -11
  327. package/test-projects/python-cli/.ai-dev/index-state.json +0 -259
  328. package/test-projects/python-cli/.ai-dev/modules.json +0 -21
  329. package/test-projects/python-cli/.ai-dev/project.json +0 -15
  330. package/test-projects/python-cli/.ai-dev/repo_map.json +0 -367
  331. package/test-projects/python-cli/.ai-dev/repo_map.md +0 -93
  332. package/test-projects/python-cli/.ai-dev/schema.json +0 -5
  333. package/test-projects/python-cli/.ai-dev/summary.md +0 -14
  334. package/test-projects/python-cli/.ai-dev/symbols.json +0 -1
  335. package/test-projects/python-cli/.ai-dev/tech_stack.md +0 -32
  336. package/test-projects/python-cli/.ai-dev/tools.json +0 -10
  337. package/test-projects/python-cli/__init__.py +0 -1
  338. package/test-projects/python-cli/cli/__init__.py +0 -1
  339. package/test-projects/python-cli/cli/add_command.py +0 -6
  340. package/test-projects/python-cli/cli/list_command.py +0 -7
  341. package/test-projects/python-cli/cli/remove_command.py +0 -6
  342. package/test-projects/python-cli/main.py +0 -34
  343. package/test-projects/python-cli/models/__init__.py +0 -2
  344. package/test-projects/python-cli/models/task.py +0 -19
  345. package/test-projects/python-cli/models/task_repository.py +0 -44
  346. package/test-projects/rails-app/.ai-dev/ai_context.md +0 -94
  347. package/test-projects/rails-app/.ai-dev/ai_rules.md +0 -47
  348. package/test-projects/rails-app/.ai-dev/architecture.md +0 -49
  349. package/test-projects/rails-app/.ai-dev/cache.json +0 -193
  350. package/test-projects/rails-app/.ai-dev/context/features/app.json +0 -24
  351. package/test-projects/rails-app/.ai-dev/context/features/config.json +0 -13
  352. package/test-projects/rails-app/.ai-dev/context/flows/application.json +0 -9
  353. package/test-projects/rails-app/.ai-dev/context/flows/application_.json +0 -9
  354. package/test-projects/rails-app/.ai-dev/context/flows/comments.json +0 -11
  355. package/test-projects/rails-app/.ai-dev/context/flows/comments_.json +0 -11
  356. package/test-projects/rails-app/.ai-dev/context/flows/posts.json +0 -11
  357. package/test-projects/rails-app/.ai-dev/context/flows/posts_.json +0 -11
  358. package/test-projects/rails-app/.ai-dev/context/flows/routes.json +0 -9
  359. package/test-projects/rails-app/.ai-dev/context/flows/users.json +0 -11
  360. package/test-projects/rails-app/.ai-dev/context/flows/users_.json +0 -11
  361. package/test-projects/rails-app/.ai-dev/conventions.md +0 -51
  362. package/test-projects/rails-app/.ai-dev/dependencies.json +0 -6
  363. package/test-projects/rails-app/.ai-dev/entrypoints.md +0 -4
  364. package/test-projects/rails-app/.ai-dev/files.json +0 -239
  365. package/test-projects/rails-app/.ai-dev/graph/knowledge-graph.json +0 -130
  366. package/test-projects/rails-app/.ai-dev/graph/module-graph.json +0 -27
  367. package/test-projects/rails-app/.ai-dev/graph/symbol-graph.json +0 -5
  368. package/test-projects/rails-app/.ai-dev/graph/symbol-references.json +0 -1
  369. package/test-projects/rails-app/.ai-dev/index-state.json +0 -336
  370. package/test-projects/rails-app/.ai-dev/modules.json +0 -26
  371. package/test-projects/rails-app/.ai-dev/project.json +0 -22
  372. package/test-projects/rails-app/.ai-dev/repo_map.json +0 -486
  373. package/test-projects/rails-app/.ai-dev/repo_map.md +0 -117
  374. package/test-projects/rails-app/.ai-dev/schema.json +0 -5
  375. package/test-projects/rails-app/.ai-dev/summary.md +0 -13
  376. package/test-projects/rails-app/.ai-dev/symbols.json +0 -1
  377. package/test-projects/rails-app/.ai-dev/tech_stack.md +0 -32
  378. package/test-projects/rails-app/.ai-dev/tools.json +0 -10
  379. package/test-projects/rails-app/Gemfile +0 -38
  380. package/test-projects/rails-app/README.md +0 -140
  381. package/test-projects/rails-app/Rakefile +0 -8
  382. package/test-projects/rails-app/app/controllers/api/comments_controller.rb +0 -75
  383. package/test-projects/rails-app/app/controllers/api/posts_controller.rb +0 -68
  384. package/test-projects/rails-app/app/controllers/api/users_controller.rb +0 -54
  385. package/test-projects/rails-app/app/controllers/application_controller.rb +0 -31
  386. package/test-projects/rails-app/app/models/comment.rb +0 -34
  387. package/test-projects/rails-app/app/models/post.rb +0 -36
  388. package/test-projects/rails-app/app/models/user.rb +0 -28
  389. package/test-projects/rails-app/app/services/post_service.rb +0 -92
  390. package/test-projects/rails-app/app/services/user_service.rb +0 -76
  391. package/test-projects/rails-app/config/application.rb +0 -27
  392. package/test-projects/rails-app/config/environment.rb +0 -7
  393. package/test-projects/rails-app/config/routes.rb +0 -15
  394. package/test-projects/react-app/.ai-dev/ai_context.md +0 -96
  395. package/test-projects/react-app/.ai-dev/architecture.md +0 -39
  396. package/test-projects/react-app/.ai-dev/cache.json +0 -153
  397. package/test-projects/react-app/.ai-dev/context/features/src.json +0 -18
  398. package/test-projects/react-app/.ai-dev/context/flows/UsersPage.json +0 -14
  399. package/test-projects/react-app/.ai-dev/context/flows/dashboard.json +0 -9
  400. package/test-projects/react-app/.ai-dev/context/flows/login.json +0 -9
  401. package/test-projects/react-app/.ai-dev/context/flows/users.json +0 -9
  402. package/test-projects/react-app/.ai-dev/dependencies.json +0 -128
  403. package/test-projects/react-app/.ai-dev/entrypoints.md +0 -4
  404. package/test-projects/react-app/.ai-dev/files.json +0 -189
  405. package/test-projects/react-app/.ai-dev/graph/knowledge-graph.json +0 -112
  406. package/test-projects/react-app/.ai-dev/graph/module-graph.json +0 -31
  407. package/test-projects/react-app/.ai-dev/graph/symbol-graph.json +0 -868
  408. package/test-projects/react-app/.ai-dev/graph/symbol-references.json +0 -31
  409. package/test-projects/react-app/.ai-dev/index-state.json +0 -266
  410. package/test-projects/react-app/.ai-dev/modules.json +0 -17
  411. package/test-projects/react-app/.ai-dev/project.json +0 -16
  412. package/test-projects/react-app/.ai-dev/repo_map.json +0 -391
  413. package/test-projects/react-app/.ai-dev/repo_map.md +0 -94
  414. package/test-projects/react-app/.ai-dev/schema.json +0 -5
  415. package/test-projects/react-app/.ai-dev/summary.md +0 -13
  416. package/test-projects/react-app/.ai-dev/symbols.json +0 -1
  417. package/test-projects/react-app/.ai-dev/tools.json +0 -10
  418. package/test-projects/react-app/package.json +0 -16
  419. package/test-projects/react-app/src/App.tsx +0 -21
  420. package/test-projects/react-app/src/context/AuthContext.tsx +0 -41
  421. package/test-projects/react-app/src/hooks/useAuth.ts +0 -10
  422. package/test-projects/react-app/src/main.tsx +0 -10
  423. package/test-projects/react-app/src/pages/DashboardPage.tsx +0 -17
  424. package/test-projects/react-app/src/pages/LoginPage.tsx +0 -41
  425. package/test-projects/react-app/src/pages/UsersPage.tsx +0 -36
  426. package/test-projects/react-app/src/services/userService.ts +0 -37
  427. package/test-projects/salesforce-cli/.ai-dev/ai_context.md +0 -89
  428. package/test-projects/salesforce-cli/.ai-dev/ai_rules.md +0 -47
  429. package/test-projects/salesforce-cli/.ai-dev/architecture.md +0 -39
  430. package/test-projects/salesforce-cli/.ai-dev/cache.json +0 -125
  431. package/test-projects/salesforce-cli/.ai-dev/context/features/force-app.json +0 -14
  432. package/test-projects/salesforce-cli/.ai-dev/context/flows/account.json +0 -9
  433. package/test-projects/salesforce-cli/.ai-dev/context/flows/opportunity.json +0 -9
  434. package/test-projects/salesforce-cli/.ai-dev/conventions.md +0 -51
  435. package/test-projects/salesforce-cli/.ai-dev/dependencies.json +0 -6
  436. package/test-projects/salesforce-cli/.ai-dev/entrypoints.md +0 -4
  437. package/test-projects/salesforce-cli/.ai-dev/files.json +0 -154
  438. package/test-projects/salesforce-cli/.ai-dev/graph/knowledge-graph.json +0 -64
  439. package/test-projects/salesforce-cli/.ai-dev/graph/module-graph.json +0 -13
  440. package/test-projects/salesforce-cli/.ai-dev/graph/symbol-graph.json +0 -148
  441. package/test-projects/salesforce-cli/.ai-dev/graph/symbol-references.json +0 -1
  442. package/test-projects/salesforce-cli/.ai-dev/index-state.json +0 -217
  443. package/test-projects/salesforce-cli/.ai-dev/modules.json +0 -12
  444. package/test-projects/salesforce-cli/.ai-dev/project.json +0 -14
  445. package/test-projects/salesforce-cli/.ai-dev/repo_map.json +0 -328
  446. package/test-projects/salesforce-cli/.ai-dev/repo_map.md +0 -80
  447. package/test-projects/salesforce-cli/.ai-dev/schema.json +0 -5
  448. package/test-projects/salesforce-cli/.ai-dev/summary.md +0 -13
  449. package/test-projects/salesforce-cli/.ai-dev/symbols.json +0 -1
  450. package/test-projects/salesforce-cli/.ai-dev/tech_stack.md +0 -31
  451. package/test-projects/salesforce-cli/.ai-dev/tools.json +0 -10
  452. package/test-projects/salesforce-cli/.forceignore +0 -27
  453. package/test-projects/salesforce-cli/force-app/main/default/classes/AccountController.cls +0 -24
  454. package/test-projects/salesforce-cli/force-app/main/default/classes/OpportunityController.cls +0 -25
  455. package/test-projects/salesforce-cli/force-app/main/default/objects/Project__c.object.xml +0 -45
  456. package/test-projects/salesforce-cli/force-app/main/default/triggers/AccountTrigger.trigger +0 -33
  457. package/test-projects/salesforce-cli/sfdx-project.json +0 -11
  458. package/test-projects/spring-boot-app/.ai-dev/ai_context.md +0 -91
  459. package/test-projects/spring-boot-app/.ai-dev/ai_rules.md +0 -48
  460. package/test-projects/spring-boot-app/.ai-dev/architecture.md +0 -39
  461. package/test-projects/spring-boot-app/.ai-dev/cache.json +0 -173
  462. package/test-projects/spring-boot-app/.ai-dev/context/features/src.json +0 -26
  463. package/test-projects/spring-boot-app/.ai-dev/context/flows/PostController.json +0 -19
  464. package/test-projects/spring-boot-app/.ai-dev/context/flows/UserController.json +0 -19
  465. package/test-projects/spring-boot-app/.ai-dev/context/flows/comment.json +0 -11
  466. package/test-projects/spring-boot-app/.ai-dev/context/flows/post.json +0 -14
  467. package/test-projects/spring-boot-app/.ai-dev/context/flows/user.json +0 -14
  468. package/test-projects/spring-boot-app/.ai-dev/conventions.md +0 -52
  469. package/test-projects/spring-boot-app/.ai-dev/dependencies.json +0 -326
  470. package/test-projects/spring-boot-app/.ai-dev/entrypoints.md +0 -4
  471. package/test-projects/spring-boot-app/.ai-dev/files.json +0 -214
  472. package/test-projects/spring-boot-app/.ai-dev/graph/knowledge-graph.json +0 -231
  473. package/test-projects/spring-boot-app/.ai-dev/graph/module-graph.json +0 -22
  474. package/test-projects/spring-boot-app/.ai-dev/graph/symbol-graph.json +0 -794
  475. package/test-projects/spring-boot-app/.ai-dev/graph/symbol-references.json +0 -70
  476. package/test-projects/spring-boot-app/.ai-dev/index-state.json +0 -301
  477. package/test-projects/spring-boot-app/.ai-dev/modules.json +0 -21
  478. package/test-projects/spring-boot-app/.ai-dev/project.json +0 -17
  479. package/test-projects/spring-boot-app/.ai-dev/repo_map.json +0 -461
  480. package/test-projects/spring-boot-app/.ai-dev/repo_map.md +0 -109
  481. package/test-projects/spring-boot-app/.ai-dev/schema.json +0 -5
  482. package/test-projects/spring-boot-app/.ai-dev/summary.md +0 -12
  483. package/test-projects/spring-boot-app/.ai-dev/symbols.json +0 -1
  484. package/test-projects/spring-boot-app/.ai-dev/tech_stack.md +0 -32
  485. package/test-projects/spring-boot-app/.ai-dev/tools.json +0 -10
  486. package/test-projects/spring-boot-app/.classpath +0 -57
  487. package/test-projects/spring-boot-app/.factorypath +0 -69
  488. package/test-projects/spring-boot-app/.project +0 -34
  489. package/test-projects/spring-boot-app/.settings/org.eclipse.core.resources.prefs +0 -4
  490. package/test-projects/spring-boot-app/.settings/org.eclipse.jdt.apt.core.prefs +0 -4
  491. package/test-projects/spring-boot-app/.settings/org.eclipse.jdt.core.prefs +0 -10
  492. package/test-projects/spring-boot-app/.settings/org.eclipse.m2e.core.prefs +0 -4
  493. package/test-projects/spring-boot-app/README.md +0 -122
  494. package/test-projects/spring-boot-app/pom.xml +0 -79
  495. package/test-projects/spring-boot-app/src/main/java/com/example/demo/DemoApplication.java +0 -12
  496. package/test-projects/spring-boot-app/src/main/java/com/example/demo/controllers/CommentController.java +0 -89
  497. package/test-projects/spring-boot-app/src/main/java/com/example/demo/controllers/PostController.java +0 -92
  498. package/test-projects/spring-boot-app/src/main/java/com/example/demo/controllers/UserController.java +0 -84
  499. package/test-projects/spring-boot-app/src/main/java/com/example/demo/models/Comment.java +0 -38
  500. package/test-projects/spring-boot-app/src/main/java/com/example/demo/models/Post.java +0 -56
  501. package/test-projects/spring-boot-app/src/main/java/com/example/demo/models/User.java +0 -44
  502. package/test-projects/spring-boot-app/src/main/java/com/example/demo/repositories/CommentRepository.java +0 -21
  503. package/test-projects/spring-boot-app/src/main/java/com/example/demo/repositories/PostRepository.java +0 -18
  504. package/test-projects/spring-boot-app/src/main/java/com/example/demo/repositories/UserRepository.java +0 -15
  505. package/test-projects/spring-boot-app/src/main/java/com/example/demo/services/PostService.java +0 -83
  506. package/test-projects/spring-boot-app/src/main/java/com/example/demo/services/UserService.java +0 -62
  507. package/test-projects/spring-boot-app/src/main/resources/application.properties +0 -22
  508. package/test-projects/spring-boot-app/target/classes/com/example/demo/DemoApplication.class +0 -0
  509. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/CommentController$CommentCreateRequest.class +0 -0
  510. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/CommentController$CommentUpdateRequest.class +0 -0
  511. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/CommentController.class +0 -0
  512. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/PostController$PostCreateRequest.class +0 -0
  513. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/PostController$PostUpdateRequest.class +0 -0
  514. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/PostController.class +0 -0
  515. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/UserController$UserCreateRequest.class +0 -0
  516. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/UserController$UserUpdateRequest.class +0 -0
  517. package/test-projects/spring-boot-app/target/classes/com/example/demo/controllers/UserController.class +0 -0
  518. package/test-projects/spring-boot-app/target/classes/com/example/demo/models/Comment.class +0 -0
  519. package/test-projects/spring-boot-app/target/classes/com/example/demo/models/Post.class +0 -0
  520. package/test-projects/spring-boot-app/target/classes/com/example/demo/models/User.class +0 -0
  521. package/test-projects/spring-boot-app/target/classes/com/example/demo/repositories/CommentRepository.class +0 -0
  522. package/test-projects/spring-boot-app/target/classes/com/example/demo/repositories/PostRepository.class +0 -0
  523. package/test-projects/spring-boot-app/target/classes/com/example/demo/repositories/UserRepository.class +0 -0
  524. package/test-projects/spring-boot-app/target/classes/com/example/demo/services/PostService.class +0 -0
  525. package/test-projects/spring-boot-app/target/classes/com/example/demo/services/UserService.class +0 -0
  526. package/tests/e2e/run-e2e.sh +0 -88
  527. /package/{test-projects/django-app/.ai-dev → ai-context}/tools.json +0 -0
@@ -1,140 +0,0 @@
1
- # Rails Blog API
2
-
3
- A RESTful Rails API for a blog application with users, posts, and comments.
4
-
5
- ## Overview
6
-
7
- This is a Rails 7.1 API-only application that provides endpoints for managing:
8
- - **Users** - Blog authors and commenters
9
- - **Posts** - Blog articles with title, content, and body
10
- - **Comments** - User comments on posts
11
-
12
- ## Project Structure
13
-
14
- ```
15
- rails-app/
16
- ├── app/
17
- │ ├── controllers/
18
- │ │ ├── application_controller.rb
19
- │ │ └── api/
20
- │ │ ├── users_controller.rb
21
- │ │ ├── posts_controller.rb
22
- │ │ └── comments_controller.rb
23
- │ ├── models/
24
- │ │ ├── user.rb
25
- │ │ ├── post.rb
26
- │ │ └── comment.rb
27
- │ └── services/
28
- │ ├── user_service.rb
29
- │ └── post_service.rb
30
- ├── config/
31
- │ ├── application.rb
32
- │ ├── environment.rb
33
- │ └── routes.rb
34
- ├── Gemfile
35
- ├── Rakefile
36
- └── README.md
37
- ```
38
-
39
- ## Models
40
-
41
- ### User
42
- - `name` - User's name
43
- - `email` - Unique email address
44
- - `active` - Active status flag
45
- - Has many `posts` and `comments`
46
-
47
- ### Post
48
- - `title` - Post title
49
- - `content` - Short content/summary
50
- - `body` - Full post body
51
- - `published` - Publication status
52
- - `published_at` - Publication timestamp
53
- - Belongs to `user`, has many `comments`
54
-
55
- ### Comment
56
- - `content` - Comment text
57
- - `approved` - Moderation status
58
- - `approved_at` - Approval timestamp
59
- - Belongs to `post` and `user`
60
-
61
- ## API Endpoints
62
-
63
- ### Users
64
- | Method | Endpoint | Description |
65
- |--------|----------|-------------|
66
- | GET | `/api/users` | List all active users |
67
- | GET | `/api/users/:id` | Get a specific user |
68
- | POST | `/api/users` | Create a new user |
69
- | PUT | `/api/users/:id` | Update a user |
70
- | DELETE | `/api/users/:id` | Delete a user |
71
-
72
- ### Posts
73
- | Method | Endpoint | Description |
74
- |--------|----------|-------------|
75
- | GET | `/api/posts` | List all posts |
76
- | GET | `/api/posts/:id` | Get a specific post |
77
- | POST | `/api/posts` | Create a new post |
78
- | PUT | `/api/posts/:id` | Update a post |
79
- | DELETE | `/api/posts/:id` | Delete a post |
80
- | POST | `/api/posts/:id/publish` | Publish a post |
81
- | POST | `/api/posts/:id/unpublish` | Unpublish a post |
82
-
83
- ### Comments
84
- | Method | Endpoint | Description |
85
- |--------|----------|-------------|
86
- | GET | `/api/posts/:post_id/comments` | List comments for a post |
87
- | GET | `/api/posts/:post_id/comments/:id` | Get a specific comment |
88
- | POST | `/api/posts/:post_id/comments` | Create a comment |
89
- | PUT | `/api/posts/:post_id/comments/:id` | Update a comment |
90
- | DELETE | `/api/posts/:post_id/comments/:id` | Delete a comment |
91
- | POST | `/api/posts/:post_id/comments/:id/approve` | Approve a comment |
92
- | POST | `/api/posts/:post_id/comments/:id/reject` | Reject a comment |
93
-
94
- ## Services
95
-
96
- ### UserService
97
- - `create_user(attributes)` - Create a new user
98
- - `find_by_email(email)` - Find user by email
99
- - `find_user(id)` - Find user by ID
100
- - `update_user(id, attributes)` - Update user
101
- - `delete_user(id)` - Delete user
102
- - `active_users` - Get all active users
103
- - `deactivate_user(id)` - Deactivate a user
104
- - `activate_user(id)` - Activate a user
105
-
106
- ### PostService
107
- - `create_post(attributes)` - Create a new post
108
- - `find_post(id)` - Find post by ID
109
- - `update_post(id, attributes)` - Update post
110
- - `delete_post(id)` - Delete post
111
- - `publish(id)` - Publish a post
112
- - `unpublish(id)` - Unpublish a post
113
- - `published_posts` - Get all published posts
114
- - `draft_posts` - Get all draft posts
115
- - `posts_by_user(user_id)` - Get posts by user
116
- - `search(query)` - Search posts by title/content
117
-
118
- ## Setup
119
-
120
- ```bash
121
- # Install dependencies
122
- bundle install
123
-
124
- # Setup database
125
- rails db:create db:migrate
126
-
127
- # Start server
128
- rails server
129
- ```
130
-
131
- ## Testing
132
-
133
- ```bash
134
- # Run tests
135
- bundle exec rspec
136
- ```
137
-
138
- ## License
139
-
140
- MIT License
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Add your own tasks in files placed in lib/tasks ending in .rake,
4
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
5
-
6
- require_relative "config/application"
7
-
8
- Rails.application.load_tasks
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Api
4
- class CommentsController < ApplicationController
5
- before_action :set_post
6
- before_action :set_comment, only: %i[show update destroy]
7
-
8
- # GET /api/posts/:post_id/comments
9
- def index
10
- @comments = @post.comments.includes(:user).recent
11
- @comments = @comments.approved if params[:approved] == "true"
12
- @comments = @comments.pending if params[:approved] == "false"
13
- render_success @comments
14
- end
15
-
16
- # GET /api/posts/:post_id/comments/:id
17
- def show
18
- render_success @comment.as_json(include: :user)
19
- end
20
-
21
- # POST /api/posts/:post_id/comments
22
- def create
23
- @comment = @post.comments.build(comment_params)
24
-
25
- if @comment.save
26
- render_success @comment, status: :created
27
- else
28
- render_error @comment.errors.full_messages.join(", "), status: :unprocessable_entity
29
- end
30
- end
31
-
32
- # PATCH/PUT /api/posts/:post_id/comments/:id
33
- def update
34
- if @comment.update(comment_params)
35
- render_success @comment
36
- else
37
- render_error @comment.errors.full_messages.join(", "), status: :unprocessable_entity
38
- end
39
- end
40
-
41
- # DELETE /api/posts/:post_id/comments/:id
42
- def destroy
43
- @comment.destroy
44
- head :no_content
45
- end
46
-
47
- # POST /api/posts/:post_id/comments/:id/approve
48
- def approve
49
- @comment = @post.comments.find(params[:id])
50
- @comment.approve!
51
- render_success @comment
52
- end
53
-
54
- # POST /api/posts/:post_id/comments/:id/reject
55
- def reject
56
- @comment = @post.comments.find(params[:id])
57
- @comment.reject!
58
- render_success @comment
59
- end
60
-
61
- private
62
-
63
- def set_post
64
- @post = Post.find(params[:post_id])
65
- end
66
-
67
- def set_comment
68
- @comment = @post.comments.find(params[:id])
69
- end
70
-
71
- def comment_params
72
- params.require(:comment).permit(:content, :user_id, :approved)
73
- end
74
- end
75
- end
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Api
4
- class PostsController < ApplicationController
5
- before_action :set_post, only: %i[show update destroy]
6
-
7
- # GET /api/posts
8
- def index
9
- @posts = Post.includes(:user, :comments).recent
10
- @posts = @posts.published if params[:published] == "true"
11
- @posts = @posts.draft if params[:published] == "false"
12
- render_success @posts
13
- end
14
-
15
- # GET /api/posts/:id
16
- def show
17
- render_success @post.as_json(include: %i[user comments])
18
- end
19
-
20
- # POST /api/posts
21
- def create
22
- @post = PostService.create_post(post_params)
23
-
24
- if @post.persisted?
25
- render_success @post, status: :created
26
- else
27
- render_error @post.errors.full_messages.join(", "), status: :unprocessable_entity
28
- end
29
- end
30
-
31
- # PATCH/PUT /api/posts/:id
32
- def update
33
- if @post.update(post_params)
34
- render_success @post
35
- else
36
- render_error @post.errors.full_messages.join(", "), status: :unprocessable_entity
37
- end
38
- end
39
-
40
- # DELETE /api/posts/:id
41
- def destroy
42
- @post.destroy
43
- head :no_content
44
- end
45
-
46
- # POST /api/posts/:id/publish
47
- def publish
48
- @post = PostService.publish(params[:id])
49
- render_success @post
50
- end
51
-
52
- # POST /api/posts/:id/unpublish
53
- def unpublish
54
- @post = PostService.unpublish(params[:id])
55
- render_success @post
56
- end
57
-
58
- private
59
-
60
- def set_post
61
- @post = Post.find(params[:id])
62
- end
63
-
64
- def post_params
65
- params.require(:post).permit(:title, :content, :body, :user_id, :published)
66
- end
67
- end
68
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Api
4
- class UsersController < ApplicationController
5
- before_action :set_user, only: %i[show update destroy]
6
-
7
- # GET /api/users
8
- def index
9
- @users = User.active.recent
10
- render_success @users
11
- end
12
-
13
- # GET /api/users/:id
14
- def show
15
- render_success @user
16
- end
17
-
18
- # POST /api/users
19
- def create
20
- @user = UserService.create_user(user_params)
21
-
22
- if @user.persisted?
23
- render_success @user, status: :created
24
- else
25
- render_error @user.errors.full_messages.join(", "), status: :unprocessable_entity
26
- end
27
- end
28
-
29
- # PATCH/PUT /api/users/:id
30
- def update
31
- if @user.update(user_params)
32
- render_success @user
33
- else
34
- render_error @user.errors.full_messages.join(", "), status: :unprocessable_entity
35
- end
36
- end
37
-
38
- # DELETE /api/users/:id
39
- def destroy
40
- @user.destroy
41
- head :no_content
42
- end
43
-
44
- private
45
-
46
- def set_user
47
- @user = User.find(params[:id])
48
- end
49
-
50
- def user_params
51
- params.require(:user).permit(:name, :email)
52
- end
53
- end
54
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ApplicationController < ActionController::API
4
- # Common error handling
5
- rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
6
- rescue_from ActiveRecord::RecordInvalid, with: :record_invalid
7
- rescue_from StandardError, with: :internal_error
8
-
9
- private
10
-
11
- def record_not_found(exception)
12
- render json: { error: "Record not found", message: exception.message }, status: :not_found
13
- end
14
-
15
- def record_invalid(exception)
16
- render json: { error: "Validation failed", errors: exception.record.errors.full_messages }, status: :unprocessable_entity
17
- end
18
-
19
- def internal_error(exception)
20
- Rails.logger.error "Internal error: #{exception.message}"
21
- render json: { error: "Internal server error" }, status: :internal_server_error
22
- end
23
-
24
- def render_success(data, status: :ok)
25
- render json: { data: data }, status: status
26
- end
27
-
28
- def render_error(message, status: :bad_request)
29
- render json: { error: message }, status: status
30
- end
31
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Comment < ApplicationRecord
4
- # Validations
5
- validates :content, presence: true, length: { minimum: 1, maximum: 2000 }
6
- validates :post_id, presence: true
7
- validates :user_id, presence: true
8
-
9
- # Associations
10
- belongs_to :post
11
- belongs_to :user
12
-
13
- # Scopes
14
- scope :approved, -> { where(approved: true) }
15
- scope :pending, -> { where(approved: false) }
16
- scope :recent, -> { order(created_at: :desc) }
17
-
18
- # Instance methods
19
- def approve!
20
- update!(approved: true, approved_at: Time.current)
21
- end
22
-
23
- def reject!
24
- update!(approved: false, approved_at: nil)
25
- end
26
-
27
- def approved?
28
- approved == true
29
- end
30
-
31
- def pending?
32
- !approved?
33
- end
34
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Post < ApplicationRecord
4
- # Validations
5
- validates :title, presence: true, length: { minimum: 5, maximum: 200 }
6
- validates :content, presence: true
7
- validates :body, presence: true
8
- validates :user_id, presence: true
9
-
10
- # Associations
11
- belongs_to :user
12
- has_many :comments, dependent: :destroy
13
-
14
- # Scopes
15
- scope :published, -> { where(published: true) }
16
- scope :draft, -> { where(published: false) }
17
- scope :recent, -> { order(created_at: :desc) }
18
- scope :by_user, ->(user_id) { where(user_id: user_id) }
19
-
20
- # Instance methods
21
- def publish!
22
- update!(published: true, published_at: Time.current)
23
- end
24
-
25
- def unpublish!
26
- update!(published: false, published_at: nil)
27
- end
28
-
29
- def published?
30
- published == true
31
- end
32
-
33
- def draft?
34
- !published?
35
- end
36
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class User < ApplicationRecord
4
- # Validations
5
- validates :name, presence: true, length: { minimum: 2, maximum: 100 }
6
- validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
7
-
8
- # Associations
9
- has_many :posts, dependent: :destroy
10
- has_many :comments, dependent: :destroy
11
-
12
- # Scopes
13
- scope :active, -> { where(active: true) }
14
- scope :recent, -> { order(created_at: :desc) }
15
-
16
- # Instance methods
17
- def full_name
18
- name
19
- end
20
-
21
- def deactivate!
22
- update!(active: false)
23
- end
24
-
25
- def activate!
26
- update!(active: true)
27
- end
28
- end
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class PostService
4
- # Create a new post with the given attributes
5
- #
6
- # @param attributes [Hash] Post attributes (title, content, body, user_id)
7
- # @return [Post] The created post
8
- def self.create_post(attributes)
9
- Post.create!(attributes)
10
- end
11
-
12
- # Find a post by ID
13
- #
14
- # @param id [Integer] The post ID
15
- # @return [Post] The found post
16
- # @raise [ActiveRecord::RecordNotFound] If post not found
17
- def self.find_post(id)
18
- Post.includes(:user, :comments).find(id)
19
- end
20
-
21
- # Update a post with the given attributes
22
- #
23
- # @param id [Integer] The post ID
24
- # @param attributes [Hash] Attributes to update
25
- # @return [Post] The updated post
26
- def self.update_post(id, attributes)
27
- post = Post.find(id)
28
- post.update!(attributes)
29
- post
30
- end
31
-
32
- # Delete a post by ID
33
- #
34
- # @param id [Integer] The post ID
35
- # @return [Boolean] True if deleted
36
- def self.delete_post(id)
37
- post = Post.find(id)
38
- post.destroy!
39
- true
40
- end
41
-
42
- # Publish a post
43
- #
44
- # @param id [Integer] The post ID
45
- # @return [Post] The published post
46
- def self.publish(id)
47
- post = Post.find(id)
48
- post.publish!
49
- post
50
- end
51
-
52
- # Unpublish a post
53
- #
54
- # @param id [Integer] The post ID
55
- # @return [Post] The unpublished post
56
- def self.unpublish(id)
57
- post = Post.find(id)
58
- post.unpublish!
59
- post
60
- end
61
-
62
- # Get all published posts
63
- #
64
- # @return [Array<Post>] List of published posts
65
- def self.published_posts
66
- Post.published.recent.includes(:user)
67
- end
68
-
69
- # Get all draft posts
70
- #
71
- # @return [Array<Post>] List of draft posts
72
- def self.draft_posts
73
- Post.draft.recent.includes(:user)
74
- end
75
-
76
- # Get posts by user
77
- #
78
- # @param user_id [Integer] The user ID
79
- # @return [Array<Post>] List of posts by the user
80
- def self.posts_by_user(user_id)
81
- Post.by_user(user_id).recent.includes(:comments)
82
- end
83
-
84
- # Search posts by title or content
85
- #
86
- # @param query [String] The search query
87
- # @return [Array<Post>] Matching posts
88
- def self.search(query)
89
- Post.where("title LIKE ? OR content LIKE ? OR body LIKE ?", "%#{query}%", "%#{query}%", "%#{query}%")
90
- .recent
91
- end
92
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class UserService
4
- # Create a new user with the given attributes
5
- #
6
- # @param attributes [Hash] User attributes (name, email)
7
- # @return [User] The created user
8
- def self.create_user(attributes)
9
- User.create!(attributes)
10
- end
11
-
12
- # Find a user by email
13
- #
14
- # @param email [String] The email to search for
15
- # @return [User, nil] The found user or nil
16
- def self.find_by_email(email)
17
- User.find_by(email: email)
18
- end
19
-
20
- # Find a user by ID
21
- #
22
- # @param id [Integer] The user ID
23
- # @return [User] The found user
24
- # @raise [ActiveRecord::RecordNotFound] If user not found
25
- def self.find_user(id)
26
- User.find(id)
27
- end
28
-
29
- # Update a user with the given attributes
30
- #
31
- # @param id [Integer] The user ID
32
- # @param attributes [Hash] Attributes to update
33
- # @return [User] The updated user
34
- def self.update_user(id, attributes)
35
- user = User.find(id)
36
- user.update!(attributes)
37
- user
38
- end
39
-
40
- # Delete a user by ID
41
- #
42
- # @param id [Integer] The user ID
43
- # @return [Boolean] True if deleted
44
- def self.delete_user(id)
45
- user = User.find(id)
46
- user.destroy!
47
- true
48
- end
49
-
50
- # Get all active users
51
- #
52
- # @return [Array<User>] List of active users
53
- def self.active_users
54
- User.active.recent
55
- end
56
-
57
- # Deactivate a user
58
- #
59
- # @param id [Integer] The user ID
60
- # @return [User] The deactivated user
61
- def self.deactivate_user(id)
62
- user = User.find(id)
63
- user.deactivate!
64
- user
65
- end
66
-
67
- # Activate a user
68
- #
69
- # @param id [Integer] The user ID
70
- # @return [User] The activated user
71
- def self.activate_user(id)
72
- user = User.find(id)
73
- user.activate!
74
- user
75
- end
76
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "environment"
4
-
5
- module RailsApp
6
- class Application < Rails::Application
7
- # Initialize configuration defaults for originally generated Rails version
8
- config.load_defaults 7.1
9
-
10
- # Configuration for the application, engines, and railties goes here.
11
- #
12
- # These settings can be overridden in specific environments using the files
13
- # in config/environments, which are processed later.
14
- #
15
- # config.time_zone = "Central Time (US & Canada)"
16
- # config.eager_load_paths << Rails.root.join("extras")
17
-
18
- # Only loads a smaller set of middleware suitable for API only apps
19
- config.api_only = true
20
-
21
- # Enable service objects directory
22
- config.autoload_paths << Rails.root.join("app/services")
23
-
24
- # Enable Zeitwerk autoloading
25
- config.autoloader = :zeitwerk
26
- end
27
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Load the Rails application.
4
- require_relative "application"
5
-
6
- # Initialize the Rails application.
7
- Rails.application.initialize!
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Rails.application.routes.draw do
4
- # API namespace for versioned endpoints
5
- namespace :api do
6
- resources :users, only: %i[index show create update destroy]
7
-
8
- resources :posts, only: %i[index show create update destroy] do
9
- resources :comments, only: %i[index show create update destroy]
10
- end
11
- end
12
-
13
- # Health check endpoint
14
- get "/health", to: "health#show"
15
- end