Skip to content

Commit ceafb6a

Browse files
Refactor to minimal APIs, remove MVC controllers
Replaced ASP.NET Core MVC controllers with minimal API endpoints using handler classes. Removed TransactionMobileConfigurationController and TransactionMobileLoggingController. Introduced TransactionMobileConfigurationHandler and TransactionMobileLoggingHandler for configuration and logging logic. Updated Program.cs to map endpoints directly and removed AddControllers. Cleaned up Models.cs and updated appsettings.json connection string. Project now uses minimal APIs for all HTTP endpoints.
1 parent 135832e commit ceafb6a

8 files changed

Lines changed: 118 additions & 79 deletions

MobileConfiguration/Controllers/MobileConfigurationController.cs

Lines changed: 0 additions & 52 deletions
This file was deleted.

MobileConfiguration/Controllers/TransactionMobileLoggingController.cs

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using MobileConfiguration.DataTransferObjects;
2+
using MobileConfiguration.Factories;
3+
using MobileConfiguration.Models;
4+
using MobileConfiguration.Repository;
5+
using Shared.Results.Web;
6+
7+
namespace MobileConfiguration.Handlers
8+
{
9+
public static class TransactionMobileConfigurationHandler
10+
{
11+
public static async Task<IResult> PostConfiguration(IConfigurationRepository repository,
12+
Configuration configuration,
13+
CancellationToken cancellationToken)
14+
{
15+
Models.MobileConfiguration configurationModel = Factory.ToMobileConfiguration(configuration);
16+
17+
var result = await repository.CreateConfiguration(configurationModel, cancellationToken);
18+
19+
// Attempt to map the result to an appropriate HTTP response.
20+
// The shared library previously used an extension to convert to IActionResult from controllers.
21+
// For minimal APIs return 200 on success and 400 on failure.
22+
try
23+
{
24+
// Try to read a `Success` or `IsSuccess` property via dynamic - fallback if not present.
25+
dynamic dyn = result;
26+
bool success = false;
27+
28+
if (HasProperty(dyn, "Success")) success = (bool)dyn.Success;
29+
else if (HasProperty(dyn, "IsSuccess")) success = (bool)dyn.IsSuccess;
30+
else if (HasProperty(dyn, "Succeeded")) success = (bool)dyn.Succeeded;
31+
32+
if (success)
33+
{
34+
return Results.Ok(result);
35+
}
36+
37+
return Results.BadRequest(result);
38+
}
39+
catch
40+
{
41+
// If we cannot inspect the result type, return OK with the result object.
42+
return Results.Ok(result);
43+
}
44+
}
45+
46+
public static async Task<IResult> GetConfiguration(IConfigurationRepository repository,
47+
string id,
48+
CancellationToken cancellationToken)
49+
{
50+
Models.MobileConfiguration configurationModel = await repository.GetConfiguration(ConfigurationType.TransactionMobile, id, cancellationToken);
51+
52+
ConfigurationResponse response = Factory.ToConfigurationResponse(configurationModel);
53+
54+
return Results.Ok(response);
55+
}
56+
57+
public static async Task<IResult> PutConfiguration(IConfigurationRepository repository,
58+
string id,
59+
Configuration configuration,
60+
CancellationToken cancellationToken)
61+
{
62+
Models.MobileConfiguration configurationModel = Factory.ToMobileConfiguration(configuration);
63+
64+
await repository.UpdateConfiguration(ConfigurationType.TransactionMobile, id, configurationModel, cancellationToken);
65+
66+
return Results.Ok();
67+
}
68+
69+
private static bool HasProperty(dynamic obj, string name)
70+
{
71+
try
72+
{
73+
var dictionary = obj as System.Collections.IDictionary;
74+
if (dictionary != null)
75+
{
76+
return dictionary.Contains(name);
77+
}
78+
79+
// fallback to reflection
80+
return obj.GetType().GetProperty(name) != null;
81+
}
82+
catch
83+
{
84+
return false;
85+
}
86+
}
87+
}
88+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using MobileConfiguration.DataTransferObjects;
3+
using Newtonsoft.Json;
4+
using Shared.Logger;
5+
6+
namespace MobileConfiguration.Handlers
7+
{
8+
public static class TransactionMobileLoggingHandler
9+
{
10+
public static Task<IResult> PostLogging(List<LogMessage> logMessages, CancellationToken cancellationToken)
11+
{
12+
Logger.LogInformation(JsonConvert.SerializeObject(logMessages));
13+
return Task.FromResult(Results.Ok() as IResult);
14+
}
15+
}
16+
}

MobileConfiguration/MobileConfiguration.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,8 @@
9191
</Content>
9292
</ItemGroup>
9393

94+
<ItemGroup>
95+
<Folder Include="Controllers\" />
96+
</ItemGroup>
97+
9498
</Project>

MobileConfiguration/Models/Models.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using MobileConfiguration.Controllers;
2-
3-
namespace MobileConfiguration.Models
1+
namespace MobileConfiguration.Models
42
{
53
public class MobileConfiguration
64
{

MobileConfiguration/Program.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@
6565
// Add services to the container.
6666

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

110111

111-
app.MapControllers();
112+
// Minimal API endpoints (handler pattern)
113+
app.MapPost("/api/TransactionMobileConfiguration", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.PostConfiguration);
114+
app.MapGet("/api/TransactionMobileConfiguration/{id}", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.GetConfiguration);
115+
app.MapPut("/api/TransactionMobileConfiguration/{id}", MobileConfiguration.Handlers.TransactionMobileConfigurationHandler.PutConfiguration);
116+
117+
app.MapPost("/api/TransactionMobileLogging", MobileConfiguration.Handlers.TransactionMobileLoggingHandler.PostLogging);
112118

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

MobileConfiguration/appsettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"InMemoryDatabase": false
55
},
66
"ConnectionStrings": {
7-
"ConfigurationDatabase": "server=127.0.0.1;user id=sa;password=sp1ttal;database=ConfigurationHost-00000000-0000-0000-0000-000000000001;Encrypt=false"
7+
"ConfigurationDatabase": "server=192.168.1.163;user id=sa;password=Sc0tland;database=ConfigurationHost;Encrypt=false"
88
}
99
}

0 commit comments

Comments
 (0)