# ishtiahmedtiham/crudify architecture

> Architecture diagram of the GitHub repository ishtiahmedtiham/crudify, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ishtiahmedtiham/crudify
- Repository: https://github.com/ishtiahmedtiham/crudify

## Overview

CRUDify is a FastAPI user-management backend. Requests enter through the application and versioned router, then reach user CRUD or login; those handlers validate inputs, enforce role checks, and use SQLAlchemy sessions and user records. Login verifies a password and issues a JWT, while protected requests decode the token and reload the user. The README also describes multi-database support as a separate branch capability, not as demonstrated functionality in this tree. Edges reflect excerpts, README statements, or SOURCE INDEX references; unsampled behavior is not inferred.

Main entry points: [`src/controllers/api/v1/user_controller.py`](https://github.com/ishtiahmedtiham/crudify/blob/master/src/controllers/api/v1/user_controller.py) (User CRUD), [`src/config/database.py`](https://github.com/ishtiahmedtiham/crudify/blob/master/src/config/database.py) (Database sessions), [`src/authentication/auth.py`](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/auth.py) (Login), [`src/models/user_model.py`](https://github.com/ishtiahmedtiham/crudify/blob/master/src/models/user_model.py) (User record)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application routing"]
  node_app["Application bootstrap<br/>[main.py]"]
  node_router["Versioned router<br/>[router.py]"]
end

subgraph group_identity["Identity and access"]
  node_login_api["Login<br/>[auth.py]"]
  node_login_schema["Login schemas<br/>[login_schema.py]"]
  node_passwords["Password utilities<br/>[user_utils.py]"]
  node_jwt["JWT encoding<br/>[jwt.py]"]
  node_current_user["Current-user lookup<br/>[dependencies.py]"]
  node_permissions["Role permissions<br/>[permissions.py]"]
  node_roles["Role definitions<br/>[roles.py]"]
end

subgraph group_users["User management"]
  node_user_api["User CRUD<br/>[user_controller.py]"]
  node_user_schema["User schemas<br/>[user_schema.py]"]
  node_validator["Email validator<br/>[validator.py]"]
  node_filters["User filters<br/>[user_filters.py]"]
end

subgraph group_persistence["Persistence"]
  node_db_config["Database sessions<br/>[database.py]"]
  node_user_model["User record<br/>[user_model.py]"]
end

node_client(("API client"))
node_postgres[("PostgreSQL")]

node_client -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_router
node_app -->|"imports config"| node_db_config
node_router -->|"registers routes"| node_user_api
node_router -->|"registers routes"| node_login_api
node_user_api -->|"uses schemas"| node_user_schema
node_user_api -->|"validates email"| node_validator
node_user_api -->|"accepts filters"| node_filters
node_user_api -->|"requires roles"| node_permissions
node_user_api -->|"selects roles"| node_roles
node_user_api -->|"hashes passwords"| node_passwords
node_user_api -->|"gets sessions"| node_db_config
node_user_api -->|"queries and writes"| node_user_model
node_validator -->|"validates input"| node_user_schema
node_validator -->|"gets session"| node_db_config
node_validator -->|"checks email"| node_user_model
node_login_api -->|"accepts and returns"| node_login_schema
node_login_api -->|"gets session"| node_db_config
node_login_api -->|"looks up user"| node_user_model
node_login_api -->|"verifies password"| node_passwords
node_login_api -->|"issues token"| node_jwt
node_permissions -->|"checks roles"| node_roles
node_permissions -->|"requires identity"| node_current_user
node_current_user -->|"decodes token"| node_jwt
node_current_user -->|"gets session"| node_db_config
node_current_user -->|"loads user"| node_user_model
node_db_config -->|"connects to"| node_postgres
node_db_config -->|"creates tables for"| node_user_model
node_user_model -->|"uses declarative base"| node_db_config

click node_app "https://github.com/ishtiahmedtiham/crudify/blob/master/main.py"
click node_router "https://github.com/ishtiahmedtiham/crudify/blob/master/src/routers/v1/router.py"
click node_user_api "https://github.com/ishtiahmedtiham/crudify/blob/master/src/controllers/api/v1/user_controller.py"
click node_login_api "https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/auth.py"
click node_login_schema "https://github.com/ishtiahmedtiham/crudify/blob/master/src/schemas/login_schema.py"
click node_user_schema "https://github.com/ishtiahmedtiham/crudify/blob/master/src/schemas/user_schema.py"
click node_validator "https://github.com/ishtiahmedtiham/crudify/blob/master/src/validators/validator.py"
click node_filters "https://github.com/ishtiahmedtiham/crudify/blob/master/src/filters/user_filters.py"
click node_passwords "https://github.com/ishtiahmedtiham/crudify/blob/master/src/utils/user_utils.py"
click node_jwt "https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/jwt.py"
click node_current_user "https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/dependencies.py"
click node_permissions "https://github.com/ishtiahmedtiham/crudify/blob/master/src/authorization/permissions.py"
click node_roles "https://github.com/ishtiahmedtiham/crudify/blob/master/src/authorization/roles.py"
click node_db_config "https://github.com/ishtiahmedtiham/crudify/blob/master/src/config/database.py"
click node_user_model "https://github.com/ishtiahmedtiham/crudify/blob/master/src/models/user_model.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_router,node_client toneBlue
class node_login_api,node_login_schema,node_passwords,node_jwt,node_current_user,node_permissions,node_roles,node_postgres toneAmber
class node_user_api,node_user_schema,node_validator,node_filters toneMint
class node_db_config,node_user_model toneRose
```

## Components

### Application routing

- [Application bootstrap](https://github.com/ishtiahmedtiham/crudify/blob/master/main.py): `main.py`
- [Versioned router](https://github.com/ishtiahmedtiham/crudify/blob/master/src/routers/v1/router.py): `src/routers/v1/router.py`

### Identity and access

- [Login](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/auth.py): `src/authentication/auth.py`
- [Login schemas](https://github.com/ishtiahmedtiham/crudify/blob/master/src/schemas/login_schema.py): `src/schemas/login_schema.py`
- [Password utilities](https://github.com/ishtiahmedtiham/crudify/blob/master/src/utils/user_utils.py): `src/utils/user_utils.py`
- [JWT encoding](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/jwt.py): `src/authentication/jwt.py`
- [Current-user lookup](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authentication/dependencies.py): `src/authentication/dependencies.py`
- [Role permissions](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authorization/permissions.py): `src/authorization/permissions.py`
- [Role definitions](https://github.com/ishtiahmedtiham/crudify/blob/master/src/authorization/roles.py): `src/authorization/roles.py`

### User management

- [User CRUD](https://github.com/ishtiahmedtiham/crudify/blob/master/src/controllers/api/v1/user_controller.py): `src/controllers/api/v1/user_controller.py`
- [User schemas](https://github.com/ishtiahmedtiham/crudify/blob/master/src/schemas/user_schema.py): `src/schemas/user_schema.py`
- [Email validator](https://github.com/ishtiahmedtiham/crudify/blob/master/src/validators/validator.py): `src/validators/validator.py`
- [User filters](https://github.com/ishtiahmedtiham/crudify/blob/master/src/filters/user_filters.py): `src/filters/user_filters.py`

### Persistence

- [Database sessions](https://github.com/ishtiahmedtiham/crudify/blob/master/src/config/database.py): `src/config/database.py`
- [User record](https://github.com/ishtiahmedtiham/crudify/blob/master/src/models/user_model.py): `src/models/user_model.py`

### Other components

- **API client**
- **PostgreSQL**

## Connections

- API client → Application bootstrap: sends requests (evidence: `README.md`)
- Application bootstrap → Versioned router: mounts routes (evidence: `main.py`)
- Application bootstrap → Database sessions: imports config (evidence: `main.py`)
- Versioned router → User CRUD: registers routes (evidence: `src/routers/v1/router.py`)
- Versioned router → Login: registers routes (evidence: `src/routers/v1/router.py`)
- User CRUD → User schemas: uses schemas (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → Email validator: validates email (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → User filters: accepts filters (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → Role permissions: requires roles (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → Role definitions: selects roles (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → Password utilities: hashes passwords (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → Database sessions: gets sessions (evidence: `src/controllers/api/v1/user_controller.py`)
- User CRUD → User record: queries and writes (evidence: `src/controllers/api/v1/user_controller.py`)
- Email validator → User schemas: validates input (evidence: `src/validators/validator.py`)
- Email validator → Database sessions: gets session (evidence: `src/validators/validator.py`)
- Email validator → User record: checks email (evidence: `src/validators/validator.py`)
- Login → Login schemas: accepts and returns (evidence: `src/authentication/auth.py`)
- Login → Database sessions: gets session (evidence: `src/authentication/auth.py`)
- Login → User record: looks up user (evidence: `src/authentication/auth.py`)
- Login → Password utilities: verifies password (evidence: `src/authentication/auth.py`)
- Login → JWT encoding: issues token (evidence: `src/authentication/auth.py`)
- Role permissions → Role definitions: checks roles (evidence: `src/authorization/permissions.py`)
- Role permissions → Current-user lookup: requires identity (evidence: `src/authorization/permissions.py`)
- Current-user lookup → JWT encoding: decodes token (evidence: `src/authentication/dependencies.py`)
- Current-user lookup → Database sessions: gets session (evidence: `src/authentication/dependencies.py`)
- Current-user lookup → User record: loads user (evidence: `src/authentication/dependencies.py`)
- Database sessions → PostgreSQL: connects to (evidence: `src/config/database.py`)
- Database sessions → User record: creates tables for (evidence: `src/config/database.py`)
- User record → Database sessions: uses declarative base (evidence: `src/models/user_model.py`)
