Automated Action 887703b6a2 Add Go Todo App implementation
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
2025-05-17 22:20:05 +00:00
..
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00
2025-05-17 22:20:05 +00:00

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