Thank you for your interest in contributing to SecureTransact! This document provides guidelines and instructions for contributing.
By participating in this project, you agree to abide by our Code of Conduct.
Before creating bug reports, please check existing issues to avoid duplicates. When creating a bug report, include:
- A clear, descriptive title
- Steps to reproduce the behavior
- Expected behavior
- Actual behavior
- Environment details (.NET version, OS, etc.)
- Relevant logs or error messages
Feature requests are welcome. Please provide:
- A clear description of the feature
- The problem it solves
- Potential implementation approach (if you have ideas)
- Any alternatives you've considered
- Fork the repository and create your branch from
develop - Follow the branching convention:
feature/SEC-XXX-descriptionorbugfix/SEC-XXX-description - Write tests for any new functionality
- Ensure all tests pass:
dotnet test - Follow code style: Run
dotnet formatbefore committing - Write clear commit messages following Conventional Commits
- Update documentation if needed
- Submit your PR against the
developbranch
- .NET 9 SDK
- Docker (for PostgreSQL and Redis)
- Your preferred IDE (Rider, VS Code, Visual Studio)
# Clone your fork
git clone https://github.com/YOUR_USERNAME/Secure-Transact-API.git
cd Secure-Transact-API
# Add upstream remote
git remote add upstream https://github.com/MancoMen-Software-Studio/Secure-Transact-API.git
# Start dependencies
docker-compose up -d
# Restore and build
dotnet restore
dotnet build
# Run tests
dotnet test
# Run the API
dotnet run --project src/SecureTransact.Api- Domain Layer has ZERO external dependencies - Only .NET BCL
- Application Layer references only Domain - Never Infrastructure
- All dependencies point inward - Outer layers depend on inner layers
- Classes/Interfaces: PascalCase (
TransactionAggregate,IEventStore) - Methods: PascalCase (
ProcessTransaction,GetByIdAsync) - Properties: PascalCase (
AccountId,Amount) - Private fields: _camelCase (
_repository,_logger) - Parameters/locals: camelCase (
transactionId,amount)
- Use explicit types (no
varexcept when type is obvious) - Use file-scoped namespaces
- One class per file
- XML documentation on all public APIs
- No empty catch blocks
- No TODO comments in PRs to main
Follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types: feat, fix, docs, style, refactor, perf, test, chore
Examples:
feat(transactions): add transaction reversal capabilityfix(crypto): resolve nonce reuse vulnerabilitydocs(readme): update installation instructionstest(domain): add unit tests for Money value object
| Layer | Minimum |
|---|---|
| Domain | 90% |
| Application | 85% |
| Infrastructure | 70% |
| API | 60% |
- Unit Tests: Test individual components in isolation
- Integration Tests: Test component interactions with real dependencies (via Testcontainers)
- Architecture Tests: Verify layer dependencies are correct
- All PRs require at least one approval
- CI must pass (build, tests, linting)
- No merge conflicts with target branch
- Conversations must be resolved
Feel free to open an issue for any questions about contributing.
Thank you for contributing to SecureTransact! 🎉