Skip to content

A .NET Core REST API project template πŸ‘· Built with a sense of peace and tranquillity πŸ™

License

Notifications You must be signed in to change notification settings

chrispoulter/halcyon-api

Repository files navigation

Halcyon API

A .NET Core REST API project template πŸ‘· Built with a sense of peace and tranquillity πŸ™

Features

Related Projects

Getting Started

Prerequisites

Install dependencies

Restore NuGet packages:

dotnet restore "halcyon-api.sln"

Update local configuration (optional)

In the src/Halcyon.Api directory of the project, create a new appsettings.Development.json file. This file will override settings in appsettings.json during local development. This file is ignored by Git, so the secrets will not be committed to the repository.

{
  "ConnectionStrings": {
    "Database": "Host=localhost;Port=5432;Database=halcyon;Username=postgres;Password=password",
    "RabbitMq": "amqp://guest:guest@localhost:5672",
    "Redis": "localhost"
  },
  "RateLimiter": {
    "ReplenishmentPeriod": 1,
    "QueueLimit": 2,
    "TokenLimit": 8,
    "TokenLimit2": 12,
    "TokensPerPeriod": 4,
    "AutoReplenishment": true
  },
  "CorsPolicy": {
    "AllowedOrigins": [ "http://localhost:3000" ],
    "AllowedMethods": [ "GET", "POST", "PUT", "DELETE", "OPTIONS" ],
    "AllowedHeaders": [ "Content-Type", "Authorization", "Access-Control-Allow-Credentials", "X-Requested-With", "x-signalr-user-agent" ]
  },
  "Email": {
    "SmtpServer": "localhost",
    "SmtpPort": 1025,
    "SmtpUserName": null,
    "SmtpPassword": null,
    "NoReplyAddress": "noreply@example.com"
  },
 "Jwt": {
    "SecurityKey": "super_secret_key_that_should_be_changed",
    "Issuer": "HalcyonApi",
    "Audience": "HalcyonClient",
    "ExpiresIn": 3600
  },
  "Seed": {
    "Users": [
      {
        "EmailAddress": "system.administrator@example.com",
        "Password": "super_secret_password_that_should_be_changed",
        "FirstName": "System",
        "LastName": "Administrator",
        "DateOfBirth": "1970-01-01",
        "Roles": [ "SYSTEM_ADMINISTRATOR" ]
      }
    ]
  },
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft.AspNetCore": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "ApplicationName": "Halcyon.Api"
    },
    "WriteTo": {
      "Console": {
        "Name": "Console",
        "Args": {
          "outputTemplate": "{Timestamp:HH:mm:ss} [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
        }
      },
      "Seq": {
        "Name": "Seq",
        "Args": { "serverUrl": "http://localhost:5341" }
      }
    }
  },
  "AllowedHosts": "*"
}

Run the application

dotnet run --project "src/Halcyon.Api/Halcyon.Api.csproj"

Access the API

Once running, you can explore the API using Swagger UI at http://localhost:5257

Testing

This project includes unit tests. To run tests:

dotnet test "halcyon-api.sln"

Contributing

Feel free to submit issues or pull requests to improve the template. Ensure that you follow the coding standards and test your changes before submission.

License

This project is licensed under the MIT License. See the LICENSE file for details.