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.
- fastapi_fullstack-0.1.7.dist-info/METADATA +739 -0
- fastapi_fullstack-0.1.7.dist-info/RECORD +241 -0
- fastapi_fullstack-0.1.7.dist-info/WHEEL +4 -0
- fastapi_fullstack-0.1.7.dist-info/entry_points.txt +2 -0
- fastapi_fullstack-0.1.7.dist-info/licenses/LICENSE +21 -0
- fastapi_gen/__init__.py +3 -0
- fastapi_gen/cli.py +442 -0
- fastapi_gen/config.py +356 -0
- fastapi_gen/generator.py +207 -0
- fastapi_gen/prompts.py +874 -0
- fastapi_gen/template/VARIABLES.md +276 -0
- fastapi_gen/template/cookiecutter.json +93 -0
- fastapi_gen/template/hooks/post_gen_project.py +355 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.env.prod.example +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.github/workflows/ci.yml +150 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/.gitignore +109 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/AGENTS.md +55 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/CLAUDE.md +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/Makefile +315 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/README.md +768 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.dockerignore +60 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.env.example +155 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/.pre-commit-config.yaml +32 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/Dockerfile +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/env.py +76 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/script.py.mako +30 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic/versions/.gitkeep +0 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/alembic.ini +48 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/__init__.py +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/admin.py +447 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/__init__.py +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/assistant.py +226 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/langchain_assistant.py +226 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/prompts.py +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/__init__.py +13 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/agents/tools/datetime_tool.py +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/__init__.py +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/deps.py +541 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/exception_handlers.py +98 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/router.py +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/__init__.py +9 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/__init__.py +87 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/agent.py +902 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/auth.py +395 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/conversations.py +498 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/health.py +227 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/items.py +275 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/oauth.py +205 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/sessions.py +168 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/users.py +333 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/webhooks.py +477 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/routes/v1/ws.py +46 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/api/versioning.py +221 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/__init__.py +14 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/clients/redis.py +88 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/__init__.py +117 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/cleanup.py +75 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/example.py +28 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/commands/seed.py +266 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/__init__.py +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/cache.py +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/config.py +267 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/csrf.py +153 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/exceptions.py +122 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/logfire_setup.py +101 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/middleware.py +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/oauth.py +23 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/rate_limit.py +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/sanitize.py +271 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/core/security.py +102 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/__init__.py +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/base.py +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/__init__.py +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/conversation.py +319 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/item.py +96 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/session.py +126 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/user.py +218 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/models/webhook.py +244 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/db/session.py +130 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/main.py +334 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/__init__.py +9 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/pipelines/base.py +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/__init__.py +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/base.py +154 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/conversation.py +838 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/item.py +222 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/session.py +318 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/user.py +322 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/repositories/webhook.py +358 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/__init__.py +50 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/base.py +57 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/conversation.py +192 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/item.py +52 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/session.py +42 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/token.py +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/user.py +64 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/schemas/webhook.py +89 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/__init__.py +38 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/conversation.py +850 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/item.py +246 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/session.py +333 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/user.py +432 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/services/webhook.py +561 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/__init__.py +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/celery_app.py +64 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/taskiq_app.py +38 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/__init__.py +25 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/examples.py +106 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/schedules.py +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/app/worker/tasks/taskiq_examples.py +92 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/cli/__init__.py +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/cli/commands.py +438 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/pyproject.toml +180 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/scripts/.gitkeep +0 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/__init__.py +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/__init__.py +1 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_auth.py +242 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_exceptions.py +151 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_health.py +113 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_items.py +310 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/api/test_users.py +253 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/conftest.py +151 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_admin.py +890 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_agents.py +261 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_clients.py +183 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_commands.py +173 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_core.py +143 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_pipelines.py +118 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_repositories.py +181 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_security.py +124 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_services.py +363 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/backend/tests/test_worker.py +85 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.dev.yml +242 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.frontend.yml +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.prod.yml +435 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docker-compose.yml +241 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/adding_features.md +132 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/architecture.md +63 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/patterns.md +161 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/docs/testing.md +120 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.dockerignore +40 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.env.example +12 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.gitignore +45 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierignore +19 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/.prettierrc +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/Dockerfile +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/README.md +648 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.setup.ts +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/auth.spec.ts +134 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/chat.spec.ts +207 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/e2e/home.spec.ts +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/instrumentation.ts +14 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/en.json +84 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/messages/pl.json +84 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/next.config.ts +76 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/package.json +69 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/playwright.config.ts +101 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/postcss.config.mjs +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/layout.tsx +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/login/page.tsx +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(auth)/register/page.tsx +5 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/chat/page.tsx +48 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/dashboard/page.tsx +99 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/layout.tsx +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/(dashboard)/profile/page.tsx +152 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/auth/callback/page.tsx +113 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/layout.tsx +46 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/[locale]/page.tsx +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/login/route.ts +58 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/logout/route.ts +24 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/me/route.ts +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/oauth-callback/route.ts +50 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/refresh/route.ts +54 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/auth/register/route.ts +26 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/messages/route.ts +41 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/[id]/route.ts +108 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/conversations/route.ts +73 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/api/health/route.ts +21 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/globals.css +323 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/layout.tsx +22 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/app/providers.tsx +29 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/index.ts +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/login-form.tsx +120 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/auth/register-form.tsx +153 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-container.tsx +234 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/chat-input.tsx +72 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/conversation-sidebar.tsx +328 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/copy-button.tsx +46 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/index.ts +11 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/local-conversation-sidebar.tsx +295 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/markdown-content.tsx +167 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-item.tsx +79 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/message-list.tsx +18 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/chat/tool-call-card.tsx +79 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/google-icon.tsx +32 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/icons/index.ts +3 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/language-switcher.tsx +97 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/header.tsx +65 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/index.ts +2 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/layout/sidebar.tsx +82 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/index.ts +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-provider.tsx +53 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/theme/theme-toggle.tsx +105 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/badge.tsx +35 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.test.tsx +75 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/button.tsx +56 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/card.tsx +82 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/index.ts +13 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/input.tsx +21 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/label.tsx +21 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/components/ui/sheet.tsx +109 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/index.ts +7 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-auth.ts +97 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-chat.ts +203 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-conversations.ts +181 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-local-chat.ts +165 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/hooks/use-websocket.ts +105 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/i18n.ts +37 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/api-client.ts +90 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/constants.ts +39 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/server-api.ts +78 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.test.ts +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/lib/utils.ts +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/middleware.ts +31 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.test.ts +72 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/auth-store.ts +64 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-sidebar-store.ts +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/chat-store.ts +65 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/conversation-store.ts +76 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/index.ts +9 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/local-chat-store.ts +255 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/sidebar-store.ts +17 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/stores/theme-store.ts +44 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/api.ts +27 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/auth.ts +52 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/chat.ts +83 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/conversation.ts +49 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/src/types/index.ts +10 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/tsconfig.json +28 -0
- fastapi_gen/template/{{cookiecutter.project_slug}}/frontend/vitest.config.ts +36 -0
- 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 ""
|