
This commit adds a complete Go implementation of the Todo application. The application uses Gin framework for the web server, GORM for database access, and SQLite for storage. Key features: - Todo CRUD operations with the same API endpoints - Health check endpoint - Database migrations - Tests for models, services, and API handlers - Documentation for the API - Configurable settings
4.7 KiB
4.7 KiB
Go Todo App
A simple Todo application API built with Go, Gin, and SQLite. This is a Go rewrite of the original FastAPI Python application.
Features
- RESTful API for managing todo items
- SQLite database for persistent storage
- CORS support for cross-origin requests
- Health check endpoint
- Pagination and filtering support
Technology Stack
- Go - Programming language
- Gin - Web framework
- GORM - ORM library
- SQLite - Database
- Viper - Configuration management
API Endpoints
Method | URL | Description |
---|---|---|
GET | /health | Health check |
GET | /api/todos | List all todos |
POST | /api/todos | Create a new todo |
GET | /api/todos/:id | Get a specific todo |
PUT | /api/todos/:id | Update a todo |
DELETE | /api/todos/:id | Delete a todo |
Query Parameters
The GET /api/todos
endpoint supports the following query parameters:
skip
- Number of items to skip (default: 0)limit
- Maximum number of items to return (default: 100)completed
- Filter by completion status (boolean, optional)
Prerequisites
- Go 1.18 or higher
- Git
Getting Started
Clone the repository
git clone https://github.com/yourusername/go-todo-app.git
cd go-todo-app
Build and run the application
# Build the application
go build -o go-todo-app ./cmd/api
# Run the application
./go-todo-app
The API will be available at http://localhost:8000
Development mode
go run cmd/api/main.go
Configuration
The application can be configured using environment variables or a config file. The following settings are available:
Environment Variable | Description | Default Value |
---|---|---|
APP_NAME | Application name | Go Todo App |
APP_DESCRIPTION | Application description | A simple Todo application API... |
APP_VERSION | Application version | 0.1.0 |
SERVER_PORT | HTTP server port | 8000 |
DB_PATH | Database directory path | /app/storage/db |
DB_NAME | Database file name | db.sqlite |
Project Structure
.
├── cmd/
│ └── api/
│ └── main.go # Application entry point
├── internal/
│ ├── config/ # Application configuration
│ │ └── config.go
│ ├── api/ # API routes and handlers
│ │ ├── api.go # API initialization
│ │ ├── middleware.go # Middleware functions
│ │ ├── todo.go # Todo route handlers
│ │ └── health.go # Health check route handler
│ ├── database/ # Database connection and initialization
│ │ └── db.go
│ ├── model/ # Database models (GORM)
│ │ └── todo.go
│ ├── dto/ # Data transfer objects
│ │ └── todo.go
│ └── service/ # Business logic
│ └── todo.go
├── migrations/ # Database migration files
├── storage/ # Storage directory
│ └── db/ # Database files location
├── go.mod # Go module file
├── go.sum # Go dependencies checksums
└── README.md # Project documentation
Example Usage
Create a todo
curl -X POST http://localhost:8000/api/todos \
-H "Content-Type: application/json" \
-d '{"title": "Learn Go", "description": "Learn Go programming language", "completed": false}'
Get all todos
curl http://localhost:8000/api/todos
Get a specific todo
curl http://localhost:8000/api/todos/1
Update a todo
curl -X PUT http://localhost:8000/api/todos/1 \
-H "Content-Type: application/json" \
-d '{"completed": true}'
Delete a todo
curl -X DELETE http://localhost:8000/api/todos/1
Get completed todos
curl http://localhost:8000/api/todos?completed=true
Health check
curl http://localhost:8000/health