2024-11-20 20:59:11 +00:00
|
|
|
|
# GraphQL API Backend
|
2021-08-20 23:17:15 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
<div align="center">
|
2021-08-20 23:17:15 +00:00
|
|
|
|
|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
|
|
|
|

|
2025-07-02 19:30:21 +00:00
|
|
|
|

|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
2025-07-03 09:25:26 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-07-03 09:25:26 +00:00
|
|
|
|

|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-07-03 09:25:26 +00:00
|
|
|
|

|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
Backend service providing GraphQL API for content management system with reactions, ratings and topics.
|
|
|
|
|
|
|
|
|
|
## 📚 Documentation
|
|
|
|
|
|
2025-07-03 09:23:06 +00:00
|
|
|
|
- [API Documentation](docs/api.md)
|
|
|
|
|
- [Authentication Guide](docs/auth.md)
|
|
|
|
|
- [Caching System](docs/redis-schema.md)
|
|
|
|
|
- [Features Overview](docs/features.md)
|
|
|
|
|
- [RBAC System](docs/rbac-system.md)
|
2021-08-20 23:17:15 +00:00
|
|
|
|
|
2025-07-02 19:30:21 +00:00
|
|
|
|
## 🚀 Core Features
|
2024-11-20 20:59:11 +00:00
|
|
|
|
### Shouts (Posts)
|
|
|
|
|
- CRUD operations via GraphQL mutations
|
|
|
|
|
- Rich filtering and sorting options
|
|
|
|
|
- Support for multiple authors and topics
|
|
|
|
|
- Rating system with likes/dislikes
|
|
|
|
|
- Comments and nested replies
|
|
|
|
|
- Bookmarks and following
|
2021-08-20 23:17:15 +00:00
|
|
|
|
|
2024-11-20 20:59:11 +00:00
|
|
|
|
### Reactions System
|
|
|
|
|
- `ReactionKind` types: LIKE, DISLIKE, COMMENT
|
|
|
|
|
- Rating calculation for shouts and comments
|
|
|
|
|
- User-specific reaction tracking
|
|
|
|
|
- Reaction stats and aggregations
|
|
|
|
|
- Nested comments support
|
|
|
|
|
|
|
|
|
|
### Authors & Topics
|
|
|
|
|
- Author profiles with stats
|
|
|
|
|
- Topic categorization and hierarchy
|
|
|
|
|
- Following system for authors/topics
|
|
|
|
|
- Activity tracking and stats
|
|
|
|
|
- Community features
|
|
|
|
|
|
2025-07-02 19:30:21 +00:00
|
|
|
|
### RBAC & Permissions
|
|
|
|
|
- RBAC with hierarchy using Redis
|
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
## 🛠️ Tech Stack
|
|
|
|
|
|
2025-06-30 19:43:32 +00:00
|
|
|
|
**Core:** Python 3.12 • GraphQL • PostgreSQL • SQLAlchemy • JWT • Redis • txtai
|
2025-07-03 09:23:06 +00:00
|
|
|
|
**Server:** Starlette • Granian 1.8.0 • Nginx
|
|
|
|
|
**Frontend:** SolidJS 1.9.1 • TypeScript 5.7.2 • Vite 5.4.11
|
|
|
|
|
**GraphQL:** Ariadne 0.23.0
|
|
|
|
|
**Tools:** Pytest • MyPy • Biome 2.0.6
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
## 🔧 Development
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
2025-07-03 09:23:06 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
### 📦 Prepare environment:
|
2023-11-27 08:12:42 +00:00
|
|
|
|
|
|
|
|
|
```shell
|
2025-02-09 14:18:01 +00:00
|
|
|
|
python3.12 -m venv venv
|
2025-02-10 15:04:08 +00:00
|
|
|
|
source venv/bin/activate
|
2025-06-16 17:20:23 +00:00
|
|
|
|
pip install -r requirements.dev.txt
|
2025-02-10 15:04:08 +00:00
|
|
|
|
```
|
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
### 🚀 Run server
|
2025-02-10 15:04:08 +00:00
|
|
|
|
|
2025-06-16 17:20:23 +00:00
|
|
|
|
First, certificates are required to run the server with HTTPS.
|
2024-12-11 22:04:11 +00:00
|
|
|
|
|
2025-02-10 15:04:08 +00:00
|
|
|
|
```shell
|
2024-12-11 22:04:11 +00:00
|
|
|
|
mkcert -install
|
|
|
|
|
mkcert localhost
|
2025-02-10 15:04:08 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Then, run the server:
|
|
|
|
|
|
|
|
|
|
```shell
|
2025-05-31 14:18:31 +00:00
|
|
|
|
python -m granian main:app --interface asgi
|
2022-06-14 05:41:40 +00:00
|
|
|
|
```
|
2024-08-09 06:37:06 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
### ⚡ Useful Commands
|
2024-08-09 06:37:06 +00:00
|
|
|
|
|
|
|
|
|
```shell
|
2025-07-03 09:23:06 +00:00
|
|
|
|
# Linting and formatting with Biome
|
|
|
|
|
biome check . --write
|
|
|
|
|
|
|
|
|
|
# Lint only
|
|
|
|
|
biome lint .
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-07-03 09:23:06 +00:00
|
|
|
|
# Format only
|
|
|
|
|
biome format . --write
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
|
|
|
|
# Run tests
|
2025-02-10 15:04:08 +00:00
|
|
|
|
pytest
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
|
|
|
|
# Type checking
|
2025-02-10 15:04:08 +00:00
|
|
|
|
mypy .
|
2025-05-16 06:23:48 +00:00
|
|
|
|
|
|
|
|
|
# dev run
|
|
|
|
|
python -m granian main:app --interface asgi
|
2024-08-09 06:37:06 +00:00
|
|
|
|
```
|
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
### 📝 Code Style
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
2025-07-03 09:23:06 +00:00
|
|
|
|
**Biome 2.0.6** for linting and formatting • **120 char** lines • **Type hints** required • **Docstrings** for public methods
|
2025-06-19 08:28:48 +00:00
|
|
|
|
|
|
|
|
|
### 🔍 GraphQL Development
|
2024-11-20 20:59:11 +00:00
|
|
|
|
|
|
|
|
|
Test queries in GraphQL Playground at `http://localhost:8000`:
|
|
|
|
|
|
|
|
|
|
```graphql
|
|
|
|
|
# Example query
|
|
|
|
|
query GetShout($slug: String) {
|
|
|
|
|
get_shout(slug: $slug) {
|
|
|
|
|
id
|
|
|
|
|
title
|
|
|
|
|
main_author {
|
|
|
|
|
name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
2025-06-19 08:28:48 +00:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 📊 Project Stats
|
|
|
|
|
|
|
|
|
|
<div align="center">
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
2025-07-02 19:30:21 +00:00
|
|
|
|

|
2025-06-19 08:28:48 +00:00
|
|
|
|

|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
## 🤝 Contributing
|
|
|
|
|
|
2025-07-02 19:30:21 +00:00
|
|
|
|
[CHANGELOG.md](CHANGELOG.md)
|
|
|
|
|
|
2025-06-19 08:28:48 +00:00
|
|
|
|
 • [Read the guide](CONTRIBUTING.md)
|
|
|
|
|
|
|
|
|
|
We welcome contributions! Please read our contributing guide before submitting PRs.
|
|
|
|
|
|
|
|
|
|
## 📄 License
|
|
|
|
|
|
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
|
|
|
|
|
|
## 🔗 Links
|
|
|
|
|
|
2025-07-02 19:30:21 +00:00
|
|
|
|

|
|
|
|
|

|
|
|
|
|
• [discours.io](https://discours.io)
|
|
|
|
|
• [Source Code](https://github.com/discours/core)
|
2025-06-19 08:28:48 +00:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
<div align="center">
|
|
|
|
|
|
|
|
|
|
**Made with ❤️ by the Discours Team**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
</div>
|