Skip to content

Commit

Permalink
[diyuan] add FlightOrderRequest & Service Bus Queue
Browse files Browse the repository at this point in the history
  • Loading branch information
DiyuanZhang committed Dec 24, 2021
1 parent 0a9cb0c commit 5a5011b
Show file tree
Hide file tree
Showing 22 changed files with 212 additions and 65 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using FluentMigrator;

namespace TravelManagement.Migration
{
[Migration(20211224150900)]
public class CreateFlightOrderRequestsTable: FluentMigrator.Migration
{
private const string TABLE_NAME = "flight_order_requests";

public override void Up()
{
Create.Table(TABLE_NAME)
.WithColumn("id").AsInt64().PrimaryKey().Identity()
.WithColumn("user_id").AsInt64().NotNullable()
.WithColumn("flight_number").AsString().NotNullable()
.WithColumn("amount").AsDecimal().NotNullable()
.WithColumn("departure_date").AsDateTime()
.WithColumn("created_at").AsDateTime().NotNullable()
.WithColumn("expired_at").AsDateTime().NotNullable();
}

public override void Down()
{
Delete.Table(TABLE_NAME);
}
}
}
21 changes: 0 additions & 21 deletions TravelManagement.Migration/20211223150900_CreateOrdersTable.cs

This file was deleted.

2 changes: 1 addition & 1 deletion TravelManagement.Migration/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ private static IServiceProvider CreateServices(string DBConnectionString)
.AddSqlServer2012()
.WithGlobalConnectionString(
DBConnectionString)
.ScanIn(typeof(CreateOrdersTable).Assembly).For.Migrations())
.ScanIn(typeof(CreateFlightOrderRequestsTable).Assembly).For.Migrations())
.AddLogging(lb => lb.AddFluentMigratorConsole())
.BuildServiceProvider(false);
}
Expand Down
19 changes: 19 additions & 0 deletions TravelManagement.Test/ControllerFacts/FlightOrderControllerFact.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System.Threading.Tasks;
using TravelManagement.Application.Dtos;
using TravelManagement.Infrastructure.Utils;
using TravelManagement.Test.ControllerFactsSetup;
using Xunit;

namespace TravelManagement.Test.ControllerFacts
{
public class FlightOrderControllerFact : ControllerFactBase
{
[Fact]
public async Task should_return_ok()
{
var httpContent = RequestUtils.ToHttpContent(new CreateFlightOrderRequest());
var httpResponseMessage = await HttpClient.PostAsync("flight-orders", httpContent);
httpResponseMessage.EnsureSuccessStatusCode();
}
}
}
13 changes: 0 additions & 13 deletions TravelManagement.Test/ControllerFacts/Test1.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static void AddInmemorySession(this IServiceCollection services)

var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ConnectionString("Data Source=:memory:;Version=3;New=True;DateTimeKind=Utc;"))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<OrderMapping>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<FlightOrderRequestMapping>())
.CurrentSessionContext<ThreadStaticSessionContext>()
.ExposeConfiguration(c => inMemDbConfiguration = c);

Expand Down
7 changes: 7 additions & 0 deletions TravelManagement/Application/Dtos/CreateFlightOrderRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TravelManagement.Application.Dtos
{
public class CreateFlightOrderRequest
{

}
}
9 changes: 9 additions & 0 deletions TravelManagement/Application/Providers/IMessageSender.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Threading.Tasks;

namespace TravelManagement.Application.Providers
{
public interface IMessageSender
{
Task Send(object messageBody);
}
}
34 changes: 34 additions & 0 deletions TravelManagement/Application/Providers/ServiceBusMessageSender.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace TravelManagement.Application.Providers
{
public class ServiceBusMessageSender : IMessageSender
{
private readonly ServiceBusSender _sender;
private readonly ILogger<ServiceBusMessageSender> _logger;

public ServiceBusMessageSender(ServiceBusSender sender, ILogger<ServiceBusMessageSender> logger)
{
_sender = sender;
_logger = logger;
}

public async Task Send(object messageBody)
{
try
{
var serviceBusMessage = new ServiceBusMessage(JsonConvert.SerializeObject(messageBody));
await _sender.SendMessageAsync(serviceBusMessage);
}
catch (Exception ex)
{
_logger.LogError(ex, $"Fail to send messages to Azure Service Bus: {JsonConvert.SerializeObject(messageBody)}");
throw;
}
}
}
}
10 changes: 10 additions & 0 deletions TravelManagement/Application/Services/FlightOrderService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace TravelManagement.Application.Services
{
public class FlightOrderService
{
public long CreateFlightOrderRequest()
{
return 1L;
}
}
}
15 changes: 15 additions & 0 deletions TravelManagement/Domain/Models/FlightOrderRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;

namespace TravelManagement.Domain.Models
{
public class FlightOrderRequest
{
public virtual long Id { get; set; }
public virtual long UserId { get; set; }
public virtual string FlightNumber { get; set; }
public virtual decimal Amount { get; set; }
public virtual DateTime DepartureDate { get; set; }
public virtual DateTime CreatedAt { get; set; }
public virtual DateTime ExpiredAt { get; set; }
}
}
7 changes: 0 additions & 7 deletions TravelManagement/Domain/Models/Order.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace TravelManagement.Domain.Repositories
{
public interface IOrderRepository
public interface IFlightOrderRequestRepository
{

}
Expand Down
10 changes: 10 additions & 0 deletions TravelManagement/Domain/Services/FlightOrderDomainService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace TravelManagement.Domain.Services
{
public class FlightOrderDomainService
{
public long CreateFlightOrderRequest()
{
return 1L;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using FluentNHibernate.Mapping;
using TravelManagement.Domain.Models;

namespace TravelManagement.Infrastructure.Mappings
{
public class FlightOrderRequestMapping : ClassMap<FlightOrderRequest>
{
public FlightOrderRequestMapping()
{
Table("flight_order_requests");
Id(o => o.Id).GeneratedBy.Identity();
Map(f => f.UserId).Column("user_id").Not.Nullable();
}
}
}
14 changes: 0 additions & 14 deletions TravelManagement/Infrastructure/Mappings/OrderMapping.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace TravelManagement.Infrastructure.Repositories
{
public class OrderRepository : IOrderRepository
public class FlightOrderRequestRepository : IFlightOrderRequestRepository
{

}
Expand Down
15 changes: 15 additions & 0 deletions TravelManagement/Infrastructure/Utils/RequestUtils.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

namespace TravelManagement.Infrastructure.Utils
{
public static class RequestUtils
{
public static StringContent ToHttpContent(object? request)
{
var serializeRequest = JsonConvert.SerializeObject(request);
return new StringContent(serializeRequest, Encoding.UTF8, "application/json");
}
}
}
30 changes: 30 additions & 0 deletions TravelManagement/Interface/Controllers/FlightOrderController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using System;
using Microsoft.AspNetCore.Mvc;
using TravelManagement.Application.Dtos;
using TravelManagement.Application.Providers;
using TravelManagement.Domain.Models;

namespace TravelManagement.Interface.Controllers
{
[ApiController]
public class FlightOrderController : ControllerBase
{
private readonly IMessageSender _messageSender;

public FlightOrderController(IMessageSender messageSender)
{
_messageSender = messageSender;
}

[HttpPost("flight-orders")]
public OkResult CreateFlightOrderRequest(CreateFlightOrderRequest request)
{
_messageSender.Send(new FlightOrderRequest
{
Amount = new decimal(123.45),
DepartureDate = DateTime.UtcNow
});
return Ok();
}
}
}
4 changes: 3 additions & 1 deletion TravelManagement/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Azure.Messaging.ServiceBus;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
Expand All @@ -18,7 +19,8 @@ public Startup(IConfiguration configuration) : base(configuration)
public void ConfigureServices(IServiceCollection services)
{
ConfigureCommonServices(services);
services.AddSession(Configuration["DBConnectionString"]);
services.AddAzureServiceBus(Configuration["ServiceBusConnectionString"], Configuration["ServiceBusQueue"]);
// services.AddSession(Configuration["DBConnectionString"]);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
Expand Down
13 changes: 12 additions & 1 deletion TravelManagement/StartupExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
using Azure.Messaging.ServiceBus;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using Microsoft.Extensions.DependencyInjection;
using NHibernate;
using NHibernate.Context;
using TravelManagement.Application.Providers;
using TravelManagement.Infrastructure.Mappings;

namespace TravelManagement
Expand All @@ -13,7 +15,7 @@ public static void AddSession(this IServiceCollection services, string connectio
{
var fluentConfiguration = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<OrderMapping>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<FlightOrderRequestMapping>())
.CurrentSessionContext<ThreadStaticSessionContext>();

var sessionFactory = fluentConfiguration.BuildSessionFactory();
Expand All @@ -26,5 +28,14 @@ public static void AddSession(this IServiceCollection services, string connectio
return session;
});
}

public static void AddAzureServiceBus(this IServiceCollection services, string serviceBusConnectionString,
string queueName)
{
var serviceBusClient = new ServiceBusClient(serviceBusConnectionString);
var serviceBusSender = serviceBusClient.CreateSender(queueName);
services.AddSingleton(serviceBusSender);
services.AddTransient<IMessageSender, ServiceBusMessageSender>();
}
}
}
6 changes: 2 additions & 4 deletions TravelManagement/TravelManagement.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.5.1" />
<PackageReference Include="FluentNHibernate" Version="3.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NHibernate" Version="5.3.10" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>

<ItemGroup>
<Folder Include="Application\Services" />
</ItemGroup>

</Project>

0 comments on commit 5a5011b

Please sign in to comment.