fastapi-fullstack 0.1.7__py3-none-any.whl

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 (241) hide show
  1. fastapi_fullstack-0.1.7.dist-info/METADATA +739 -0
  2. fastapi_fullstack-0.1.7.dist-info/RECORD +241 -0
  3. fastapi_fullstack-0.1.7.dist-info/WHEEL +4 -0
  4. fastapi_fullstack-0.1.7.dist-info/entry_points.txt +2 -0
  5. fastapi_fullstack-0.1.7.dist-info/licenses/LICENSE +21 -0
  6. fastapi_gen/__init__.py +3 -0
  7. fastapi_gen/cli.py +442 -0
  8. fastapi_gen/config.py +356 -0
  9. fastapi_gen/generator.py +207 -0
  10. fastapi_gen/prompts.py +874 -0
  11. fastapi_gen/template/VARIABLES.md +276 -0
  12. fastapi_gen/template/cookiecutter.json +93 -0
  13. fastapi_gen/template/hooks/post_gen_project.py +355 -0
  14. fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example +56 -0
  15. fastapi_gen/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +150 -0
  16. fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore +109 -0
  17. fastapi_gen/template/{{cookiecutter.project_slug}}/AGENTS.md +55 -0
  18. fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +99 -0
  19. fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile +315 -0
  20. fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +768 -0
  21. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.dockerignore +60 -0
  22. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +155 -0
  23. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +32 -0
  24. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/Dockerfile +56 -0
  25. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +76 -0
  26. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +30 -0
  27. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
  28. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic.ini +48 -0
  29. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +3 -0
  30. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py +447 -0
  31. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +23 -0
  32. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +226 -0
  33. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +226 -0
  34. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +10 -0
  35. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +13 -0
  36. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +17 -0
  37. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +1 -0
  38. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +541 -0
  39. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +98 -0
  40. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +10 -0
  41. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +9 -0
  42. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +87 -0
  43. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +902 -0
  44. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +395 -0
  45. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +498 -0
  46. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +227 -0
  47. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +275 -0
  48. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +205 -0
  49. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +168 -0
  50. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +333 -0
  51. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +477 -0
  52. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +46 -0
  53. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +221 -0
  54. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +14 -0
  55. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +88 -0
  56. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +117 -0
  57. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +75 -0
  58. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +28 -0
  59. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +266 -0
  60. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +5 -0
  61. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +23 -0
  62. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +267 -0
  63. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +153 -0
  64. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +122 -0
  65. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +101 -0
  66. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +99 -0
  67. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +23 -0
  68. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +58 -0
  69. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +271 -0
  70. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +102 -0
  71. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +7 -0
  72. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +41 -0
  73. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +31 -0
  74. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +319 -0
  75. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +96 -0
  76. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +126 -0
  77. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +218 -0
  78. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +244 -0
  79. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +130 -0
  80. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +334 -0
  81. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +9 -0
  82. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +73 -0
  83. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +49 -0
  84. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +154 -0
  85. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +838 -0
  86. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +222 -0
  87. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +318 -0
  88. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +322 -0
  89. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +358 -0
  90. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +50 -0
  91. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +57 -0
  92. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +192 -0
  93. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +52 -0
  94. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +42 -0
  95. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +31 -0
  96. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +64 -0
  97. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +89 -0
  98. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +38 -0
  99. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +850 -0
  100. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +246 -0
  101. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +333 -0
  102. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +432 -0
  103. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +561 -0
  104. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +5 -0
  105. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +64 -0
  106. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +38 -0
  107. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +25 -0
  108. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +106 -0
  109. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +29 -0
  110. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +92 -0
  111. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +1 -0
  112. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +438 -0
  113. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +180 -0
  114. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
  115. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +1 -0
  116. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +1 -0
  117. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +242 -0
  118. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +151 -0
  119. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +113 -0
  120. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +310 -0
  121. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +253 -0
  122. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +151 -0
  123. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +890 -0
  124. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +261 -0
  125. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +183 -0
  126. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +173 -0
  127. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +143 -0
  128. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +118 -0
  129. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +181 -0
  130. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +124 -0
  131. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +363 -0
  132. fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +85 -0
  133. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +242 -0
  134. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +31 -0
  135. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +435 -0
  136. fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +241 -0
  137. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/adding_features.md +132 -0
  138. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/architecture.md +63 -0
  139. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/patterns.md +161 -0
  140. fastapi_gen/template/{{cookiecutter.project_slug}}/docs/testing.md +120 -0
  141. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +40 -0
  142. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.env.example +12 -0
  143. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.gitignore +45 -0
  144. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +19 -0
  145. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +11 -0
  146. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +44 -0
  147. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/README.md +648 -0
  148. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +49 -0
  149. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +134 -0
  150. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +207 -0
  151. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +73 -0
  152. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +14 -0
  153. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +84 -0
  154. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +84 -0
  155. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +76 -0
  156. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/package.json +69 -0
  157. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +101 -0
  158. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +7 -0
  159. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +11 -0
  160. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +5 -0
  161. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +5 -0
  162. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +48 -0
  163. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +99 -0
  164. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +17 -0
  165. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +152 -0
  166. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +113 -0
  167. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +46 -0
  168. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +73 -0
  169. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +58 -0
  170. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +24 -0
  171. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +39 -0
  172. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +50 -0
  173. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +54 -0
  174. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +26 -0
  175. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +41 -0
  176. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +108 -0
  177. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +73 -0
  178. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +21 -0
  179. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +323 -0
  180. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +22 -0
  181. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +29 -0
  182. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +2 -0
  183. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +120 -0
  184. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +153 -0
  185. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +234 -0
  186. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +72 -0
  187. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +328 -0
  188. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +46 -0
  189. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +11 -0
  190. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +295 -0
  191. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +167 -0
  192. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +79 -0
  193. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +18 -0
  194. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +79 -0
  195. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +32 -0
  196. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +3 -0
  197. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +97 -0
  198. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +65 -0
  199. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +2 -0
  200. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +82 -0
  201. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +7 -0
  202. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +53 -0
  203. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +105 -0
  204. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +35 -0
  205. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +75 -0
  206. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +56 -0
  207. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +82 -0
  208. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +13 -0
  209. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +21 -0
  210. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +21 -0
  211. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +109 -0
  212. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +7 -0
  213. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +97 -0
  214. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +203 -0
  215. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +181 -0
  216. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +165 -0
  217. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +105 -0
  218. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +37 -0
  219. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +90 -0
  220. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +39 -0
  221. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +78 -0
  222. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +44 -0
  223. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +44 -0
  224. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +31 -0
  225. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +72 -0
  226. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +64 -0
  227. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +17 -0
  228. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +65 -0
  229. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +76 -0
  230. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +9 -0
  231. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +255 -0
  232. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +17 -0
  233. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +44 -0
  234. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +27 -0
  235. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +52 -0
  236. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +83 -0
  237. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +49 -0
  238. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +10 -0
  239. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +28 -0
  240. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +36 -0
  241. fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/vitest.setup.ts +56 -0
@@ -0,0 +1,55 @@
1
+ # AGENTS.md
2
+
3
+ This file provides guidance for AI coding agents (Codex, Copilot, Cursor, Zed, OpenCode).
4
+
5
+ ## Project Overview
6
+
7
+ **{{ cookiecutter.project_name }}** - FastAPI application.
8
+
9
+ **Stack:** FastAPI + Pydantic v2
10
+ {%- if cookiecutter.use_postgresql %}, PostgreSQL{%- endif %}
11
+ {%- if cookiecutter.use_mongodb %}, MongoDB{%- endif %}
12
+ {%- if cookiecutter.use_jwt %}, JWT auth{%- endif %}
13
+ {%- if cookiecutter.enable_redis %}, Redis{%- endif %}
14
+ {%- if cookiecutter.use_frontend %}, Next.js 15{%- endif %}
15
+
16
+ ## Commands
17
+
18
+ ```bash
19
+ # Run server
20
+ cd backend && uv run uvicorn app.main:app --reload
21
+
22
+ # Tests & lint
23
+ pytest
24
+ ruff check . --fix && ruff format .
25
+ {%- if cookiecutter.use_postgresql or cookiecutter.use_sqlite %}
26
+
27
+ # Migrations
28
+ uv run alembic upgrade head
29
+ {%- endif %}
30
+ ```
31
+
32
+ ## Project Structure
33
+
34
+ ```
35
+ backend/app/
36
+ ├── api/routes/v1/ # Endpoints
37
+ ├── services/ # Business logic
38
+ ├── repositories/ # Data access
39
+ ├── schemas/ # Pydantic models
40
+ ├── db/models/ # DB models
41
+ └── commands/ # CLI commands
42
+ ```
43
+
44
+ ## Key Conventions
45
+
46
+ - `db.flush()` in repositories, not `commit()`
47
+ - Services raise `NotFoundError`, `AlreadyExistsError`
48
+ - Separate `Create`, `Update`, `Response` schemas
49
+
50
+ ## More Info
51
+
52
+ - `docs/architecture.md` - Architecture details
53
+ - `docs/adding_features.md` - How to add features
54
+ - `docs/testing.md` - Testing guide
55
+ - `docs/patterns.md` - Code patterns
@@ -0,0 +1,99 @@
1
+ # CLAUDE.md
2
+
3
+ ## Project Overview
4
+
5
+ **{{ cookiecutter.project_name }}** - FastAPI application generated with [Full-Stack FastAPI + Next.js Template](https://github.com/vstorm-co/full-stack-fastapi-nextjs-llm-template).
6
+
7
+ **Stack:** FastAPI + Pydantic v2
8
+ {%- if cookiecutter.use_postgresql %}, PostgreSQL (async){%- endif %}
9
+ {%- if cookiecutter.use_mongodb %}, MongoDB (async){%- endif %}
10
+ {%- if cookiecutter.use_sqlite %}, SQLite{%- endif %}
11
+ {%- if cookiecutter.use_jwt %}, JWT auth{%- endif %}
12
+ {%- if cookiecutter.enable_redis %}, Redis{%- endif %}
13
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_pydantic_ai %}, PydanticAI{%- endif %}
14
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_langchain %}, LangChain{%- endif %}
15
+ {%- if cookiecutter.use_celery %}, Celery{%- endif %}
16
+ {%- if cookiecutter.use_taskiq %}, Taskiq{%- endif %}
17
+ {%- if cookiecutter.use_frontend %}, Next.js 15{%- endif %}
18
+
19
+ ## Commands
20
+
21
+ ```bash
22
+ # Backend
23
+ cd backend
24
+ uv run uvicorn app.main:app --reload --port {{ cookiecutter.backend_port }}
25
+ pytest
26
+ ruff check . --fix && ruff format .
27
+ {%- if cookiecutter.use_postgresql or cookiecutter.use_sqlite %}
28
+
29
+ # Database
30
+ uv run alembic upgrade head
31
+ uv run alembic revision --autogenerate -m "Description"
32
+ {%- endif %}
33
+ {%- if cookiecutter.use_frontend %}
34
+
35
+ # Frontend
36
+ cd frontend
37
+ bun dev
38
+ bun test
39
+ {%- endif %}
40
+ {%- if cookiecutter.enable_docker %}
41
+
42
+ # Docker
43
+ docker compose up -d
44
+ {%- endif %}
45
+ ```
46
+
47
+ ## Project Structure
48
+
49
+ ```
50
+ backend/app/
51
+ ├── api/routes/v1/ # HTTP endpoints
52
+ ├── services/ # Business logic
53
+ ├── repositories/ # Data access
54
+ ├── schemas/ # Pydantic models
55
+ ├── db/models/ # Database models
56
+ ├── core/config.py # Settings
57
+ {%- if cookiecutter.enable_ai_agent %}
58
+ ├── agents/ # AI agents
59
+ {%- endif %}
60
+ └── commands/ # CLI commands
61
+ ```
62
+
63
+ ## Key Conventions
64
+
65
+ - Use `db.flush()` in repositories (not `commit`)
66
+ - Services raise domain exceptions (`NotFoundError`, `AlreadyExistsError`)
67
+ - Schemas: separate `Create`, `Update`, `Response` models
68
+ - Commands auto-discovered from `app/commands/`
69
+
70
+ ## Where to Find More Info
71
+
72
+ Before starting complex tasks, read relevant docs:
73
+ - **Architecture details:** `docs/architecture.md`
74
+ - **Adding features:** `docs/adding_features.md`
75
+ - **Testing guide:** `docs/testing.md`
76
+ - **Code patterns:** `docs/patterns.md`
77
+
78
+ ## Environment Variables
79
+
80
+ Key variables in `.env`:
81
+ ```bash
82
+ ENVIRONMENT=local
83
+ {%- if cookiecutter.use_postgresql %}
84
+ POSTGRES_HOST=localhost
85
+ POSTGRES_PASSWORD=secret
86
+ {%- endif %}
87
+ {%- if cookiecutter.use_jwt %}
88
+ SECRET_KEY=change-me-use-openssl-rand-hex-32
89
+ {%- endif %}
90
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_openai %}
91
+ OPENAI_API_KEY=sk-...
92
+ {%- endif %}
93
+ {%- if cookiecutter.enable_ai_agent and cookiecutter.use_anthropic %}
94
+ ANTHROPIC_API_KEY=sk-ant-...
95
+ {%- endif %}
96
+ {%- if cookiecutter.enable_logfire %}
97
+ LOGFIRE_TOKEN=your-token
98
+ {%- endif %}
99
+ ```
@@ -0,0 +1,315 @@
1
+ .PHONY: install format lint test run clean help db-init
2
+
3
+ # === Setup ===
4
+ install:
5
+ uv sync --directory backend --dev
6
+ {%- if cookiecutter.enable_precommit %}
7
+ @if git rev-parse --git-dir > /dev/null 2>&1; then \
8
+ uv run --directory backend pre-commit install; \
9
+ else \
10
+ echo "⚠️ Not a git repository - skipping pre-commit install"; \
11
+ echo " Run 'git init && make install' to set up pre-commit hooks"; \
12
+ fi
13
+ {%- endif %}
14
+ @echo ""
15
+ @echo "✅ Installation complete!"
16
+ @echo ""
17
+ @echo "Next steps:"
18
+ {%- if not cookiecutter.generate_env %}
19
+ @echo " • cd backend && cp .env.example .env"
20
+ @echo " • Edit backend/.env with your settings"
21
+ {%- endif %}
22
+ {%- if cookiecutter.use_postgresql %}
23
+ @echo " • make docker-db # Start PostgreSQL"
24
+ @echo " • make db-upgrade # Apply migrations"
25
+ {%- endif %}
26
+ @echo " • make run # Start development server"
27
+ {%- if cookiecutter.generate_env %}
28
+ @echo ""
29
+ @echo "Note: backend/.env is pre-configured for development"
30
+ {%- endif %}
31
+
32
+ # === Code Quality ===
33
+ format:
34
+ uv run --directory backend ruff format app tests cli
35
+ uv run --directory backend ruff check app tests cli --fix
36
+
37
+ lint:
38
+ uv run --directory backend ruff check app tests cli
39
+ uv run --directory backend ruff format app tests cli --check
40
+ uv run --directory backend mypy app
41
+
42
+ # === Testing ===
43
+ test:
44
+ uv run --directory backend pytest tests/ -v
45
+
46
+ test-cov:
47
+ uv run --directory backend pytest tests/ -v --cov=app --cov-report=html --cov-report=term-missing
48
+
49
+ {%- if cookiecutter.use_postgresql or cookiecutter.use_sqlite %}
50
+
51
+ # === Database ===
52
+ {%- if cookiecutter.use_postgresql and cookiecutter.enable_docker %}
53
+ db-init: docker-db
54
+ @echo "Waiting for PostgreSQL to be ready..."
55
+ @sleep 3
56
+ uv run --directory backend {{ cookiecutter.project_slug }} db upgrade
57
+ @echo ""
58
+ @echo "✅ Database initialized!"
59
+ {%- else %}
60
+ db-init:
61
+ uv run --directory backend {{ cookiecutter.project_slug }} db upgrade
62
+ @echo ""
63
+ @echo "✅ Database initialized!"
64
+ {%- endif %}
65
+
66
+ db-migrate:
67
+ @read -p "Migration message: " msg; \
68
+ uv run --directory backend {{ cookiecutter.project_slug }} db migrate -m "$$msg"
69
+
70
+ db-upgrade:
71
+ uv run --directory backend {{ cookiecutter.project_slug }} db upgrade
72
+
73
+ db-downgrade:
74
+ uv run --directory backend {{ cookiecutter.project_slug }} db downgrade
75
+
76
+ db-current:
77
+ uv run --directory backend {{ cookiecutter.project_slug }} db current
78
+
79
+ db-history:
80
+ uv run --directory backend {{ cookiecutter.project_slug }} db history
81
+ {%- endif %}
82
+
83
+ # === Server ===
84
+ run:
85
+ uv run --directory backend {{ cookiecutter.project_slug }} server run --reload
86
+
87
+ run-prod:
88
+ uv run --directory backend {{ cookiecutter.project_slug }} server run --host 0.0.0.0 --port 8000
89
+
90
+ routes:
91
+ uv run --directory backend {{ cookiecutter.project_slug }} server routes
92
+
93
+ {%- if cookiecutter.use_jwt %}
94
+
95
+ # === Users ===
96
+ create-admin:
97
+ @echo "Creating admin user..."
98
+ uv run --directory backend {{ cookiecutter.project_slug }} user create-admin
99
+
100
+ user-create:
101
+ uv run --directory backend {{ cookiecutter.project_slug }} user create
102
+
103
+ user-list:
104
+ uv run --directory backend {{ cookiecutter.project_slug }} user list
105
+ {%- endif %}
106
+
107
+ {%- if cookiecutter.use_celery %}
108
+
109
+ # === Celery ===
110
+ celery-worker:
111
+ uv run --directory backend {{ cookiecutter.project_slug }} celery worker
112
+
113
+ celery-beat:
114
+ uv run --directory backend {{ cookiecutter.project_slug }} celery beat
115
+
116
+ celery-flower:
117
+ uv run --directory backend {{ cookiecutter.project_slug }} celery flower
118
+ @echo ""
119
+ @echo "✅ Flower started at http://localhost:5555"
120
+ {%- endif %}
121
+
122
+ {%- if cookiecutter.use_taskiq %}
123
+
124
+ # === Taskiq ===
125
+ taskiq-worker:
126
+ uv run --directory backend {{ cookiecutter.project_slug }} taskiq worker
127
+
128
+ taskiq-scheduler:
129
+ uv run --directory backend {{ cookiecutter.project_slug }} taskiq scheduler
130
+ {%- endif %}
131
+
132
+ {%- if cookiecutter.enable_docker %}
133
+
134
+ # === Docker: Backend (Development) ===
135
+ docker-up:
136
+ docker-compose up -d
137
+ @echo ""
138
+ @echo "✅ Backend services started!"
139
+ @echo " API: http://localhost:{{ cookiecutter.backend_port }}"
140
+ @echo " Docs: http://localhost:{{ cookiecutter.backend_port }}/docs"
141
+ {%- if cookiecutter.use_celery %}
142
+ @echo " Flower: http://localhost:5555"
143
+ {%- endif %}
144
+ {%- if cookiecutter.use_postgresql %}
145
+ @echo " PostgreSQL: localhost:5432"
146
+ {%- endif %}
147
+ {%- if cookiecutter.enable_redis %}
148
+ @echo " Redis: localhost:6379"
149
+ {%- endif %}
150
+
151
+ docker-down:
152
+ docker-compose down
153
+ {%- if cookiecutter.use_frontend %}
154
+ docker-compose -f docker-compose.frontend.yml down 2>/dev/null || true
155
+ {%- endif %}
156
+
157
+ docker-logs:
158
+ docker-compose logs -f
159
+
160
+ docker-build:
161
+ docker-compose build
162
+
163
+ docker-shell:
164
+ docker-compose exec app /bin/bash
165
+
166
+ {%- if cookiecutter.use_frontend %}
167
+
168
+ # === Docker: Frontend (Development) ===
169
+ docker-frontend:
170
+ docker-compose -f docker-compose.frontend.yml up -d
171
+ @echo ""
172
+ @echo "✅ Frontend started!"
173
+ @echo " URL: http://localhost:{{ cookiecutter.frontend_port }}"
174
+ @echo ""
175
+ @echo "Note: Backend must be running (make docker-up)"
176
+
177
+ docker-frontend-down:
178
+ docker-compose -f docker-compose.frontend.yml down
179
+
180
+ docker-frontend-logs:
181
+ docker-compose -f docker-compose.frontend.yml logs -f
182
+
183
+ docker-frontend-build:
184
+ docker-compose -f docker-compose.frontend.yml build
185
+ {%- endif %}
186
+
187
+ # === Docker: Production (with Traefik) ===
188
+ docker-prod:
189
+ docker-compose -f docker-compose.prod.yml up -d
190
+ @echo ""
191
+ @echo "✅ Production services started with Traefik!"
192
+ @echo ""
193
+ @echo "Endpoints (replace DOMAIN with your domain):"
194
+ {%- if cookiecutter.use_frontend %}
195
+ @echo " Frontend: https://$$DOMAIN"
196
+ {%- endif %}
197
+ @echo " API: https://api.$$DOMAIN"
198
+ {%- if cookiecutter.use_celery %}
199
+ @echo " Flower: https://flower.$$DOMAIN"
200
+ {%- endif %}
201
+ @echo " Traefik: https://traefik.$$DOMAIN"
202
+
203
+ docker-prod-down:
204
+ docker-compose -f docker-compose.prod.yml down
205
+
206
+ docker-prod-logs:
207
+ docker-compose -f docker-compose.prod.yml logs -f
208
+
209
+ docker-prod-build:
210
+ docker-compose -f docker-compose.prod.yml build
211
+
212
+ {%- if cookiecutter.use_postgresql %}
213
+
214
+ # === Docker: Individual Services ===
215
+ docker-db:
216
+ docker-compose up -d db
217
+ @echo ""
218
+ @echo "✅ PostgreSQL started on port 5432"
219
+ @echo " Connection: postgresql://postgres:postgres@localhost:5432/{{ cookiecutter.project_slug }}"
220
+
221
+ docker-db-stop:
222
+ docker-compose stop db
223
+ {%- endif %}
224
+
225
+ {%- if cookiecutter.enable_redis %}
226
+
227
+ docker-redis:
228
+ docker-compose up -d redis
229
+ @echo ""
230
+ @echo "✅ Redis started on port 6379"
231
+
232
+ docker-redis-stop:
233
+ docker-compose stop redis
234
+ {%- endif %}
235
+ {%- endif %}
236
+
237
+ # === Cleanup ===
238
+ clean:
239
+ find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
240
+ find . -type d -name .pytest_cache -exec rm -rf {} + 2>/dev/null || true
241
+ find . -type d -name .ruff_cache -exec rm -rf {} + 2>/dev/null || true
242
+ find . -type d -name .mypy_cache -exec rm -rf {} + 2>/dev/null || true
243
+ rm -rf htmlcov/ .coverage coverage.xml
244
+
245
+ # === Help ===
246
+ help:
247
+ @echo ""
248
+ @echo "{{ cookiecutter.project_name }} - Available Commands"
249
+ @echo "======================================"
250
+ @echo ""
251
+ @echo "Setup:"
252
+ @echo " make install Install dependencies + pre-commit hooks"
253
+ @echo ""
254
+ @echo "Development:"
255
+ @echo " make run Start dev server (with hot reload)"
256
+ @echo " make test Run tests"
257
+ @echo " make lint Check code quality"
258
+ @echo " make format Auto-format code"
259
+ @echo ""
260
+ {%- if cookiecutter.use_postgresql or cookiecutter.use_sqlite %}
261
+ @echo "Database:"
262
+ @echo " make db-init Initialize database (start + migrate)"
263
+ @echo " make db-migrate Create new migration"
264
+ @echo " make db-upgrade Apply migrations"
265
+ @echo " make db-downgrade Rollback last migration"
266
+ @echo " make db-current Show current migration"
267
+ @echo ""
268
+ {%- endif %}
269
+ {%- if cookiecutter.use_jwt %}
270
+ @echo "Users:"
271
+ @echo " make create-admin Create admin user (for SQLAdmin access)"
272
+ @echo " make user-create Create new user (interactive)"
273
+ @echo " make user-list List all users"
274
+ @echo ""
275
+ {%- endif %}
276
+ {%- if cookiecutter.use_celery %}
277
+ @echo "Celery:"
278
+ @echo " make celery-worker Start Celery worker"
279
+ @echo " make celery-beat Start Celery beat scheduler"
280
+ @echo " make celery-flower Start Flower monitoring UI"
281
+ @echo ""
282
+ {%- endif %}
283
+ {%- if cookiecutter.use_taskiq %}
284
+ @echo "Taskiq:"
285
+ @echo " make taskiq-worker Start Taskiq worker"
286
+ @echo " make taskiq-scheduler Start Taskiq scheduler"
287
+ @echo ""
288
+ {%- endif %}
289
+ {%- if cookiecutter.enable_docker %}
290
+ @echo "Docker (Development):"
291
+ @echo " make docker-up Start backend services"
292
+ @echo " make docker-down Stop all services"
293
+ @echo " make docker-logs View backend logs"
294
+ @echo " make docker-build Build backend images"
295
+ {%- if cookiecutter.use_frontend %}
296
+ @echo " make docker-frontend Start frontend (separate)"
297
+ @echo " make docker-frontend-down Stop frontend"
298
+ {%- endif %}
299
+ {%- if cookiecutter.use_postgresql %}
300
+ @echo " make docker-db Start only PostgreSQL"
301
+ {%- endif %}
302
+ {%- if cookiecutter.enable_redis %}
303
+ @echo " make docker-redis Start only Redis"
304
+ {%- endif %}
305
+ @echo ""
306
+ @echo "Docker (Production with Traefik):"
307
+ @echo " make docker-prod Start production stack"
308
+ @echo " make docker-prod-down Stop production stack"
309
+ @echo " make docker-prod-logs View production logs"
310
+ @echo ""
311
+ {%- endif %}
312
+ @echo "Other:"
313
+ @echo " make routes Show all API routes"
314
+ @echo " make clean Clean cache files"
315
+ @echo ""