Migrate API to .NET Core 3.0

This commit is contained in:
Daniel J. Summers 2019-09-27 20:07:18 -05:00
parent ac8b39fff9
commit 97ed2575ea
4 changed files with 21 additions and 6 deletions

View File

@ -85,6 +85,15 @@ module private Helpers =
/// Flip JSON result so we can pipe into it /// Flip JSON result so we can pipe into it
let asJson<'T> next ctx (o : 'T) = let asJson<'T> next ctx (o : 'T) =
json o next ctx json o next ctx
/// Work-around to let the Json.NET serializer synchronously deserialize from the request stream
// TODO: Remove this once there is an async serializer
let allowSyncIO : HttpHandler =
fun next ctx ->
match ctx.Features.Get<Features.IHttpBodyControlFeature>() with
| null -> ()
| f -> f.AllowSynchronousIO <- true
next ctx
/// Strongly-typed models for post requests /// Strongly-typed models for post requests
@ -156,6 +165,7 @@ module Request =
/// POST /api/request /// POST /api/request
let add : HttpHandler = let add : HttpHandler =
authorize authorize
>=> allowSyncIO
>=> fun next ctx -> >=> fun next ctx ->
task { task {
let! r = ctx.BindJsonAsync<Models.Request> () let! r = ctx.BindJsonAsync<Models.Request> ()
@ -187,6 +197,7 @@ module Request =
/// POST /api/request/[req-id]/history /// POST /api/request/[req-id]/history
let addHistory requestId : HttpHandler = let addHistory requestId : HttpHandler =
authorize authorize
>=> allowSyncIO
>=> fun next ctx -> >=> fun next ctx ->
task { task {
use sess = session ctx use sess = session ctx
@ -218,6 +229,7 @@ module Request =
/// POST /api/request/[req-id]/note /// POST /api/request/[req-id]/note
let addNote requestId : HttpHandler = let addNote requestId : HttpHandler =
authorize authorize
>=> allowSyncIO
>=> fun next ctx -> >=> fun next ctx ->
task { task {
use sess = session ctx use sess = session ctx
@ -297,6 +309,7 @@ module Request =
/// PATCH /api/request/[req-id]/snooze /// PATCH /api/request/[req-id]/snooze
let snooze requestId : HttpHandler = let snooze requestId : HttpHandler =
authorize authorize
>=> allowSyncIO
>=> fun next ctx -> >=> fun next ctx ->
task { task {
use sess = session ctx use sess = session ctx
@ -314,6 +327,7 @@ module Request =
/// PATCH /api/request/[req-id]/recurrence /// PATCH /api/request/[req-id]/recurrence
let updateRecurrence requestId : HttpHandler = let updateRecurrence requestId : HttpHandler =
authorize authorize
>=> allowSyncIO
>=> fun next ctx -> >=> fun next ctx ->
task { task {
use sess = session ctx use sess = session ctx

View File

@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<Version>2.0.1.0</Version> <Version>2.1.0.0</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -16,7 +16,7 @@
<PackageReference Include="FunctionalCuid" Version="1.0.0" /> <PackageReference Include="FunctionalCuid" Version="1.0.0" />
<PackageReference Include="Giraffe" Version="3.6.0" /> <PackageReference Include="Giraffe" Version="3.6.0" />
<PackageReference Include="Giraffe.TokenRouter" Version="1.0.0" /> <PackageReference Include="Giraffe.TokenRouter" Version="1.0.0" />
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.0.0" />
<PackageReference Include="Microsoft.FSharpLu" Version="0.10.29" /> <PackageReference Include="Microsoft.FSharpLu" Version="0.10.29" />
<PackageReference Include="Microsoft.FSharpLu.Json" Version="0.10.29" /> <PackageReference Include="Microsoft.FSharpLu.Json" Version="0.10.29" />
<PackageReference Include="RavenDb.Client" Version="4.2.1" /> <PackageReference Include="RavenDb.Client" Version="4.2.1" />

View File

@ -90,11 +90,12 @@ module Configure =
bldr.ConfigureServices svcs bldr.ConfigureServices svcs
open Microsoft.Extensions.Logging open Microsoft.Extensions.Logging
open Microsoft.Extensions.Hosting
/// Configure logging /// Configure logging
let logging (bldr : IWebHostBuilder) = let logging (bldr : IWebHostBuilder) =
let logz (log : ILoggingBuilder) = let logz (log : ILoggingBuilder) =
let env = log.Services.BuildServiceProvider().GetService<IHostingEnvironment> () let env = log.Services.BuildServiceProvider().GetService<IWebHostEnvironment> ()
match env.IsDevelopment () with match env.IsDevelopment () with
| true -> log | true -> log
| false -> log.AddFilter(fun l -> l > LogLevel.Information) | false -> log.AddFilter(fun l -> l > LogLevel.Information)
@ -109,7 +110,7 @@ module Configure =
let appConfig = let appConfig =
Action<IApplicationBuilder> ( Action<IApplicationBuilder> (
fun (app : IApplicationBuilder) -> fun (app : IApplicationBuilder) ->
let env = app.ApplicationServices.GetService<IHostingEnvironment> () let env = app.ApplicationServices.GetService<IWebHostEnvironment> ()
match env.IsDevelopment () with match env.IsDevelopment () with
| true -> app.UseDeveloperExceptionPage () | true -> app.UseDeveloperExceptionPage ()
| false -> app.UseGiraffeErrorHandler Handlers.Error.error | false -> app.UseGiraffeErrorHandler Handlers.Error.error

View File

@ -1,6 +1,6 @@
{ {
"name": "my-prayer-journal", "name": "my-prayer-journal",
"version": "2.0.1", "version": "2.1.0",
"description": "myPrayerJournal - Front End", "description": "myPrayerJournal - Front End",
"author": "Daniel J. Summers <daniel@bitbadger.solutions>", "author": "Daniel J. Summers <daniel@bitbadger.solutions>",
"private": true, "private": true,