Skip to content

Commit fe015df

Browse files
authored
Merge pull request #138 from TraGicCode/chore/add-support-for-postgres-sql-transport
Implement Postgre Sql transport
2 parents e853060 + 38d1514 commit fe015df

File tree

14 files changed

+274
-3
lines changed

14 files changed

+274
-3
lines changed

src/BuslyCLI.Console/BuslyCLI.Console.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<PackageReference Include="NServiceBus.RabbitMQ" Version="10.1.6" />
3535
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" Version="5.1.2" />
3636
<PackageReference Include="NServiceBus.Transport.AzureStorageQueues" Version="13.0.3" />
37+
<PackageReference Include="NServiceBus.Transport.PostgreSql" Version="8.1.10" />
3738
<PackageReference Include="NServiceBus.Transport.SqlServer" Version="8.1.10" />
3839
<PackageReference Include="Spectre.Console.Cli" Version="0.53.1" />
3940
<PackageReference Include="Spectre.Console.Cli.Extensions.DependencyInjection" Version="0.20.0" />

src/BuslyCLI.Console/Commands/Transport/ListTransportsCommand.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ public string TransportConfigTypeToString(ITransportConfig transportConfig)
5757
return "learning";
5858
case AzureServiceBusTransportConfig azureServiceBusConfig:
5959
return "azure-service-bus";
60+
case AzureStorageQueuesTransportConfig azureStorageQueuesTransportConfig:
61+
return "azure-storage-queues";
6062
case AmazonsqsTransportConfig amazonsqsTransportConfig:
6163
return "amazon-sqs";
6264
case SqlServerTransportConfig sqlServerTransportConfig:
6365
return "sql-server";
66+
case PostgreSqlTransportConfig postgreSqlTransportConfig:
67+
return "postgre-sql";
6468
default:
6569
throw new ApplicationException("Unknown transport type");
6670
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace BuslyCLI.Config;
2+
3+
public class PostgreSqlTransportConfig : ITransportConfig
4+
{
5+
public string ConnectionString { get; set; }
6+
}

src/BuslyCLI.Console/Config/TransportConfig.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class TransportConfig
1111
public AzureServiceBusTransportConfig AzureServiceBusTransportConfig { get; set; }
1212
public AzureStorageQueuesTransportConfig AzureStorageQueuesTransportConfig { get; set; }
1313
public SqlServerTransportConfig SqlServerTransportConfig { get; set; }
14+
public PostgreSqlTransportConfig PostgreSqlTransportConfig { get; set; }
1415

1516
// Helper property to unify config access:
1617
[YamlIgnore]
@@ -19,5 +20,6 @@ public class TransportConfig
1920
?? (ITransportConfig)AmazonsqsTransportConfig
2021
?? (ITransportConfig)AzureServiceBusTransportConfig
2122
?? (ITransportConfig)AzureStorageQueuesTransportConfig
22-
?? SqlServerTransportConfig;
23+
?? (ITransportConfig)SqlServerTransportConfig
24+
?? PostgreSqlTransportConfig;
2325
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using FluentValidation;
2+
3+
namespace BuslyCLI.Config.Validators;
4+
5+
public class PostgreSqlTransportConfigValidator : AbstractValidator<PostgreSqlTransportConfig>
6+
{
7+
public PostgreSqlTransportConfigValidator()
8+
{
9+
RuleFor(x => x.ConnectionString)
10+
.NotEmpty();
11+
}
12+
}

src/BuslyCLI.Console/Config/Validators/TransportConfigValidator.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ public TransportConfigValidator()
1616
v.Add(new LearningTransportConfigValidator());
1717
v.Add(new RabbitMQTransportConfigValidator());
1818
v.Add(new AzureServiceBusTransportConfigValidator());
19+
v.Add(new AzureStorageQueuesTransportConfigValidator());
1920
v.Add(new AmazonsqsTransportConfigValidator());
21+
v.Add(new SqlServerTransportConfigValidator());
22+
v.Add(new PostgreSqlTransportConfigValidator());
2023
});
2124

2225
// RuleFor(x => x.LearningTransportConfig)

src/BuslyCLI.Console/DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ private static IServiceCollection AddYamlDeserializer(this IServiceCollection se
3636
{ "amazonsqs-transport-config", typeof(AmazonsqsTransportConfig) },
3737
{ "azure-service-bus-transport-config", typeof(AzureServiceBusTransportConfig) },
3838
{ "azure-storage-queues-transport-config", typeof(AzureStorageQueuesTransportConfig) },
39-
{ "sql-server-transport-config", typeof(SqlServerTransportConfig) }
39+
{ "sql-server-transport-config", typeof(SqlServerTransportConfig) },
40+
{ "postgre-sql-transport-config", typeof(PostgreSqlTransportConfig) }
4041
};
4142

4243
o.AddUniqueKeyTypeDiscriminator<ITransportConfig>(keyMappings);

src/BuslyCLI.Console/Factories/RawEndpointFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ private TransportDefinition CreateTransport(TransportConfig transportConfig)
3636
return CreateAmazonSQSTransport(amazonSqsTransportConfig);
3737
case SqlServerTransportConfig sqlServerTransportConfig:
3838
return CreateSqlServerTransport(sqlServerTransportConfig);
39+
case PostgreSqlTransportConfig postgreSqlTransportConfig:
40+
return CreatePostgreSqlTransport(postgreSqlTransportConfig);
3941
case LearningTransportConfig learningTransportConfig:
4042
return new LearningTransport
4143
{
@@ -47,6 +49,12 @@ private TransportDefinition CreateTransport(TransportConfig transportConfig)
4749
}
4850
}
4951

52+
private TransportDefinition CreatePostgreSqlTransport(PostgreSqlTransportConfig postgreSqlTransportConfig)
53+
{
54+
var transport = new PostgreSqlTransport(postgreSqlTransportConfig.ConnectionString);
55+
return transport;
56+
}
57+
5058
private TransportDefinition CreateAzureStorageQueuesTransport(string connectionString)
5159
{
5260
var transport = new AzureStorageQueueTransport(connectionString);

tests/BuslyCLI.Console.Tests/BuslyCLI.Console.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<PackageReference Include="Testcontainers.Azurite" Version="4.9.0" />
2828
<PackageReference Include="Testcontainers.LocalStack" Version="4.9.0" />
2929
<PackageReference Include="Testcontainers.MsSql" Version="4.9.0" />
30+
<PackageReference Include="Testcontainers.PostgreSql" Version="4.9.0" />
3031
<PackageReference Include="Testcontainers.RabbitMq" Version="4.9.0" />
3132
<PackageReference Include="Testcontainers.ServiceBus" Version="4.9.0" />
3233
<PackageReference Include="YamlDotNet" Version="16.3.0" />
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using BuslyCLI.Config;
2+
using BuslyCLI.Config.Validators;
3+
using FluentValidation.TestHelper;
4+
5+
namespace BuslyCLI.Console.Tests.Config.Validators;
6+
7+
[TestFixture]
8+
public class PostgreSqlTransportConfigValidatorTests
9+
{
10+
private readonly PostgreSqlTransportConfigValidator _validator;
11+
12+
public PostgreSqlTransportConfigValidatorTests()
13+
{
14+
_validator = new PostgreSqlTransportConfigValidator();
15+
}
16+
17+
[Test]
18+
public async Task ShouldErrorWhenConnectionStringIsNotPassed()
19+
{
20+
// Arrange
21+
var postgreSqlTransportConfig = new PostgreSqlTransportConfig
22+
{
23+
ConnectionString = null
24+
};
25+
// Act
26+
var result = await _validator.TestValidateAsync(postgreSqlTransportConfig);
27+
28+
// Assert
29+
result.ShouldHaveValidationErrorFor(c => c.ConnectionString)
30+
.WithErrorMessage("'Connection String' must not be empty.");
31+
}
32+
33+
[Test]
34+
public async Task ShouldNotErrorConnectionStringIsPassed()
35+
{
36+
// Arrange
37+
var postgreSqlTransportConfig = new PostgreSqlTransportConfig
38+
{
39+
ConnectionString = "Data Source=(local);Initial Catalog=Ordering;Integrated Security=SSPI;Application Name=Busly-CLI;TrustServerCertificate=true"
40+
};
41+
// Act
42+
var result = await _validator.TestValidateAsync(postgreSqlTransportConfig);
43+
44+
// Assert
45+
result.ShouldNotHaveValidationErrorFor(c => c.ConnectionString);
46+
}
47+
}

0 commit comments

Comments
 (0)