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,55 +0,0 @@
1
- """Blog application models."""
2
-
3
- from django.db import models
4
- from django.contrib.auth.models import User
5
-
6
-
7
- class Post(models.Model):
8
- """Blog post model."""
9
-
10
- title = models.CharField(max_length=200)
11
- content = models.TextField()
12
- author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
13
- created_at = models.DateTimeField(auto_now_add=True)
14
- updated_at = models.DateTimeField(auto_now=True)
15
- published = models.BooleanField(default=False)
16
-
17
- class Meta:
18
- ordering = ["-created_at"]
19
-
20
- def __str__(self):
21
- return self.title
22
-
23
- def publish(self):
24
- """Publish the post."""
25
- self.published = True
26
- self.save()
27
-
28
-
29
- class Comment(models.Model):
30
- """Comment model for blog posts."""
31
-
32
- post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
33
- author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="comments")
34
- content = models.TextField()
35
- created_at = models.DateTimeField(auto_now_add=True)
36
-
37
- class Meta:
38
- ordering = ["-created_at"]
39
-
40
- def __str__(self):
41
- return f"Comment by {self.author.username} on {self.post.title}"
42
-
43
-
44
- class Category(models.Model):
45
- """Category model for organizing posts."""
46
-
47
- name = models.CharField(max_length=100, unique=True)
48
- description = models.TextField(blank=True)
49
- posts = models.ManyToManyField(Post, related_name="categories", blank=True)
50
-
51
- class Meta:
52
- verbose_name_plural = "categories"
53
-
54
- def __str__(self):
55
- return self.name
@@ -1,69 +0,0 @@
1
- """Blog application serializers."""
2
-
3
- from rest_framework import serializers
4
- from django.contrib.auth.models import User
5
- from .models import Post, Comment, Category
6
-
7
-
8
- class CategorySerializer(serializers.ModelSerializer):
9
- """Serializer for Category model."""
10
-
11
- class Meta:
12
- model = Category
13
- fields = ["id", "name", "description"]
14
-
15
-
16
- class CommentSerializer(serializers.ModelSerializer):
17
- """Serializer for Comment model."""
18
-
19
- author_username = serializers.CharField(source="author.username", read_only=True)
20
-
21
- class Meta:
22
- model = Comment
23
- fields = ["id", "post", "author", "author_username", "content", "created_at"]
24
- read_only_fields = ["author"]
25
-
26
-
27
- class PostSerializer(serializers.ModelSerializer):
28
- """Serializer for Post model."""
29
-
30
- author_username = serializers.CharField(source="author.username", read_only=True)
31
- comments_count = serializers.IntegerField(source="comments.count", read_only=True)
32
- categories = CategorySerializer(many=True, read_only=True)
33
-
34
- class Meta:
35
- model = Post
36
- fields = [
37
- "id",
38
- "title",
39
- "content",
40
- "author",
41
- "author_username",
42
- "created_at",
43
- "updated_at",
44
- "published",
45
- "comments_count",
46
- "categories",
47
- ]
48
- read_only_fields = ["author"]
49
-
50
-
51
- class PostCreateUpdateSerializer(serializers.ModelSerializer):
52
- """Serializer for creating and updating posts."""
53
-
54
- category_ids = serializers.ListField(
55
- child=serializers.IntegerField(), write_only=True, required=False
56
- )
57
-
58
- class Meta:
59
- model = Post
60
- fields = ["id", "title", "content", "published", "category_ids"]
61
-
62
- def create(self, validated_data):
63
- """Create a new post with categories."""
64
- category_ids = validated_data.pop("category_ids", [])
65
- post = Post.objects.create(**validated_data)
66
- if category_ids:
67
- categories = Category.objects.filter(id__in=category_ids)
68
- post.categories.set(categories)
69
- return post
@@ -1,14 +0,0 @@
1
- """Blog application URL configuration."""
2
-
3
- from django.urls import path, include
4
- from rest_framework.routers import DefaultRouter
5
- from .views import PostViewSet, CommentViewSet, CategoryViewSet
6
-
7
- router = DefaultRouter()
8
- router.register(r"posts", PostViewSet)
9
- router.register(r"comments", CommentViewSet)
10
- router.register(r"categories", CategoryViewSet)
11
-
12
- urlpatterns = [
13
- path("", include(router.urls)),
14
- ]
@@ -1,96 +0,0 @@
1
- """Blog application views."""
2
-
3
- from rest_framework import viewsets, status
4
- from rest_framework.decorators import action
5
- from rest_framework.response import Response
6
- from rest_framework.permissions import IsAuthenticated, AllowAny
7
- from django.contrib.auth.models import User
8
- from .models import Post, Comment, Category
9
- from .serializers import (
10
- PostSerializer,
11
- PostCreateUpdateSerializer,
12
- CommentSerializer,
13
- CategorySerializer,
14
- )
15
-
16
-
17
- class PostViewSet(viewsets.ModelViewSet):
18
- """ViewSet for blog posts."""
19
-
20
- queryset = Post.objects.all()
21
- permission_classes = [IsAuthenticated]
22
-
23
- def get_serializer_class(self):
24
- """Return appropriate serializer class."""
25
- if self.action in ["create", "update", "partial_update"]:
26
- return PostCreateUpdateSerializer
27
- return PostSerializer
28
-
29
- def get_permissions(self):
30
- """Allow anyone to view published posts."""
31
- if self.action in ["list", "retrieve"]:
32
- return [AllowAny()]
33
- return [IsAuthenticated()]
34
-
35
- def perform_create(self, serializer):
36
- """Set the author to the current user."""
37
- serializer.save(author=self.request.user)
38
-
39
- @action(detail=True, methods=["post"])
40
- def publish(self, request, pk=None):
41
- """Publish a blog post."""
42
- post = self.get_object()
43
- post.publish()
44
- return Response({"status": "post published"})
45
-
46
- @action(detail=False, methods=["get"])
47
- def my_posts(self, request):
48
- """Get posts by current user."""
49
- posts = Post.objects.filter(author=request.user)
50
- serializer = PostSerializer(posts, many=True)
51
- return Response(serializer.data)
52
-
53
- @action(detail=False, methods=["get"])
54
- def published(self, request):
55
- """Get all published posts."""
56
- posts = Post.objects.filter(published=True)
57
- serializer = PostSerializer(posts, many=True)
58
- return Response(serializer.data)
59
-
60
-
61
- class CommentViewSet(viewsets.ModelViewSet):
62
- """ViewSet for comments."""
63
-
64
- queryset = Comment.objects.all()
65
- serializer_class = CommentSerializer
66
- permission_classes = [IsAuthenticated]
67
-
68
- def perform_create(self, serializer):
69
- """Set the author to the current user."""
70
- serializer.save(author=self.request.user)
71
-
72
- def get_queryset(self):
73
- """Filter comments by post if provided."""
74
- queryset = Comment.objects.all()
75
- post_id = self.request.query_params.get("post", None)
76
- if post_id:
77
- queryset = queryset.filter(post_id=post_id)
78
- return queryset
79
-
80
-
81
- class CategoryViewSet(viewsets.ModelViewSet):
82
- """ViewSet for categories."""
83
-
84
- queryset = Category.objects.all()
85
- serializer_class = CategorySerializer
86
- permission_classes = [AllowAny]
87
-
88
- @action(detail=True, methods=["get"])
89
- def posts(self, request, pk=None):
90
- """Get posts in this category."""
91
- category = self.get_object()
92
- posts = category.posts.filter(published=True)
93
- from .serializers import PostSerializer
94
-
95
- serializer = PostSerializer(posts, many=True)
96
- return Response(serializer.data)
File without changes
@@ -1,90 +0,0 @@
1
- """
2
- Django settings for django_app project.
3
- """
4
-
5
- from pathlib import Path
6
-
7
- BASE_DIR = Path(__file__).resolve().parent.parent
8
-
9
- SECRET_KEY = "django-insecure-test-key-not-for-production"
10
-
11
- DEBUG = True
12
-
13
- ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
14
-
15
- INSTALLED_APPS = [
16
- "django.contrib.admin",
17
- "django.contrib.auth",
18
- "django.contrib.contenttypes",
19
- "django.contrib.sessions",
20
- "django.contrib.messages",
21
- "django.contrib.staticfiles",
22
- "rest_framework",
23
- "blog",
24
- "users",
25
- ]
26
-
27
- MIDDLEWARE = [
28
- "django.middleware.security.SecurityMiddleware",
29
- "django.contrib.sessions.middleware.SessionMiddleware",
30
- "django.middleware.common.CommonMiddleware",
31
- "django.middleware.csrf.CsrfViewMiddleware",
32
- "django.contrib.auth.middleware.AuthenticationMiddleware",
33
- "django.contrib.messages.middleware.MessageMiddleware",
34
- "django.middleware.clickjacking.XFrameOptionsMiddleware",
35
- ]
36
-
37
- ROOT_URLCONF = "django_app.urls"
38
-
39
- TEMPLATES = [
40
- {
41
- "BACKEND": "django.template.backends.django.DjangoTemplates",
42
- "DIRS": [],
43
- "APP_DIRS": True,
44
- "OPTIONS": {
45
- "context_processors": [
46
- "django.template.context_processors.debug",
47
- "django.template.context_processors.request",
48
- "django.contrib.auth.context_processors.auth",
49
- "django.contrib.messages.context_processors.messages",
50
- ],
51
- },
52
- },
53
- ]
54
-
55
- WSGI_APPLICATION = "django_app.wsgi.application"
56
-
57
- DATABASES = {
58
- "default": {
59
- "ENGINE": "django.db.backends.sqlite3",
60
- "NAME": BASE_DIR / "db.sqlite3",
61
- }
62
- }
63
-
64
- AUTH_PASSWORD_VALIDATORS = [
65
- {
66
- "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
67
- },
68
- {
69
- "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
70
- },
71
- ]
72
-
73
- LANGUAGE_CODE = "en-us"
74
- TIME_ZONE = "UTC"
75
- USE_I18N = True
76
- USE_TZ = True
77
-
78
- STATIC_URL = "static/"
79
-
80
- DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
81
-
82
- REST_FRAMEWORK = {
83
- "DEFAULT_AUTHENTICATION_CLASSES": [
84
- "rest_framework.authentication.SessionAuthentication",
85
- "rest_framework.authentication.TokenAuthentication",
86
- ],
87
- "DEFAULT_PERMISSION_CLASSES": [
88
- "rest_framework.permissions.IsAuthenticated",
89
- ],
90
- }
@@ -1,11 +0,0 @@
1
- """django_app URL configuration."""
2
-
3
- from django.contrib import admin
4
- from django.urls import path, include
5
-
6
- urlpatterns = [
7
- path("admin/", admin.site.urls),
8
- path("api/blog/", include("blog.urls")),
9
- path("api/users/", include("users.urls")),
10
- path("api-auth/", include("rest_framework.urls")),
11
- ]
@@ -1,9 +0,0 @@
1
- """WSGI config for django_app project."""
2
-
3
- import os
4
-
5
- from django.core.wsgi import get_wsgi_application
6
-
7
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_app.settings")
8
-
9
- application = get_wsgi_application()
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env python
2
- """Django's command-line utility for administrative tasks."""
3
-
4
- import os
5
- import sys
6
-
7
-
8
- def main():
9
- """Run administrative tasks."""
10
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_app.settings")
11
- try:
12
- from django.core.management import execute_from_command_line
13
- except ImportError as exc:
14
- raise ImportError(
15
- "Couldn't import Django. Are you sure it's installed and "
16
- "available on your PYTHONPATH environment variable? Did you "
17
- "forget to activate a virtual environment?"
18
- ) from exc
19
- execute_from_command_line(sys.argv)
20
-
21
-
22
- if __name__ == "__main__":
23
- main()
@@ -1,3 +0,0 @@
1
- Django>=4.2.0,<5.0
2
- djangorestframework>=3.14.0
3
- Pillow>=10.0.0
File without changes
@@ -1,42 +0,0 @@
1
- """Users application admin configuration."""
2
-
3
- from django.contrib import admin
4
- from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
5
- from django.contrib.auth.models import User
6
- from .models import UserProfile, Follow
7
-
8
-
9
- class UserProfileInline(admin.StackedInline):
10
- """Inline admin for UserProfile."""
11
-
12
- model = UserProfile
13
- can_delete = False
14
- verbose_name_plural = "Profile"
15
-
16
-
17
- class UserAdmin(BaseUserAdmin):
18
- """Extended User admin with profile."""
19
-
20
- inlines = [UserProfileInline]
21
- list_display = [
22
- "username",
23
- "email",
24
- "first_name",
25
- "last_name",
26
- "is_staff",
27
- "date_joined",
28
- ]
29
-
30
-
31
- # Re-register UserAdmin
32
- admin.site.unregister(User)
33
- admin.site.register(User, UserAdmin)
34
-
35
-
36
- @admin.register(Follow)
37
- class FollowAdmin(admin.ModelAdmin):
38
- """Admin configuration for Follow model."""
39
-
40
- list_display = ["follower", "following", "created_at"]
41
- list_filter = ["created_at"]
42
- search_fields = ["follower__username", "following__username"]
@@ -1,54 +0,0 @@
1
- """Users application models."""
2
-
3
- from django.db import models
4
- from django.contrib.auth.models import User
5
- from django.db.models.signals import post_save
6
- from django.dispatch import receiver
7
-
8
-
9
- class UserProfile(models.Model):
10
- """Extended user profile model."""
11
-
12
- user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
13
- bio = models.TextField(max_length=500, blank=True)
14
- location = models.CharField(max_length=100, blank=True)
15
- birth_date = models.DateField(null=True, blank=True)
16
- avatar = models.ImageField(upload_to="avatars/", blank=True)
17
- website = models.URLField(blank=True)
18
- twitter = models.CharField(max_length=100, blank=True)
19
- github = models.CharField(max_length=100, blank=True)
20
-
21
- def __str__(self):
22
- return f"{self.user.username} Profile"
23
-
24
-
25
- @receiver(post_save, sender=User)
26
- def create_user_profile(sender, instance, created, **kwargs):
27
- """Create a user profile when a new user is created."""
28
- if created:
29
- UserProfile.objects.create(user=instance)
30
-
31
-
32
- @receiver(post_save, sender=User)
33
- def save_user_profile(sender, instance, **kwargs):
34
- """Save user profile when user is saved."""
35
- instance.profile.save()
36
-
37
-
38
- class Follow(models.Model):
39
- """Follow relationship model."""
40
-
41
- follower = models.ForeignKey(
42
- User, on_delete=models.CASCADE, related_name="following"
43
- )
44
- following = models.ForeignKey(
45
- User, on_delete=models.CASCADE, related_name="followers"
46
- )
47
- created_at = models.DateTimeField(auto_now_add=True)
48
-
49
- class Meta:
50
- unique_together = ["follower", "following"]
51
- ordering = ["-created_at"]
52
-
53
- def __str__(self):
54
- return f"{self.follower.username} follows {self.following.username}"
@@ -1,113 +0,0 @@
1
- """Users application serializers."""
2
-
3
- from rest_framework import serializers
4
- from django.contrib.auth.models import User
5
- from .models import UserProfile, Follow
6
-
7
-
8
- class UserProfileSerializer(serializers.ModelSerializer):
9
- """Serializer for UserProfile model."""
10
-
11
- class Meta:
12
- model = UserProfile
13
- fields = [
14
- "bio",
15
- "location",
16
- "birth_date",
17
- "avatar",
18
- "website",
19
- "twitter",
20
- "github",
21
- ]
22
-
23
-
24
- class UserSerializer(serializers.ModelSerializer):
25
- """Serializer for User model."""
26
-
27
- profile = UserProfileSerializer()
28
- posts_count = serializers.IntegerField(source="posts.count", read_only=True)
29
- followers_count = serializers.IntegerField(source="followers.count", read_only=True)
30
- following_count = serializers.IntegerField(source="following.count", read_only=True)
31
-
32
- class Meta:
33
- model = User
34
- fields = [
35
- "id",
36
- "username",
37
- "email",
38
- "first_name",
39
- "last_name",
40
- "profile",
41
- "posts_count",
42
- "followers_count",
43
- "following_count",
44
- "date_joined",
45
- ]
46
- read_only_fields = ["date_joined"]
47
-
48
-
49
- class UserCreateSerializer(serializers.ModelSerializer):
50
- """Serializer for creating new users."""
51
-
52
- password = serializers.CharField(write_only=True)
53
- password_confirm = serializers.CharField(write_only=True)
54
-
55
- class Meta:
56
- model = User
57
- fields = [
58
- "username",
59
- "email",
60
- "password",
61
- "password_confirm",
62
- "first_name",
63
- "last_name",
64
- ]
65
-
66
- def validate(self, data):
67
- """Validate that passwords match."""
68
- if data["password"] != data["password_confirm"]:
69
- raise serializers.ValidationError("Passwords don't match")
70
- return data
71
-
72
- def create(self, validated_data):
73
- """Create a new user."""
74
- validated_data.pop("password_confirm")
75
- user = User.objects.create_user(**validated_data)
76
- return user
77
-
78
-
79
- class FollowSerializer(serializers.ModelSerializer):
80
- """Serializer for Follow model."""
81
-
82
- follower_username = serializers.CharField(
83
- source="follower.username", read_only=True
84
- )
85
- following_username = serializers.CharField(
86
- source="following.username", read_only=True
87
- )
88
-
89
- class Meta:
90
- model = Follow
91
- fields = [
92
- "id",
93
- "follower",
94
- "follower_username",
95
- "following",
96
- "following_username",
97
- "created_at",
98
- ]
99
- read_only_fields = ["follower"]
100
-
101
-
102
- class ChangePasswordSerializer(serializers.Serializer):
103
- """Serializer for password change."""
104
-
105
- old_password = serializers.CharField(required=True)
106
- new_password = serializers.CharField(required=True)
107
- new_password_confirm = serializers.CharField(required=True)
108
-
109
- def validate(self, data):
110
- """Validate new passwords match."""
111
- if data["new_password"] != data["new_password_confirm"]:
112
- raise serializers.ValidationError("New passwords don't match")
113
- return data
@@ -1,13 +0,0 @@
1
- """Users application URL configuration."""
2
-
3
- from django.urls import path, include
4
- from rest_framework.routers import DefaultRouter
5
- from .views import UserViewSet, UserProfileViewSet
6
-
7
- router = DefaultRouter()
8
- router.register(r"users", UserViewSet)
9
- router.register(r"profiles", UserProfileViewSet)
10
-
11
- urlpatterns = [
12
- path("", include(router.urls)),
13
- ]