This commit significantly increases the test coverage across the application and fixes several underlying bugs that were discovered while writing the new tests. The key changes include: - **New Tests:** Added extensive integration and unit tests for GraphQL resolvers, application services, and data repositories, substantially increasing the test coverage for packages like `graphql`, `user`, `translation`, and `analytics`. - **Authorization Bug Fixes:** - Fixed a critical bug where a user creating a `Work` was not correctly associated as its author, causing subsequent permission failures. - Corrected the authorization logic in `authz.Service` to properly check for entity ownership by non-admin users. - **Test Refactoring:** - Refactored numerous test suites to use `testify/mock` instead of manual mocks, improving test clarity and maintainability. - Isolated integration tests by creating a fresh admin user and token for each test run, eliminating test pollution. - Centralized domain errors into `internal/domain/errors.go` and updated repositories to use them, making error handling more consistent. - **Code Quality Improvements:** - Replaced manual mock implementations with `testify/mock` for better consistency. - Cleaned up redundant and outdated test files. These changes stabilize the test suite, improve the overall quality of the codebase, and move the project closer to the goal of 80% test coverage. |
||
|---|---|---|
| .github/workflows | ||
| api | ||
| cmd | ||
| content/blog | ||
| deploy | ||
| internal | ||
| ops | ||
| pkg/linguistics | ||
| schemas | ||
| test | ||
| .air.toml | ||
| .gitignore | ||
| .tool-versions | ||
| AGENTS.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| go.mod | ||
| go.sum | ||
| gqlgen.yml | ||
| Makefile | ||
| README.md | ||
| refactor.md | ||
| requirements.txt | ||
| TASKS.md | ||
| tools.go | ||
The Tercul Project
Welcome to Tercul, a modern platform for literary enthusiasts to discover, translate, and discuss works from around the world. This repository contains the backend services, API, and data processing pipelines that power the platform.
Architecture
The Tercul backend is built using a Domain-Driven Design (DDD-lite) approach, emphasizing a clean separation of concerns between domain logic, application services, and infrastructure. Key architectural patterns include:
- Command Query Responsibility Segregation (CQRS): Application logic is separated into Commands (for writing data) and Queries (for reading data). This allows for optimized, scalable, and maintainable services.
- Clean Architecture: Dependencies flow inwards, with inner layers (domain) having no knowledge of outer layers (infrastructure).
- Dependency Injection: Services and repositories are instantiated at the application's entry point (
cmd/api/main.go) and injected as dependencies, promoting loose coupling and testability.
For a more detailed explanation of the architectural vision and ongoing refactoring efforts, please see refactor.md.
Getting Started
Follow these instructions to get the development environment up and running on your local machine.
Prerequisites
- Go: Version 1.25.0 (as specified in
.tool-versions) - Docker & Docker Compose: For running external dependencies like PostgreSQL and Weaviate.
- make: For running common development commands.
- golangci-lint: For running the linter. Install it with:
Ensure your Go binary path (go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest$(go env GOPATH)/bin) is in your shell'sPATH.
Installation
-
Clone the repository:
git clone <repository-url> cd tercul -
Install Go dependencies:
go mod tidy
Configuration
The application is configured using environment variables. A local docker-compose.yml file is provided to run the necessary services (PostgreSQL, Weaviate, etc.) with default development settings.
The application will automatically connect to these services. For a full list of configurable variables and their default values, see internal/platform/config/config.go.
Running the Application
-
Start external services:
docker-compose up -d -
Run the API server:
go run cmd/api/main.goThe API server will be available at
http://localhost:8080. The GraphQL playground can be accessed athttp://localhost:8080/playground.
Running Tests
To ensure code quality and correctness, run the full suite of linters and tests:
make lint-test
This command executes the same checks that are run in our Continuous Integration (CI) pipeline.