Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 0 additions & 52 deletions MobileConfiguration/Controllers/MobileConfigurationController.cs

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using MobileConfiguration.DataTransferObjects;
using MobileConfiguration.Factories;
using MobileConfiguration.Models;
using MobileConfiguration.Repository;
using Shared.Results.Web;

namespace MobileConfiguration.Handlers
{
public static class TransactionMobileConfigurationHandler
{
public static async Task<IResult> PostConfiguration(IConfigurationRepository repository,
Configuration configuration,
CancellationToken cancellationToken)
{
Models.MobileConfiguration configurationModel = Factory.ToMobileConfiguration(configuration);

var result = await repository.CreateConfiguration(configurationModel, cancellationToken);

// Attempt to map the result to an appropriate HTTP response.
// The shared library previously used an extension to convert to IActionResult from controllers.
// For minimal APIs return 200 on success and 400 on failure.
try
{
// Try to read a `Success` or `IsSuccess` property via dynamic - fallback if not present.
dynamic dyn = result;
bool success = false;

if (HasProperty(dyn, "Success")) success = (bool)dyn.Success;
else if (HasProperty(dyn, "IsSuccess")) success = (bool)dyn.IsSuccess;
else if (HasProperty(dyn, "Succeeded")) success = (bool)dyn.Succeeded;

if (success)
{
return Results.Ok(result);
}

return Results.BadRequest(result);
}
catch
{
// If we cannot inspect the result type, return OK with the result object.
return Results.Ok(result);
}
}

public static async Task<IResult> GetConfiguration(IConfigurationRepository repository,
string id,
CancellationToken cancellationToken)
{
Models.MobileConfiguration configurationModel = await repository.GetConfiguration(ConfigurationType.TransactionMobile, id, cancellationToken);

ConfigurationResponse response = Factory.ToConfigurationResponse(configurationModel);

return Results.Ok(response);
}

public static async Task<IResult> PutConfiguration(IConfigurationRepository repository,
string id,
Configuration configuration,
CancellationToken cancellationToken)
{
Models.MobileConfiguration configurationModel = Factory.ToMobileConfiguration(configuration);

await repository.UpdateConfiguration(ConfigurationType.TransactionMobile, id, configurationModel, cancellationToken);

return Results.Ok();
}

private static bool HasProperty(dynamic obj, string name)
{
try
{
var dictionary = obj as System.Collections.IDictionary;
if (dictionary != null)
{
return dictionary.Contains(name);
}

// fallback to reflection
return obj.GetType().GetProperty(name) != null;
}
catch
{
return false;
}
}
}
}
16 changes: 16 additions & 0 deletions MobileConfiguration/Handlers/TransactionMobileLoggingHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Mvc;
using MobileConfiguration.DataTransferObjects;
using Newtonsoft.Json;
using Shared.Logger;

namespace MobileConfiguration.Handlers
{
public static class TransactionMobileLoggingHandler
{
public static Task<IResult> PostLogging(List<LogMessage> logMessages, CancellationToken cancellationToken)
{
Logger.LogInformation(JsonConvert.SerializeObject(logMessages));
return Task.FromResult(Results.Ok() as IResult);
}
}
}
4 changes: 4 additions & 0 deletions MobileConfiguration/MobileConfiguration.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,8 @@
</Content>
</ItemGroup>

<ItemGroup>
<Folder Include="Controllers\" />
</ItemGroup>

</Project>
4 changes: 1 addition & 3 deletions MobileConfiguration/Models/Models.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using MobileConfiguration.Controllers;

namespace MobileConfiguration.Models
namespace MobileConfiguration.Models
{
public class MobileConfiguration
{
Expand Down
10 changes: 8 additions & 2 deletions MobileConfiguration/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@
// Add services to the container.

builder.Services.AddHttpContextAccessor();
builder.Services.AddControllers();
builder.Services.AddAuthorization();
// Use minimal APIs and handler pattern instead of MVC controllers
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
Expand Down Expand Up @@ -108,7 +109,12 @@
app.AddExceptionHandler();


app.MapControllers();
// Minimal API endpoints (handler pattern)
app.MapPost("/api/TransactionMobileConfiguration", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.PostConfiguration);
app.MapGet("/api/TransactionMobileConfiguration/{id}", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.GetConfiguration);
app.MapPut("/api/TransactionMobileConfiguration/{id}", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.PutConfiguration);

app.MapPost("/api/TransactionMobileLogging", MobileConfiguration.Handlers.TransactionMobileLoggingHandler.PostLogging);

InitializeDatabase(app).Wait(CancellationToken.None);

Expand Down
2 changes: 1 addition & 1 deletion MobileConfiguration/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"InMemoryDatabase": false
},
"ConnectionStrings": {
"ConfigurationDatabase": "server=127.0.0.1;user id=sa;password=sp1ttal;database=ConfigurationHost-00000000-0000-0000-0000-000000000001;Encrypt=false"
"ConfigurationDatabase": "server=192.168.1.163;user id=sa;password=Sc0tland;database=ConfigurationHost;Encrypt=false"
}
}
Loading