bloggingapi-a05jzl/README.md
Automated Action acf2757384 Fix Supervisor startup errors and improve application resilience
- Update database path configuration for better compatibility
- Add comprehensive logging system with error handling
- Create supervisord.conf with proper configuration
- Add environment variable example file
- Enhance health check endpoint to report database status
- Add detailed startup and shutdown event handlers
- Update documentation with troubleshooting information
- Update requirements with additional helpful packages
2025-06-02 22:42:07 +00:00

6.4 KiB

Blogging API

A RESTful API for a blogging platform built with FastAPI and SQLite.

Features

  • User management with authentication
  • Blog post creation, retrieval, updating, and deletion
  • Comment functionality on blog posts
  • Role-based permissions (regular users and superusers)
  • RESTful API with proper HTTP methods and status codes
  • JWT-based authentication
  • SQLite database with SQLAlchemy ORM
  • Alembic for database migrations

Prerequisites

  • Python 3.8+
  • Virtual environment (recommended)

Environment Variables

The application uses the following environment variables (see .env.example for a template):

  • SECRET_KEY: Secret key for JWT token encryption (default provided for development)
  • ACCESS_TOKEN_EXPIRE_MINUTES: JWT token expiration time in minutes (default: 60 * 24 * 8 = 8 days)
  • PORT: Port number for the application to listen on (default: 8000)

Installation

  1. Clone the repository:
git clone <repository-url>
cd bloggingapi
  1. Install the dependencies:
pip install -r requirements.txt
  1. Run database migrations:
alembic upgrade head
  1. Run the application:
# Development mode
uvicorn main:app --reload

# Production mode with Supervisor
cp .env.example .env  # Create and customize your .env file
supervisord -c supervisord.conf

The API will be available at http://localhost:8000 (development) or http://localhost:8001 (production with Supervisor).

API Documentation

Once the application is running, you can access the API documentation at:

API Endpoints

Authentication

  • POST /api/v1/login/access-token - Get JWT access token

Users

  • GET /api/v1/users/ - Get all users (superuser only)
  • POST /api/v1/users/ - Create a new user
  • GET /api/v1/users/me - Get current user
  • PUT /api/v1/users/me - Update current user
  • GET /api/v1/users/{user_id} - Get user by ID
  • DELETE /api/v1/users/{user_id} - Delete user (superuser only)

Posts

  • GET /api/v1/posts/ - Get all published posts
  • POST /api/v1/posts/ - Create a new post
  • GET /api/v1/posts/{post_id} - Get post by ID
  • PUT /api/v1/posts/{post_id} - Update post
  • DELETE /api/v1/posts/{post_id} - Delete post
  • GET /api/v1/posts/user/{user_id} - Get posts by user

Comments

  • GET /api/v1/comments/ - Get all comments (superuser only)
  • POST /api/v1/comments/ - Create a new comment
  • GET /api/v1/comments/{comment_id} - Get comment by ID
  • PUT /api/v1/comments/{comment_id} - Update comment
  • DELETE /api/v1/comments/{comment_id} - Delete comment
  • GET /api/v1/comments/post/{post_id} - Get comments by post
  • GET /api/v1/comments/user/{user_id} - Get comments by user

Health Check

  • GET /health - API health check

Project Structure

.
├── .env.example                   # Environment variables template
├── alembic.ini                    # Alembic configuration
├── app                            # Application package
│   ├── api                        # API endpoints
│   │   └── v1                     # API version 1
│   │       ├── api.py             # API router
│   │       └── endpoints          # API endpoint modules
│   │           ├── comments.py    # Comment endpoints
│   │           ├── login.py       # Authentication endpoints
│   │           ├── posts.py       # Post endpoints
│   │           └── users.py       # User endpoints
│   ├── auth                       # Authentication package
│   │   ├── deps.py                # Auth dependencies
│   │   └── security.py            # Security utilities
│   ├── core                       # Core package
│   │   ├── config.py              # Configuration settings
│   │   └── logging.py             # Logging configuration
│   ├── crud                       # CRUD operations
│   │   ├── base.py                # Base CRUD class
│   │   ├── comment.py             # Comment CRUD
│   │   ├── post.py                # Post CRUD
│   │   └── user.py                # User CRUD
│   ├── db                         # Database package
│   │   ├── base.py                # Import all models
│   │   ├── base_class.py          # Base model class
│   │   └── session.py             # Database session
│   ├── models                     # SQLAlchemy models
│   │   ├── comment.py             # Comment model
│   │   ├── post.py                # Post model
│   │   └── user.py                # User model
│   └── schemas                    # Pydantic schemas
│       ├── comment.py             # Comment schemas
│       ├── post.py                # Post schemas
│       └── user.py                # User schemas
├── main.py                        # FastAPI application
├── migrations                     # Alembic migrations
│   ├── env.py                     # Alembic environment
│   ├── script.py.mako             # Migration script template
│   └── versions                   # Migration versions
│       └── 001_initial_tables.py  # Initial migration
├── requirements.txt               # Project dependencies
└── supervisord.conf               # Supervisor configuration

Development

The project uses Alembic for database migrations. To create a new migration after model changes:

alembic revision --autogenerate -m "Description of changes"

To apply migrations:

alembic upgrade head

Using Supervisor

This application includes configuration for running with Supervisor, which provides process monitoring and automatic restarts. To view the status of the application when running with Supervisor:

supervisorctl status

To restart the application:

supervisorctl restart app-8001

To view logs:

tail -f /tmp/app-8001.log  # Application logs
tail -f /tmp/app-8001-error.log  # Error logs

Troubleshooting

If you encounter issues with the application starting up:

  1. Check the error logs: tail -f /tmp/app-8001-error.log
  2. Verify the database path is correct and accessible
  3. Ensure all environment variables are properly set
  4. Check permissions for the storage directory
  5. Try running the application directly with uvicorn to see detailed error messages