BlogWatcher CLI
Quick Orientation
- Use the Cobra entry point in
cmd/blogwatcher/main.go and internal/cli/. - Route business logic through
internal/controller and persistence through internal/storage. - Use scanning pipeline packages in
internal/scanner, internal/rss, and internal/scraper. - Remember the default SQLite path is
~/.blogwatcher/blogwatcher.db and is created on demand.
Run Commands
- Run locally with
go run./cmd/blogwatcher.... - Build with
go build./cmd/blogwatcher.
Change Workflow
- Add or adjust CLI commands in
internal/cli/commands.go (Cobra options, arguments, output formatting). - Put non-trivial logic in
internal/controller so the CLI stays thin and testable. - Update storage or schema in
internal/storage/database.go and adjust model conversion in internal/model if needed. - Modify scanning behavior in
internal/scanner and its helpers (internal/rss, internal/scraper). - Update or add tests under
internal/ or cmd/ for every feature change or addition.
Test Guidance
- Run tests with
go test./.... - If you add a feature, add tests and any necessary dummy data.
- Keep tests focused on CLI behavior, controller logic, and scraper/RSS parsing outcomes.
Output Conventions
- Preserve user-friendly CLI output with colors and clear errors.
- When listing posts available for reading, always include the link to each post in the output.
- Keep error handling consistent with existing exceptions (
BlogNotFoundError, BlogAlreadyExistsError, ArticleNotFoundError).
Example (posts available for reading)
Unread articles (2):
[12] [new] Understanding Click Contexts
Blog: Real Python
URL: https://realpython.com/click-context/
Published: 2025-11-02
[13] [new] Async IO in Practice
Blog: Test & Code
URL: https://testandcode.com/async-io-in-practice/