A full-stack .NET 8 project with SQL Server 2022, Redis cache, and JWT authentication.
Easily spin up the environment with Docker and start running compliance analytics queries.
- ✅ SQL Server 2022 running inside Docker
- ✅ Database initialized with schema, seed data, and stored procedure
- ✅ Optional Redis cache (via Docker)
- ✅ .NET 8 API connected to the DB
- ✅ Ability to register/login users and query analytics with JWT authentication
Make sure you have the following installed:
- Docker Desktop (with Docker Compose)
- .NET 8 SDK
- (Optional) Azure Data Studio or SSMS for DB inspection
Check installed SDK:
dotnet --list-sdks It should show 8.x.
ComplianceAnalytics/
├── docker-compose.yml          # Docker config
├── sql/                        # Auto-run DB scripts
│   ├── 01_init.sql             # Schema
│   ├── 02_seed.sql             # Sample data
│   └── 03_procedure.sql        # Stored procedure
├── ComplianceAnalytics.sln
├── ComplianceAnalytics.API/    
├── ComplianceAnalytics.Application/
├── ComplianceAnalytics.Infrastructure/
├── ComplianceAnalytics.Domain/
└── README.md
Already configured in ComplianceAnalytics.API/appsettings.json:
json
"ConnectionStrings": {
  "DefaultConnection": "Server=localhost,1433;Database=ComplianceAnalytics;User Id=sa;Password=DOTnet@1234;TrustServerCertificate=True"
},
"Jwt": {
  "Key": "This_is_a_very_long_and_secure_secret_key_123!",
  "Issuer": "ComplianceAPI",
  "Audience": "ComplianceUsers",
  "ExpireMinutes": 60
}
🐳 Docker Setup
Your docker-compose.yml (in project root):
yaml
version: "3.9"
services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: compliance_sql
    ports:
      - "1433:1433"
    environment:
      SA_PASSWORD: ${SA_PASSWORD:-DOTnet@1234}
      ACCEPT_EULA: "Y"
    volumes:
      - sql_data:/var/opt/mssql
      - ./sql:/docker-entrypoint-initdb.d
    restart: unless-stopped
  redis:
    image: redis:7-alpine
    container_name: compliance_redis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    restart: unless-stopped
    # Comment out if Redis already installed locally
volumes:
  sql_data:
  redis_data:
01_init.sql → Creates database, tables, and log table
02_seed.sql → Inserts sample locations, tasks, and placeholder users
03_procedure.sql → Defines usp_GetComplianceAnalytics stored procedure
1️⃣ Start containers
docker-compose up -d
2️⃣ Watch SQL logs until DB is ready
docker-compose logs -f sqlserver
3️⃣ Connect with Azure Data Studio
Server: localhost,1433
User: sa
Password: DOTnet@1234
Database: ComplianceAnalytics
4️⃣ Verify DB
SELECT TOP 5 * FROM Users;
EXEC usp_GetComplianceAnalytics;
🌐 Run the API
From project root:
dotnet restore
dotnet build
dotnet run --project ComplianceAnalytics.API
Swagger → https://localhost:5001/swagger
API → http://localhost:5000
curl -X POST "https://localhost:5001/api/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"userName": "admin", "password": "Admin@123", "role": "Admin"}'
curl -X POST "https://localhost:5001/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"userName": "admin", "password": "Admin@123"}'
curl -H "Authorization: Bearer <TOKEN>" \
  "https://localhost:5001/api/analytics/compliance?Region=North"
Runs on localhost:6379
redis-cli -p 6379 FLUSHALL
docker-compose down
docker-compose down -v
docker exec -it compliance_sql /opt/mssql-tools/bin/sqlcmd \
  -S localhost -U sa -P 'DOTnet@1234' \
  -i /docker-entrypoint-initdb.d/03_procedure.sql