From 2cb6436d155c90d3df015debeabcca7ac3d7959a Mon Sep 17 00:00:00 2001 From: Baptiste-Ferrand Date: Thu, 7 Aug 2025 12:11:20 +0200 Subject: [PATCH] update readme --- README.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++- image.png | Bin 0 -> 54776 bytes 2 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 image.png diff --git a/README.md b/README.md index fc4e5c5..a58521a 100644 --- a/README.md +++ b/README.md @@ -1 +1,142 @@ -# back \ No newline at end of file +# ๐Ÿš‚ Track&Train Backend + +> **A modern, modular, and testable backend for fitness & coaching platforms, built with Python, FastAPI, and a full Hexagonal Architecture.** + +--- + +## ๐Ÿ—๏ธ Project Architecture + +![Project Architecture Diagram](./image.png) + +- **Entrypoints**: FastAPI routers, schemas, and dependencies +- **Domain**: Pure business logic, models, and service orchestration +- **Adapters**: Infrastructure for SQL (Postgres/SQLAlchemy) and in-memory (for tests) +- **Tests**: Full test coverage for all features using in-memory adapters + +--- + +## โœจ Features + +- ๐Ÿง‘โ€๐Ÿ’ผ **User & Coach Management**: Register, login, promote users to coaches, manage roles +- ๐Ÿ‹๏ธ **Group Management**: Create, update, delete, join/leave groups, add/remove members +- ๐Ÿ† **Training & Exercise**: CRUD for trainings and exercises +- ๐Ÿฝ๏ธ **Diet**: CRUD for diets +- ๐Ÿ” **JWT Auth**: Secure endpoints with role-based access +- ๐Ÿงฉ **Hexagonal Architecture**: Clean separation of concerns, easy to test and extend +- ๐Ÿงช **Comprehensive Tests**: All business logic tested with in-memory adapters +- ๐Ÿš€ **Hot Reload**: Fast development with Docker volume binding + +--- + +## โš™๏ธ Installation & Usage + +### 1๏ธโƒฃ Local Development + +```bash +# 1. Copy environment variables +cp .env.example .env +# 2. Edit .env to set your secrets and DB connection + +# 3. Create and activate a virtual environment +uv sync +source .venv/bin/activate + +# 4. Start the API (with hot reload) +uvicorn src.main:app --reload --host 127.0.0.1 --port 8000 +``` + +- The API will be available at [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) + +### 2๏ธโƒฃ Docker Compose (API + Postgres) + +```bash +# 1. Copy environment variables +cp .env.example .env +# 2. Edit .env as needed + +# 3. Start everything (API + DB + hot reload) +docker compose up -d +``` + +- The backend is mounted with a volume on `src/` for instant code reload +- Database and backend are both started and networked automatically + +--- + +## ๐Ÿงช Running Tests + +- All tests are designed to run sequentially (not isolated per test) +- You can run all API tests in order with: + +```bash +pytest src/entrypoints/api/tests/profile.py src/entrypoints/api/tests/group.py src/entrypoints/api/tests/exercise.py src/entrypoints/api/tests/training.py src/entrypoints/api/tests/diet.py +``` + +- You can also run a single test file if needed, but tests are designed to be run in sequence for full state setup. + +--- + +## ๐Ÿ“‚ Main Project Structure + +``` +back/ +โ”œโ”€โ”€ src/ +โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”œโ”€โ”€ main.py # FastAPI app entrypoint +โ”‚ โ”œโ”€โ”€ container.py # Dependency injection container +โ”‚ โ”œโ”€โ”€ domain/ +โ”‚ โ”‚ โ”œโ”€โ”€ model/ # Domain models (Profile, Group, etc.) +โ”‚ โ”‚ โ”œโ”€โ”€ services/ # Business logic (service layer) +โ”‚ โ”‚ โ”œโ”€โ”€ ports/ # Interfaces (repositories, etc.) +โ”‚ โ”‚ โ”œโ”€โ”€ exceptions.py # Domain exceptions +โ”‚ โ”œโ”€โ”€ adapters/ +โ”‚ โ”‚ โ”œโ”€โ”€ sqlalchemy/ # SQLAlchemy (Postgres) implementation +โ”‚ โ”‚ โ”œโ”€โ”€ inmemory/ # In-memory implementation for tests +โ”‚ โ”œโ”€โ”€ entrypoints/ +โ”‚ โ”‚ โ”œโ”€โ”€ api/ # FastAPI routers, schemas, dependencies +โ”‚ โ”‚ โ””โ”€โ”€ tests/ # Pytest test files +โ”‚ โ””โ”€โ”€ ... +โ”œโ”€โ”€ Dockerfile +โ”œโ”€โ”€ docker-compose.yml +โ”œโ”€โ”€ pyproject.toml +โ”œโ”€โ”€ .env.example +โ””โ”€โ”€ README.md +``` + +--- + +## ๐Ÿ“ Example API Endpoints + +- `POST /profiles` โ†’ Register user +- `POST /profiles/login` โ†’ Login +- `PATCH /profiles/{id}/roles`โ†’ Promote user to coach +- `POST /groups` โ†’ Create group (coach/admin) +- `GET /groups` โ†’ List all groups +- `GET /groups/coachs/mine` โ†’ List all coaches for current user +- `POST /groups/{group_id}/members/{user_id}` โ†’ Add member +- `DELETE /groups/{group_id}/leave` โ†’ Leave group +- ...and many more! + +--- + +## ๐Ÿ’ก Why Hexagonal Architecture? + +- **Testability**: Swap adapters (SQL/in-memory) for real DB or fast tests +- **Maintainability**: Business logic is pure and isolated +- **Extensibility**: Add new adapters (e.g., REST, gRPC, CLI) without touching domain +- **Separation of Concerns**: Each layer has a single responsibility + +--- + +## ๐Ÿ› ๏ธ Contributing + +- Fork, branch, and submit PRs! +- All new features should include tests +- Please update the changelog for any user-facing changes + +--- + +## ๐Ÿง‘โ€๐Ÿ’ป Authors & License + +- Made with โค๏ธ by the Track&Train team +- MIT License \ No newline at end of file diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..2deee4852aece1006751f7faf3fa8cb41a12cc9e GIT binary patch literal 54776 zcmb@u1yq;owmpo2s34(;Al(Ltbb}xuAR!@2cO%`Y0)hfkA|atjgGh&@G*U{VbV_&E zw_ZWF+jI80_uT)t$8d=3U%XGPHP@VTJx}jQ-8ysn;%O8Vlrv(YLb50*$Iwtvj+&o5 z0l(=zN&Fc8I$|YzOAsZ!nP?LJaa>`{g9xRIk0Xi-~LL~*Xm#v-I;nbT@6 z;cc^vUNix^vGFuF%Kq*;X+nxx3D<>dDtEljTv0FO3CnaTSr*-mSZStQHE!khZ+|Z~ z&m&t#^RK_GPTFIddWbD}lH3D3);ehX2J(a8$s-Sin<7}7O4I5-eR`IY!(!7-_O1=@ z$@i#RQ(bX(B+2T*{SI-il8zIBTdb4+^2^I2s}14DetZ!5aTL5PGR0Sg-@5+OWBh!! z)65L|n8*Xbo5`9U9sEG?iUsY*Zv;;U{CvPb$%vm{AZkT+@Qyl~pYJ#t$9eEpL7m{A z?>HQit6)}0$azCU!>J4bC20+2p?{c|pHFl+h0=^E>diz4lS7V@k&&0jw%sVOI@M8V zKJ=K&BtSu5%lkh~$zSsnttDR;`SbA}{v4UNN$bx~zwvWqLTrZr?OdSXu^M->Y@e!E zP*8}Ak58^VVaWTa3Hx8y{g2@t?2zgtSI(c4iBewi_3PIeX0(pfdlMC&=*Vsg}YC6q*@JC zpdtsmx$2)b2=42>&E<*Uu&}zuaORFl=f-!ny*#K%q<_rHuk&8v4T~W2MiABJ{z-Ci zx`RcgOjj+c@grn!*ChA2lzFh+zV`Da>k=R0MB!zpf9-{TIq^8IuCDfujwzLbCuOt_ zHV^)nII(k6?a6O3(aD9LQvY${eT%Fo&)$2lcGt@jJGLq-NijR2M_M#5D~p1jUXqwi zbo!LZ|1pSlc6RE;a3=iy%n?d7_GnG`F#feU4p?e?o1=Uc1`Mkw>(X; z79%xwD5iZM;+qNX#*3f7re2zcNhqIZqImu9Q}bKCynJK#EQ{hWK_3Jhe7n&)9H|(-cfXx0%_?64=KHxuAzXAY)i3{;YRIsMS-9dPKR-VY zFK@^1C)}Vl?v%|`yUdT1_!qD^*o`%+AFQ9I-g|#=vK8CY6x(KKsgxBJ17E&Oz$A=Y zJCdg=Xf>l0t$O~UIqI5U&>`&@Xy z@V#3_ekSMRf5vIes=7eRaAy7IzfTrU=rz^hPa#)-KZyWk4)Q}q0gYtDokS_(-}fcu z&d$!l%8LAdAHd+mFev4CS5*lmNXMj0O=z3)j*r8B`vVOAhGcj&&R#~sQv}aq)j3WyOF^EKc>hHZgs5R>ZB50?8`YL5 zo!Yh;rtDwnaQY6vo{9QAPkhE6m(A2duT_gozG+`%4D9a3jS+vjH-er#o6}wIt;Rl` z|McQ=rM5q>p7|c2k4P??XYe^zYcqUH9(?f_IUOCH!M8m6bF@-A+iSCt{BF?&1sr5bL}TF>_r zU$}6Ah?qF}-g}Z3o@ESHqxSOt{^$=j)8m^qZ3&WwZ3$;cNJu22xI&JhVJ=jilm1*} zXI8qibo)6GX9Z-)&9!f41e}&s&!0axG87CGZYJt={~r+Vi7B@s&kF|d>CIT>bA3fU z+4@+Ei;KuWS5{V3lrK3WPXY(%jpQq~f`WpD*4qq=6ESXQ&z-v|A%UTsXEHQg?W6J9 zm41AV^asBCg`Fu=6yAxCeG2K&l=nn6vrhzb^*O77;gM=rnmeftfB^;ac5EEXH)vA6b5zgef zv0)F(6VCSF;@aApL<9@0zf{s91?{zK&owKb$dtLdyrfsIDSvc~({+b~kB`qt{%0Dk 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 q!1xXlp=e0_fQOij68`E1b