155 lines
5.1 KiB
Markdown
155 lines
5.1 KiB
Markdown
# Simple Todo Application
|
|
|
|
A command-line todo list manager with persistent JSON storage.
|
|
|
|
## Overview
|
|
|
|
This is a simple yet complete todo application that demonstrates:
|
|
- Functional requirements implementation (CRUD operations)
|
|
- Non-functional requirements (persistence, validation, performance, error handling)
|
|
- Clean code architecture with proper error handling
|
|
- Data persistence using JSON
|
|
|
|
## Requirements Implemented
|
|
|
|
### Functional Requirements
|
|
|
|
- **REQ-001**: Create Todo Items - Add new todos with title and optional description
|
|
- **REQ-002**: List Todo Items - Display all todos with status and metadata
|
|
- **REQ-003**: Mark Todo as Complete - Toggle completion status on/off
|
|
- **REQ-004**: Delete Todo Items - Remove todos from the list permanently
|
|
- **REQ-005**: Edit Todo Items - Update title and description of existing todos
|
|
|
|
### Non-Functional Requirements
|
|
|
|
- **REQ-006**: Data Persistence - All todos saved to `todos.json` file
|
|
- **REQ-007**: Input Validation - Titles validated (non-empty, max 200 chars)
|
|
- **REQ-008**: Performance - All operations complete within 100ms
|
|
- **REQ-009**: Code Quality - Comprehensive error handling with descriptive messages
|
|
- **REQ-010**: User Interface - Simple CLI with menu-driven interface
|
|
|
|
## Features
|
|
|
|
✅ Create, Read, Update, Delete (CRUD) todos
|
|
✅ Toggle completion status
|
|
✅ Persistent storage (JSON)
|
|
✅ Input validation
|
|
✅ Error handling
|
|
✅ Clear CLI interface
|
|
✅ Timestamps for created/updated dates
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
python app.py
|
|
```
|
|
|
|
### Menu Options
|
|
|
|
```
|
|
1. Create new todo - Add a new todo item
|
|
2. List all todos - View all todos with status
|
|
3. Mark todo complete - Toggle todo completion status
|
|
4. Edit todo - Update title or description
|
|
5. Delete todo - Remove a todo permanently
|
|
6. Exit - Save and quit application
|
|
```
|
|
|
|
## Data Storage
|
|
|
|
All todos are persisted in `todos.json` with the following structure:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": 1,
|
|
"title": "Buy groceries",
|
|
"description": "Milk, eggs, bread",
|
|
"completed": false,
|
|
"created_at": "2025-12-09T10:30:00",
|
|
"updated_at": "2025-12-09T10:30:00"
|
|
}
|
|
]
|
|
```
|
|
|
|
## File Structure
|
|
|
|
```
|
|
simple_app/
|
|
├── requirements.md - 10 requirements for the application
|
|
├── app.py - Main application implementation
|
|
└── README.md - This file
|
|
```
|
|
|
|
## Requirements Traceability
|
|
|
|
Each requirement is implemented and can be traced in the code:
|
|
|
|
| REQ ID | Feature | Implementation | Status |
|
|
|--------|---------|-----------------|--------|
|
|
| REQ-001 | Create todos | `create_todo()` method | ✅ |
|
|
| REQ-002 | List todos | `list_todos()` method | ✅ |
|
|
| REQ-003 | Mark complete | `mark_complete()` method | ✅ |
|
|
| REQ-004 | Delete todos | `delete_todo()` method | ✅ |
|
|
| REQ-005 | Edit todos | `edit_todo()` method | ✅ |
|
|
| REQ-006 | Data persistence | `_load_todos()`, `_save_todos()` | ✅ |
|
|
| REQ-007 | Input validation | `_validate_title()` method | ✅ |
|
|
| REQ-008 | Performance | JSON operations, efficient filtering | ✅ |
|
|
| REQ-009 | Error handling | Try-except blocks, error messages | ✅ |
|
|
| REQ-010 | CLI interface | `show_menu()`, `run()` methods | ✅ |
|
|
|
|
## Example Session
|
|
|
|
```
|
|
🚀 Welcome to the Simple Todo Application!
|
|
|
|
════════════════════════════════════════════════════════════════════
|
|
📝 Todo Application
|
|
════════════════════════════════════════════════════════════════════
|
|
1. Create new todo
|
|
2. List all todos
|
|
3. Mark todo complete/incomplete
|
|
4. Edit todo
|
|
5. Delete todo
|
|
6. Exit
|
|
════════════════════════════════════════════════════════════════════
|
|
Enter your choice (1-6): 1
|
|
Enter todo title: Buy groceries
|
|
Enter description (optional): Milk, eggs, bread
|
|
✅ Todo created: 'Buy groceries'
|
|
|
|
📋 Your Todos:
|
|
════════════════════════════════════════════════════════════════════
|
|
|
|
○ [1] [TODO] Buy groceries
|
|
Description: Milk, eggs, bread
|
|
Created: 2025-12-09
|
|
|
|
════════════════════════════════════════════════════════════════════
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The application provides clear error messages for:
|
|
- Empty titles
|
|
- Titles exceeding 200 characters
|
|
- Invalid todo IDs
|
|
- File I/O errors
|
|
- Invalid menu selections
|
|
|
|
## Performance
|
|
|
|
All operations are optimized:
|
|
- JSON file read on startup only
|
|
- Linear search for todo lookups (acceptable for typical use)
|
|
- Single file write per operation
|
|
- No external dependencies
|
|
|
|
## Code Quality
|
|
|
|
- Type hints for all function parameters
|
|
- Comprehensive docstrings
|
|
- Clear variable names
|
|
- Proper error handling throughout
|
|
- Separation of concerns (UI, data, logic)
|