diff --git a/.github/workflows/build-and-dockerize.yml b/.github/workflows/build-and-dockerize.yml
index 0ea962c6c..d789b7960 100644
--- a/.github/workflows/build-and-dockerize.yml
+++ b/.github/workflows/build-and-dockerize.yml
@@ -13,7 +13,7 @@ jobs:
# Label used to access the service container
postgres:
# Docker Hub image
- image: postgres:17-alpine
+ image: postgres:18-alpine
ports:
- 5432:5432
# Provide the password for postgres
diff --git a/BervProject.WebApi.Boilerplate.MigrationService/Worker.cs b/BervProject.WebApi.Boilerplate.MigrationService/Worker.cs
index df663d0d9..45b245f74 100644
--- a/BervProject.WebApi.Boilerplate.MigrationService/Worker.cs
+++ b/BervProject.WebApi.Boilerplate.MigrationService/Worker.cs
@@ -1,9 +1,9 @@
+namespace BervProject.WebApi.Boilerplate.MigrationService;
+
using System.Diagnostics;
-using BervProject.WebApi.Boilerplate.EntityFramework;
+using EntityFramework;
using Microsoft.EntityFrameworkCore;
-namespace BervProject.WebApi.Boilerplate.MigrationService;
-
public class Worker : BackgroundService
{
public const string ActivitySourceName = "Migrations";
diff --git a/BervProject.WebApi.Boilerplate.ServiceDefaults/Extensions.cs b/BervProject.WebApi.Boilerplate.ServiceDefaults/Extensions.cs
index 2a3f4e074..5d5b87205 100644
--- a/BervProject.WebApi.Boilerplate.ServiceDefaults/Extensions.cs
+++ b/BervProject.WebApi.Boilerplate.ServiceDefaults/Extensions.cs
@@ -3,7 +3,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.ServiceDiscovery;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
diff --git a/BervProject.WebApi.Boilerplate/ConfigModel/AWSConfiguration.cs b/BervProject.WebApi.Boilerplate/ConfigModel/AWSConfiguration.cs
index c9e4e650a..4c2e04671 100644
--- a/BervProject.WebApi.Boilerplate/ConfigModel/AWSConfiguration.cs
+++ b/BervProject.WebApi.Boilerplate/ConfigModel/AWSConfiguration.cs
@@ -1,30 +1,38 @@
-namespace BervProject.WebApi.Boilerplate.ConfigModel
-{
- public class AWSConfiguration
- {
- public AWSBasicConfiguration Basic { get; set; }
- public AWSEmailConfiguration Email { get; set; }
- public AWSDynamoConfiguration Dynamo { get; set; }
- }
-
- public class AWSAuth
- {
- public string AccessKey { get; set; }
- public string SecretKey { get; set; }
- }
+namespace BervProject.WebApi.Boilerplate.ConfigModel;
- public class AWSBasicConfiguration
- {
- public AWSAuth Auth { get; set; }
- }
-
- public class AWSDynamoConfiguration
- {
- public string Location { get; set; }
- }
+///
+/// AWS Config
+///
+public class AwsConfiguration
+{
+ ///
+ /// Email
+ ///
+ public AwsEmailConfiguration Email { get; set; }
+ ///
+ /// Dynamo
+ ///
+ public AwsDynamoConfiguration Dynamo { get; set; }
+}
- public class AWSEmailConfiguration
- {
- public string Location { get; set; }
- }
+///
+/// AWS Dynamo Config
+///
+public class AwsDynamoConfiguration
+{
+ ///
+ /// Location
+ ///
+ public string Location { get; set; }
}
+
+///
+/// AWS Email Config
+///
+public class AwsEmailConfiguration
+{
+ ///
+ /// Location
+ ///
+ public string Location { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/ConfigModel/AzureConfiguration.cs b/BervProject.WebApi.Boilerplate/ConfigModel/AzureConfiguration.cs
index c33d426e8..6443a07c1 100644
--- a/BervProject.WebApi.Boilerplate/ConfigModel/AzureConfiguration.cs
+++ b/BervProject.WebApi.Boilerplate/ConfigModel/AzureConfiguration.cs
@@ -1,30 +1,68 @@
-namespace BervProject.WebApi.Boilerplate.ConfigModel
-{
- public class AzureConfiguration
- {
- public AzureServiceBus ServiceBus { get; set; }
- public AzureStorage Storage { get; set; }
- }
+namespace BervProject.WebApi.Boilerplate.ConfigModel;
- public class AzureStorage
- {
- public StorageQueue Queue { get; set; }
- public BlobStorage Blob { get; set; }
- }
+///
+/// Azure Config
+///
+public class AzureConfiguration
+{
+ ///
+ /// Service Bus
+ ///
+ public AzureServiceBus ServiceBus { get; set; }
+ ///
+ /// Storage
+ ///
+ public AzureStorage Storage { get; set; }
+}
- public class BlobStorage
- {
- public string ContainerName { get; set; }
- }
+///
+/// Azure Storage
+///
+public class AzureStorage
+{
+ ///
+ /// Queue
+ ///
+ public StorageQueue Queue { get; set; }
+ ///
+ /// Blob
+ ///
+ public BlobStorage Blob { get; set; }
+}
- public class StorageQueue
- {
- public string QueueName { get; set; }
- }
+///
+/// Blob
+///
+public class BlobStorage
+{
+ ///
+ /// Container Name
+ ///
+ public string ContainerName { get; set; }
+}
- public class AzureServiceBus
- {
- public string QueueName { get; set; }
- public string TopicName { get; set; }
- }
+///
+/// Queue
+///
+public class StorageQueue
+{
+ ///
+ /// Queue Name
+ ///
+ public string QueueName { get; set; }
}
+
+///
+/// Service Bus
+///
+public class AzureServiceBus
+{
+ ///
+ /// Queue Name
+ ///
+ public string QueueName { get; set; }
+ ///
+ /// Topic Name
+ ///
+ public string TopicName { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Controllers/AWSS3Controller.cs b/BervProject.WebApi.Boilerplate/Controllers/AWSS3Controller.cs
index 6ac684497..e5535583a 100644
--- a/BervProject.WebApi.Boilerplate/Controllers/AWSS3Controller.cs
+++ b/BervProject.WebApi.Boilerplate/Controllers/AWSS3Controller.cs
@@ -11,8 +11,8 @@ namespace BervProject.WebApi.Boilerplate.Controllers
[ApiVersion("1.0")]
public class SThreeController : ControllerBase
{
- private readonly IAWSS3Service _awsS3Service;
- public SThreeController(IAWSS3Service awsS3Service)
+ private readonly IAwsS3Service _awsS3Service;
+ public SThreeController(IAwsS3Service awsS3Service)
{
_awsS3Service = awsS3Service;
}
diff --git a/BervProject.WebApi.Boilerplate/Controllers/NoteController.cs b/BervProject.WebApi.Boilerplate/Controllers/NoteController.cs
index f25e118f7..60d1c1d95 100644
--- a/BervProject.WebApi.Boilerplate/Controllers/NoteController.cs
+++ b/BervProject.WebApi.Boilerplate/Controllers/NoteController.cs
@@ -2,6 +2,7 @@
using BervProject.WebApi.Boilerplate.Services;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
+using BervProject.WebApi.Boilerplate.Services.Azure;
using Microsoft.AspNetCore.Http;
namespace BervProject.WebApi.Boilerplate.Controllers
diff --git a/BervProject.WebApi.Boilerplate/Entities/Book.cs b/BervProject.WebApi.Boilerplate/Entities/Book.cs
index 71746b2c1..06eb8ff1d 100644
--- a/BervProject.WebApi.Boilerplate/Entities/Book.cs
+++ b/BervProject.WebApi.Boilerplate/Entities/Book.cs
@@ -1,13 +1,24 @@
-using System;
+namespace BervProject.WebApi.Boilerplate.Entities;
+
+using System;
using System.ComponentModel.DataAnnotations;
-namespace BervProject.WebApi.Boilerplate.Entities
+///
+/// Book Entity
+///
+public class Book
{
- public class Book
- {
- public Guid Id { get; set; }
- [Required]
- public string Name { get; set; }
- public virtual Publisher Publisher { get; set; }
- }
-}
+ ///
+ /// Id
+ ///
+ public Guid Id { get; set; }
+ ///
+ /// Name
+ ///
+ [Required]
+ public string Name { get; set; }
+ ///
+ /// Publisher
+ ///
+ public virtual Publisher Publisher { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Entities/Note.cs b/BervProject.WebApi.Boilerplate/Entities/Note.cs
index 5d78f1c49..2dd5c65f0 100644
--- a/BervProject.WebApi.Boilerplate/Entities/Note.cs
+++ b/BervProject.WebApi.Boilerplate/Entities/Note.cs
@@ -1,18 +1,36 @@
+namespace BervProject.WebApi.Boilerplate.Entities;
using System;
using Azure;
using Azure.Data.Tables;
-namespace BervProject.WebApi.Boilerplate.Entities
+///
+/// Note
+///
+public class Note : ITableEntity
{
- public class Note : ITableEntity
- {
- public string PartitionKey { get; set; }
- public string RowKey { get; set; }
- public string Title { get; set; }
- public string Message { get; set; }
- public DateTimeOffset? Timestamp { get; set; }
- public ETag ETag { get; set; }
- }
-}
-
+ ///
+ /// Partition Key
+ ///
+ public string PartitionKey { get; set; }
+ ///
+ /// Row key
+ ///
+ public string RowKey { get; set; }
+ ///
+ /// Title
+ ///
+ public string Title { get; set; }
+ ///
+ /// Message
+ ///
+ public string Message { get; set; }
+ ///
+ /// Timestamp
+ ///
+ public DateTimeOffset? Timestamp { get; set; }
+ ///
+ /// ETag
+ ///
+ public ETag ETag { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Entities/Publisher.cs b/BervProject.WebApi.Boilerplate/Entities/Publisher.cs
index 98214b2df..732e9aeec 100644
--- a/BervProject.WebApi.Boilerplate/Entities/Publisher.cs
+++ b/BervProject.WebApi.Boilerplate/Entities/Publisher.cs
@@ -1,16 +1,27 @@
-using System;
+namespace BervProject.WebApi.Boilerplate.Entities;
+
+using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
-namespace BervProject.WebApi.Boilerplate.Entities
+///
+/// Publisher
+///
+public class Publisher
{
- public class Publisher
- {
- public Guid Id { get; set; }
- [Required]
- public string Name { get; set; }
- [JsonIgnore]
- public virtual ICollection Books { get; set; }
- }
-}
+ ///
+ /// Id
+ ///
+ public Guid Id { get; set; }
+ ///
+ /// Name
+ ///
+ [Required]
+ public string Name { get; set; }
+ ///
+ /// Books
+ ///
+ [JsonIgnore]
+ public virtual ICollection Books { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/EntityFramework/BoilerplateDbContext.cs b/BervProject.WebApi.Boilerplate/EntityFramework/BoilerplateDbContext.cs
index 29d509a98..9e2628690 100644
--- a/BervProject.WebApi.Boilerplate/EntityFramework/BoilerplateDbContext.cs
+++ b/BervProject.WebApi.Boilerplate/EntityFramework/BoilerplateDbContext.cs
@@ -3,21 +3,41 @@
namespace BervProject.WebApi.Boilerplate.EntityFramework
{
+ ///
+ /// DB Context
+ ///
public class BoilerplateDbContext : DbContext
{
+ ///
+ /// Books
+ ///
public DbSet Books { get; set; }
+ ///
+ /// Publishers
+ ///
public DbSet Publishers { get; set; }
+ ///
+ /// Default Constructor
+ ///
public BoilerplateDbContext() : base()
{
}
+ ///
+ /// Constructor with DbContextOptions
+ ///
+ /// DbContextOptions
public BoilerplateDbContext(DbContextOptions options) : base(options)
{
}
+ ///
+ /// Adding relationship
+ ///
+ ///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
diff --git a/BervProject.WebApi.Boilerplate/Extensions/SetupAWSExtension.cs b/BervProject.WebApi.Boilerplate/Extensions/SetupAWSExtension.cs
index 610516bf2..44a3e9871 100644
--- a/BervProject.WebApi.Boilerplate/Extensions/SetupAWSExtension.cs
+++ b/BervProject.WebApi.Boilerplate/Extensions/SetupAWSExtension.cs
@@ -1,20 +1,28 @@
-namespace BervProject.WebApi.Boilerplate.Extenstions;
+namespace BervProject.WebApi.Boilerplate.Extensions;
+
using Amazon.DynamoDBv2;
using Amazon.S3;
using Amazon.SimpleEmail;
-using BervProject.WebApi.Boilerplate.Services.AWS;
+using Services.AWS;
using Microsoft.Extensions.DependencyInjection;
-public static class SetupAWSExtension
+///
+/// AWS Extension for setup all AWS Services
+///
+public static class SetupAwsExtension
{
- public static void SetupAWS(this IServiceCollection services)
+ ///
+ /// Setup AWS Services
+ ///
+ ///
+ public static void SetupAws(this IServiceCollection services)
{
services.AddAWSService();
services.AddAWSService();
services.AddAWSService();
services.AddScoped();
services.AddScoped();
- services.AddScoped();
+ services.AddScoped();
}
}
diff --git a/BervProject.WebApi.Boilerplate/Extensions/SetupAzureExtension.cs b/BervProject.WebApi.Boilerplate/Extensions/SetupAzureExtension.cs
index 0dc6a248b..6c19abc7e 100644
--- a/BervProject.WebApi.Boilerplate/Extensions/SetupAzureExtension.cs
+++ b/BervProject.WebApi.Boilerplate/Extensions/SetupAzureExtension.cs
@@ -1,16 +1,22 @@
-using Microsoft.Extensions.Configuration;
-
-namespace BervProject.WebApi.Boilerplate.Extenstions;
+namespace BervProject.WebApi.Boilerplate.Extensions;
using Entities;
-using BervProject.WebApi.Boilerplate.Services.Azure;
using Services;
-using Microsoft.Extensions.DependencyInjection;
+using BervProject.WebApi.Boilerplate.Services.Azure;
using Microsoft.Extensions.Azure;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
-
+///
+/// Extension for setup Azure services
+///
public static class SetupAzureExtension
{
+ ///
+ /// Setup Azure
+ ///
+ ///
+ ///
public static void SetupAzure(this IServiceCollection services, ConfigurationManager config)
{
services.AddAzureClients(builder =>
diff --git a/BervProject.WebApi.Boilerplate/Models/EmailSendRequest.cs b/BervProject.WebApi.Boilerplate/Models/EmailSendRequest.cs
index 1b49e3187..140b10583 100644
--- a/BervProject.WebApi.Boilerplate/Models/EmailSendRequest.cs
+++ b/BervProject.WebApi.Boilerplate/Models/EmailSendRequest.cs
@@ -1,11 +1,16 @@
-using System.Collections.Generic;
+namespace BervProject.WebApi.Boilerplate.Models;
+
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
-namespace BervProject.WebApi.Boilerplate.Models
+///
+/// Email Send Request
+///
+public class EmailSendRequest
{
- public class EmailSendRequest
- {
- [Required]
- public List To { get; set; }
- }
-}
+ ///
+ /// Destination
+ ///
+ [Required]
+ public List To { get; } = new();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Models/MessageData.cs b/BervProject.WebApi.Boilerplate/Models/MessageData.cs
index 98bb40467..e38157dbb 100644
--- a/BervProject.WebApi.Boilerplate/Models/MessageData.cs
+++ b/BervProject.WebApi.Boilerplate/Models/MessageData.cs
@@ -1,7 +1,12 @@
-namespace BervProject.WebApi.Boilerplate.Models
+namespace BervProject.WebApi.Boilerplate.Models;
+
+///
+/// Message Data
+///
+public class MessageData
{
- public class MessageData
- {
- public string Message { get; set; }
- }
-}
+ ///
+ /// Message
+ ///
+ public string Message { get; init; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Models/Request/UploadFile.cs b/BervProject.WebApi.Boilerplate/Models/Request/UploadFile.cs
index 163572e0d..e448d90ae 100644
--- a/BervProject.WebApi.Boilerplate/Models/Request/UploadFile.cs
+++ b/BervProject.WebApi.Boilerplate/Models/Request/UploadFile.cs
@@ -1,12 +1,16 @@
-using Microsoft.AspNetCore.Http;
-using Newtonsoft.Json;
+namespace BervProject.WebApi.Boilerplate.Models.Request;
+
+using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;
-namespace BervProject.WebApi.Boilerplate.Models.Request
+///
+/// Upload File
+///
+public class UploadFile
{
- public class UploadFile
- {
- [Required]
- public IFormFile File { get; set; }
- }
-}
+ ///
+ /// File
+ ///
+ [Required]
+ public IFormFile File { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Models/Response/MessageSenderResponse.cs b/BervProject.WebApi.Boilerplate/Models/Response/MessageSenderResponse.cs
index a99f88704..13fee5e8c 100644
--- a/BervProject.WebApi.Boilerplate/Models/Response/MessageSenderResponse.cs
+++ b/BervProject.WebApi.Boilerplate/Models/Response/MessageSenderResponse.cs
@@ -1,8 +1,16 @@
-namespace BervProject.WebApi.Boilerplate.Models.Response
+namespace BervProject.WebApi.Boilerplate.Models.Response;
+
+///
+/// Message Sender Response
+///
+public class MessageSenderResponse
{
- public class MessageSenderResponse
- {
- public bool IsSuccess { get; set; }
- public string YourMessage { get; set; }
- }
-}
+ ///
+ /// Is Success
+ ///
+ public bool IsSuccess { get; set; }
+ ///
+ /// Your Message
+ ///
+ public string YourMessage { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Models/WeatherForecast.cs b/BervProject.WebApi.Boilerplate/Models/WeatherForecast.cs
index fb14ee8c3..bbde7b777 100644
--- a/BervProject.WebApi.Boilerplate/Models/WeatherForecast.cs
+++ b/BervProject.WebApi.Boilerplate/Models/WeatherForecast.cs
@@ -1,15 +1,29 @@
+namespace BervProject.WebApi.Boilerplate.Models;
+
using System;
-namespace BervProject.WebApi.Boilerplate.Models
+///
+/// Weather Forecast
+///
+public class WeatherForecast
{
- public class WeatherForecast
- {
- public DateTime Date { get; set; }
+ ///
+ /// Date
+ ///
+ public DateTime Date { get; set; }
- public int TemperatureC { get; set; }
+ ///
+ /// Temperature in Celsius
+ ///
+ public int TemperatureC { get; set; }
- public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+ ///
+ /// Temperature in F
+ ///
+ public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
- public string Summary { get; set; }
- }
-}
+ ///
+ /// Summary
+ ///
+ public string Summary { get; set; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Program.cs b/BervProject.WebApi.Boilerplate/Program.cs
index 373b6187f..b60b095ef 100644
--- a/BervProject.WebApi.Boilerplate/Program.cs
+++ b/BervProject.WebApi.Boilerplate/Program.cs
@@ -4,7 +4,7 @@
using Autofac.Extensions.DependencyInjection;
using BervProject.WebApi.Boilerplate.ConfigModel;
using BervProject.WebApi.Boilerplate.EntityFramework;
-using BervProject.WebApi.Boilerplate.Extenstions;
+using BervProject.WebApi.Boilerplate.Extensions;
using BervProject.WebApi.Boilerplate.Services;
using BervProject.WebApi.Boilerplate.Services.Azure;
using Hangfire;
@@ -23,19 +23,18 @@
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(LogLevel.Trace);
-builder.Logging.AddNLog("Nlog.config");
-builder.Logging.AddNLogWeb();
+builder.Logging.AddNLogWeb("Nlog.config");
builder.Host.UseNLog();
// settings injection
-var awsConfig = builder.Configuration.GetSection("AWS").Get();
+var awsConfig = builder.Configuration.GetSection("AWS").Get();
builder.Services.AddSingleton(awsConfig);
var azureConfig = builder.Configuration.GetSection("Azure").Get();
builder.Services.AddSingleton(azureConfig);
// aws services
-builder.Services.SetupAWS();
+builder.Services.SetupAws();
// azure services
builder.Services.SetupAzure(builder.Configuration);
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/AWSS3Service.cs b/BervProject.WebApi.Boilerplate/Services/AWS/AWSS3Service.cs
deleted file mode 100644
index 4b1b6dbad..000000000
--- a/BervProject.WebApi.Boilerplate/Services/AWS/AWSS3Service.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Amazon.S3;
-using Amazon.S3.Model;
-
-namespace BervProject.WebApi.Boilerplate.Services.AWS
-{
- public class AWSS3Service : IAWSS3Service
- {
- private readonly IAmazonS3 _s3Client;
- public AWSS3Service(IAmazonS3 amazonS3)
- {
- _s3Client = amazonS3;
- }
- public async Task UploadFile(IFormFile formFile)
- {
- var location = $"uploads/{formFile.FileName}";
- using var stream = formFile.OpenReadStream();
- var putRequest = new PutObjectRequest
- {
- Key = location,
- BucketName = "upload-test-berv",
- InputStream = stream,
- AutoCloseStream = true,
- ContentType = formFile.ContentType
- };
- await _s3Client.PutObjectAsync(putRequest);
- return location;
- }
- }
-}
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/AwsS3Service.cs b/BervProject.WebApi.Boilerplate/Services/AWS/AwsS3Service.cs
new file mode 100644
index 000000000..2a67b0a3f
--- /dev/null
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/AwsS3Service.cs
@@ -0,0 +1,40 @@
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
+
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Amazon.S3;
+using Amazon.S3.Model;
+
+///
+public class AwsS3Service : IAwsS3Service
+{
+ private readonly IAmazonS3 _s3Client;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ public AwsS3Service(IAmazonS3 amazonS3)
+ {
+ _s3Client = amazonS3;
+ }
+ ///
+ /// Implementation of Upload File
+ ///
+ ///
+ ///
+ public async Task UploadFile(IFormFile formFile)
+ {
+ var location = $"uploads/{formFile.FileName}";
+ await using var stream = formFile.OpenReadStream();
+ var putRequest = new PutObjectRequest
+ {
+ Key = location,
+ BucketName = "upload-test-berv",
+ InputStream = stream,
+ AutoCloseStream = true,
+ ContentType = formFile.ContentType
+ };
+ await _s3Client.PutObjectAsync(putRequest);
+ return location;
+ }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/DynamoDbServices.cs b/BervProject.WebApi.Boilerplate/Services/AWS/DynamoDbServices.cs
index aeac75764..52345c48a 100644
--- a/BervProject.WebApi.Boilerplate/Services/AWS/DynamoDbServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/DynamoDbServices.cs
@@ -1,4 +1,6 @@
-using Amazon.DynamoDBv2;
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
+
+using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
using Microsoft.Extensions.Logging;
using System;
@@ -6,38 +8,44 @@
using System.Text.Json;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.AWS
+///
+public class DynamoDbServices : IDynamoDbServices
{
- public class DynamoDbServices : IDynamoDbServices
+ private readonly IAmazonDynamoDB _dynamoClient;
+ private readonly ILogger _logger;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ public DynamoDbServices(IAmazonDynamoDB amazonDynamoDb, ILogger logger)
{
- private readonly IAmazonDynamoDB _dynamoClient;
- private readonly ILogger _logger;
- public DynamoDbServices(IAmazonDynamoDB amazonDynamoDb, ILogger logger)
- {
- _logger = logger;
- _dynamoClient = amazonDynamoDb;
- }
+ _logger = logger;
+ _dynamoClient = amazonDynamoDb;
+ }
- public async Task CreateObject()
+ ///
+ /// Create Object
+ ///
+ public async Task CreateObject()
+ {
+ var request = new PutItemRequest()
{
- var request = new PutItemRequest()
+ TableName = "dev-test",
+ Item = new Dictionary
{
- TableName = "dev-test",
- Item = new Dictionary
+ { "Id", new AttributeValue
+ {
+ S = Guid.NewGuid().ToString()
+ }},
+ { "Name", new AttributeValue
{
- { "Id", new AttributeValue
- {
- S = Guid.NewGuid().ToString()
- }},
- { "Name", new AttributeValue
- {
- S = "Hello World!"
- }}
- }
- };
- var response = await _dynamoClient.PutItemAsync(request);
- string message = $"Response: {response.HttpStatusCode}, {JsonSerializer.Serialize(response.Attributes)}";
- _logger.LogInformation(message);
- }
+ S = "Hello World!"
+ }}
+ }
+ };
+ var response = await _dynamoClient.PutItemAsync(request);
+ string message = $"Response: {response.HttpStatusCode}, {JsonSerializer.Serialize(response.Attributes)}";
+ _logger.LogInformation(message);
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/EmailService.cs b/BervProject.WebApi.Boilerplate/Services/AWS/EmailService.cs
index acbdcc027..dbbfb1b03 100644
--- a/BervProject.WebApi.Boilerplate/Services/AWS/EmailService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/EmailService.cs
@@ -1,49 +1,57 @@
-using Amazon.SimpleEmail;
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
+
+using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Text.Json;
-using System.Text.Json.Serialization;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.AWS
+///
+public class EmailService : IEmailService
{
- public class EmailService : IEmailService
+ private readonly IAmazonSimpleEmailService _emailClient;
+ private readonly ILogger _logger;
+ ///
+ /// Default Constructor with Dependency Injections
+ ///
+ ///
+ ///
+ public EmailService(ILogger logger, IAmazonSimpleEmailService emailClient)
{
- private readonly IAmazonSimpleEmailService _emailClient;
- private readonly ILogger _logger;
- public EmailService(ILogger logger, IAmazonSimpleEmailService emailClient)
- {
- _logger = logger;
- _emailClient = emailClient;
- }
+ _logger = logger;
+ _emailClient = emailClient;
+ }
- public async Task SendEmail(List receiver)
+ ///
+ /// Send Email
+ ///
+ ///
+ public async Task SendEmail(List receiver)
+ {
+ var request = new SendEmailRequest()
{
- var request = new SendEmailRequest()
+ ReplyToAddresses = new List { "bervianto.leo@gmail.com" },
+ Message = new Message()
{
- ReplyToAddresses = new List { "bervianto.leo@gmail.com" },
- Message = new Message()
- {
- Body = new Body(new Content("Hello World!")),
- Subject = new Content("Stand by me")
- },
- Destination = new Destination(receiver),
- Source = "support@berviantoleo.my.id"
- };
- var response = await _emailClient.SendEmailAsync(request);
- string messageId = $"Message id: {response.MessageId}";
- _logger.LogDebug(messageId);
- if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
- {
- _logger.LogInformation("Finished Sent Email");
- }
- else
- {
- _logger.LogWarning("There is a problem when sending email");
- string message = $"Error: {response.MessageId}:{response.HttpStatusCode}:{JsonSerializer.Serialize(response.ResponseMetadata.Metadata)}";
- _logger.LogWarning(message);
- }
+ Body = new Body(new Content("Hello World!")),
+ Subject = new Content("Stand by me")
+ },
+ Destination = new Destination(receiver),
+ Source = "support@berviantoleo.my.id"
+ };
+ var response = await _emailClient.SendEmailAsync(request);
+ string messageId = $"Message id: {response.MessageId}";
+ _logger.LogDebug(messageId);
+ if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
+ {
+ _logger.LogInformation("Finished Sent Email");
+ }
+ else
+ {
+ _logger.LogWarning("There is a problem when sending email");
+ string message = $"Error: {response.MessageId}:{response.HttpStatusCode}:{JsonSerializer.Serialize(response.ResponseMetadata.Metadata)}";
+ _logger.LogWarning(message);
}
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/IAWSS3Service.cs b/BervProject.WebApi.Boilerplate/Services/AWS/IAWSS3Service.cs
deleted file mode 100644
index 06a245ba0..000000000
--- a/BervProject.WebApi.Boilerplate/Services/AWS/IAWSS3Service.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-
-namespace BervProject.WebApi.Boilerplate.Services.AWS
-{
- public interface IAWSS3Service
- {
- Task UploadFile(IFormFile formFile);
- }
-}
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/IAwsS3Service.cs b/BervProject.WebApi.Boilerplate/Services/AWS/IAwsS3Service.cs
new file mode 100644
index 000000000..2a460c223
--- /dev/null
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/IAwsS3Service.cs
@@ -0,0 +1,17 @@
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
+
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+
+///
+/// AWS S3 Service Interface
+///
+public interface IAwsS3Service
+{
+ ///
+ /// Upload File
+ ///
+ ///
+ ///
+ Task UploadFile(IFormFile formFile);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/IDynamoDbServices.cs b/BervProject.WebApi.Boilerplate/Services/AWS/IDynamoDbServices.cs
index 35bdad162..0e6008a91 100644
--- a/BervProject.WebApi.Boilerplate/Services/AWS/IDynamoDbServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/IDynamoDbServices.cs
@@ -1,9 +1,15 @@
-using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
-namespace BervProject.WebApi.Boilerplate.Services.AWS
+using System.Threading.Tasks;
+
+///
+/// Dynamo DB Service Interface
+///
+public interface IDynamoDbServices
{
- public interface IDynamoDbServices
- {
- Task CreateObject();
- }
-}
+ ///
+ /// Create an object
+ ///
+ ///
+ Task CreateObject();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/AWS/IEmailService.cs b/BervProject.WebApi.Boilerplate/Services/AWS/IEmailService.cs
index b44e331f4..a017cd323 100644
--- a/BervProject.WebApi.Boilerplate/Services/AWS/IEmailService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/AWS/IEmailService.cs
@@ -1,10 +1,17 @@
-using System.Collections.Generic;
+namespace BervProject.WebApi.Boilerplate.Services.AWS;
+
+using System.Collections.Generic;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.AWS
+///
+/// Email Service Interface
+///
+public interface IEmailService
{
- public interface IEmailService
- {
- Task SendEmail(List receiver);
- }
-}
+ ///
+ /// Send Email
+ ///
+ ///
+ ///
+ Task SendEmail(List receiver);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/AzureQueueServices.cs b/BervProject.WebApi.Boilerplate/Services/Azure/AzureQueueServices.cs
index 7fd9bd82f..8366d8acf 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/AzureQueueServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/AzureQueueServices.cs
@@ -1,42 +1,50 @@
using Azure.Messaging.ServiceBus;
-using BervProject.WebApi.Boilerplate.ConfigModel;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class AzureQueueServices : IAzureQueueServices
{
- public class AzureQueueServices : IAzureQueueServices
+ private readonly string _queueName;
+ private readonly ServiceBusSender _serviceBusSender;
+ private readonly ILogger _logger;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ public AzureQueueServices(AzureConfiguration azureConfiguration, ILogger logger, ServiceBusClient serviceBusClient)
+ {
+ _logger = logger;
+ _queueName = azureConfiguration.ServiceBus.QueueName;
+ _serviceBusSender = serviceBusClient.CreateSender(_queueName);
+ }
+
+ ///
+ public async Task SendMessage(string message)
{
- private readonly string _queueName;
- private readonly ServiceBusSender _serviceBusSender;
- private readonly ILogger _logger;
- public AzureQueueServices(AzureConfiguration azureConfiguration, ILogger logger, ServiceBusClient serviceBusClient)
+ try
{
- _logger = logger;
- _queueName = azureConfiguration.ServiceBus.QueueName;
- _serviceBusSender = serviceBusClient.CreateSender(_queueName);
+ var messageQueue = new ServiceBusMessage(message);
+ _logger.LogDebug($"Sending message: {message}");
+ await _serviceBusSender.SendMessageAsync(messageQueue);
+ _logger.LogDebug($"Sent message: {message}");
+ return true;
}
-
- public async Task SendMessage(string message)
+ catch (Exception ex)
+ {
+ _logger.LogError(ex.ToString());
+ return false;
+ }
+ finally
{
- try
- {
- var messageQueue = new ServiceBusMessage(message);
- _logger.LogDebug($"Sending message: {message}");
- await _serviceBusSender.SendMessageAsync(messageQueue);
- _logger.LogDebug($"Sent message: {message}");
- return true;
- }
- catch (Exception ex)
- {
- _logger.LogError(ex.ToString());
- return false;
- }
- finally
- {
- await _serviceBusSender.CloseAsync();
- }
+ await _serviceBusSender.CloseAsync();
}
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/AzureStorageQueueService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/AzureStorageQueueService.cs
index 69c07433c..0e7faf0f8 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/AzureStorageQueueService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/AzureStorageQueueService.cs
@@ -1,85 +1,88 @@
using Azure.Storage.Queues;
-using BervProject.WebApi.Boilerplate.ConfigModel;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.Extensions.Logging;
using System;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class AzureStorageQueueService : IAzureStorageQueueService
{
- public class AzureStorageQueueService : IAzureStorageQueueService
- {
- private readonly ILogger _logger;
- private readonly QueueClient _queueClient;
- private readonly string _queueName;
+ private readonly ILogger _logger;
+ private readonly QueueClient _queueClient;
+ private readonly string _queueName;
- public AzureStorageQueueService(ILogger logger,
- AzureConfiguration azureConfiguration,
- QueueServiceClient queueServiceClient)
- {
- _logger = logger;
- _queueName = azureConfiguration.Storage.Queue.QueueName;
- _queueClient = queueServiceClient.GetQueueClient(_queueName);
- _queueClient.CreateIfNotExists();
- }
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ public AzureStorageQueueService(ILogger logger,
+ AzureConfiguration azureConfiguration,
+ QueueServiceClient queueServiceClient)
+ {
+ _logger = logger;
+ _queueName = azureConfiguration.Storage.Queue.QueueName;
+ _queueClient = queueServiceClient.GetQueueClient(_queueName);
+ _queueClient.CreateIfNotExists();
+ }
- public string ReceiveMessage()
+ ///
+ public string ReceiveMessage()
+ {
+ try
{
- try
+ if (_queueClient.Exists())
{
- if (_queueClient.Exists())
- {
- var response = _queueClient.ReceiveMessage();
- var message = response?.Value;
- if (message != null)
- {
- var textMessage = message.Body.ToString();
- _logger.LogDebug($"Get message from {_queueName}:{message.MessageId}: {textMessage}");
- _logger.LogDebug($"Message {message.MessageId} deqeue from {_queueName}");
- var responseDelete = _queueClient.DeleteMessage(message.MessageId, message.PopReceipt);
- _logger.LogDebug($"Message finished deqeue from {_queueName}: {responseDelete.ClientRequestId}");
- return textMessage;
- }
- else
- {
- _logger.LogDebug($"Empty message at {_queueName}");
- return null;
- }
- }
- else
+ var response = _queueClient.ReceiveMessage();
+ var message = response?.Value;
+ if (message != null)
{
- _logger.LogWarning($"{_queueName} is not exists");
- return null;
+ var textMessage = message.Body.ToString();
+ _logger.LogDebug($"Get message from {_queueName}:{message.MessageId}: {textMessage}");
+ _logger.LogDebug($"Message {message.MessageId} deqeue from {_queueName}");
+ var responseDelete = _queueClient.DeleteMessage(message.MessageId, message.PopReceipt);
+ _logger.LogDebug($"Message finished deqeue from {_queueName}: {responseDelete.ClientRequestId}");
+ return textMessage;
}
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Something Error, ignoring");
+
+ _logger.LogDebug($"Empty message at {_queueName}");
return null;
}
+
+ _logger.LogWarning($"{_queueName} is not exists");
+ return null;
}
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Something Error, ignoring");
+ return null;
+ }
+ }
- public bool SendMessage(string message)
+ ///
+ public bool SendMessage(string message)
+ {
+ try
{
- try
+ if (_queueClient.Exists())
{
- if (_queueClient.Exists())
- {
- _logger.LogDebug($"Sending message: {message} at {_queueName}");
- var response = _queueClient.SendMessage(message);
- var messageId = response?.Value?.MessageId;
- _logger.LogDebug($"Sent message to {_queueName} with id: {messageId}");
- return true;
- }
- else
- {
- _logger.LogWarning($"{_queueName} is not exists");
- return false;
- }
- }
- catch (Exception ex)
- {
- _logger.LogError(ex.ToString());
- return false;
+ _logger.LogDebug($"Sending message: {message} at {_queueName}");
+ var response = _queueClient.SendMessage(message);
+ var messageId = response?.Value?.MessageId;
+ _logger.LogDebug($"Sent message to {_queueName} with id: {messageId}");
+ return true;
}
+
+ _logger.LogWarning($"{_queueName} is not exists");
+ return false;
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex.ToString());
+ return false;
}
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/AzureTableStorageService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/AzureTableStorageService.cs
index b5259305d..6365d8cc3 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/AzureTableStorageService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/AzureTableStorageService.cs
@@ -1,50 +1,58 @@
using Azure.Data.Tables;
-using BervProject.WebApi.Boilerplate.ConfigModel;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
-{
- public class AzureTableStorageService : IAzureTableStorageService
+///
+public class AzureTableStorageService : IAzureTableStorageService
where T : class, ITableEntity, new()
- {
- private readonly ILogger> _logger;
- private readonly TableServiceClient _tableServiceClient;
- private readonly string _tableName;
- public AzureTableStorageService(ILogger> logger,
- AzureConfiguration azureConfiguration,
- TableServiceClient tableServiceClient)
- {
- _logger = logger;
- _tableServiceClient = tableServiceClient;
- _tableName = typeof(T).ShortDisplayName();
- }
+{
+ private readonly ILogger> _logger;
+ private readonly TableServiceClient _tableServiceClient;
+ private readonly string _tableName;
- public async Task CreateTableAsync()
- {
- _logger.LogInformation($"Creating table: {_tableName}");
- await _tableServiceClient.CreateTableIfNotExistsAsync(_tableName);
- _logger.LogInformation($"{_tableName} created");
- }
+ ///
+ /// Default Constructor with dependency injections
+ ///
+ ///
+ ///
+ public AzureTableStorageService(ILogger> logger,
+ TableServiceClient tableServiceClient)
+ {
+ _logger = logger;
+ _tableServiceClient = tableServiceClient;
+ _tableName = typeof(T).ShortDisplayName();
+ }
- public async Task UpsertAsync(T data)
- {
- var tableClient = _tableServiceClient.GetTableClient(_tableName);
- var response = await tableClient.UpsertEntityAsync(data);
- if (response.IsError)
- {
- _logger.LogError(response.ReasonPhrase);
- }
- }
+ ///
+ public async Task CreateTableAsync()
+ {
+ _logger.LogInformation($"Creating table: {_tableName}");
+ await _tableServiceClient.CreateTableIfNotExistsAsync(_tableName);
+ _logger.LogInformation($"{_tableName} created");
+ }
- public async Task GetAsync(string partitionKey, string rowKey)
+ ///
+ public async Task UpsertAsync(T data)
+ {
+ var tableClient = _tableServiceClient.GetTableClient(_tableName);
+ var response = await tableClient.UpsertEntityAsync(data);
+ if (response.IsError)
{
- var tableClient = _tableServiceClient.GetTableClient(_tableName);
- var response = await tableClient.GetEntityAsync(partitionKey, rowKey);
- return response.Value;
+ _logger.LogError(response.ReasonPhrase);
}
}
-}
+ ///
+ public async Task GetAsync(string partitionKey, string rowKey)
+ {
+ var tableClient = _tableServiceClient.GetTableClient(_tableName);
+ var response = await tableClient.GetEntityAsync(partitionKey, rowKey);
+ return response.Value;
+ }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/BlobService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/BlobService.cs
index 4672dbb61..7c7c48a78 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/BlobService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/BlobService.cs
@@ -1,71 +1,81 @@
using Azure.Storage.Blobs;
-using BervProject.WebApi.Boilerplate.ConfigModel;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class BlobService : IBlobService
{
- public class BlobService : IBlobService
+ private readonly ILogger _logger;
+ private readonly BlobContainerClient _blobContainerClient;
+ private readonly string _containerName;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ public BlobService(ILogger logger, AzureConfiguration azureConfiguration, BlobServiceClient blobServiceClient)
{
- private readonly ILogger _logger;
- private readonly BlobContainerClient _blobContainerClient;
- private readonly string _containerName;
- public BlobService(ILogger logger, AzureConfiguration azureConfiguration, BlobServiceClient blobServiceClient)
- {
- _logger = logger;
- _containerName = azureConfiguration.Storage.Blob.ContainerName;
- _blobContainerClient = blobServiceClient.GetBlobContainerClient(_containerName);
- }
+ _logger = logger;
+ _containerName = azureConfiguration.Storage.Blob.ContainerName;
+ _blobContainerClient = blobServiceClient.GetBlobContainerClient(_containerName);
+ }
- public void CreateStorageContainer()
- {
- _logger.LogDebug($"Create Blob Container {_containerName}");
- _blobContainerClient.CreateIfNotExists();
- _logger.LogDebug($"Blob Container {_containerName} created");
- }
+ ///
+ public void CreateStorageContainer()
+ {
+ _logger.LogDebug($"Create Blob Container {_containerName}");
+ _blobContainerClient.CreateIfNotExists();
+ _logger.LogDebug($"Blob Container {_containerName} created");
+ }
- public List> GetBlobsInfo()
+ ///
+ public List> GetBlobsInfo()
+ {
+ var list = new List>();
+ if (_blobContainerClient.Exists())
{
- var list = new List>();
- if (_blobContainerClient.Exists())
+ var blobs = _blobContainerClient.GetBlobs();
+ foreach (var blob in blobs)
{
- var blobs = _blobContainerClient.GetBlobs();
- foreach (var blob in blobs)
+ _logger.LogDebug($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:YYYY-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}");
+ list.Add(new Dictionary
{
- _logger.LogDebug($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:YYYY-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}");
- list.Add(new Dictionary
- {
- { "name", blob.Name },
- { "createdDate", blob.Properties.CreatedOn?.ToString() },
- { "size", blob.Properties.ContentLength?.ToString() },
- { "version", blob.VersionId },
- { "deleted", blob.Deleted.ToString() }
- });
- }
- }
- else
- {
- _logger.LogWarning($"Can't get data, container {_containerName} not created yet");
+ { "name", blob.Name },
+ { "createdDate", blob.Properties.CreatedOn?.ToString() },
+ { "size", blob.Properties.ContentLength?.ToString() },
+ { "version", blob.VersionId },
+ { "deleted", blob.Deleted.ToString() }
+ });
}
- return list;
}
+ else
+ {
+ _logger.LogWarning($"Can't get data, container {_containerName} not created yet");
+ }
+ return list;
+ }
- public void UploadFile(IFormFile formFile)
+ ///
+ public void UploadFile(IFormFile formFile)
+ {
+ if (_blobContainerClient.Exists())
{
- if (_blobContainerClient.Exists())
- {
- var fileName = formFile.FileName;
- BlobClient blobClient = _blobContainerClient.GetBlobClient(fileName);
- using var stream = formFile.OpenReadStream();
- _logger.LogDebug($"Uploading {fileName}");
- blobClient.Upload(stream, true);
- _logger.LogDebug($"{fileName} uploaded");
- }
- else
- {
- _logger.LogWarning($"Can't upload, container {_containerName} not created yet");
- }
+ var fileName = formFile.FileName;
+ BlobClient blobClient = _blobContainerClient.GetBlobClient(fileName);
+ using var stream = formFile.OpenReadStream();
+ _logger.LogDebug($"Uploading {fileName}");
+ blobClient.Upload(stream, true);
+ _logger.LogDebug($"{fileName} uploaded");
+ }
+ else
+ {
+ _logger.LogWarning($"Can't upload, container {_containerName} not created yet");
}
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureQueueServices.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureQueueServices.cs
index 7c1cf4a8a..767026f6d 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureQueueServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureQueueServices.cs
@@ -1,9 +1,16 @@
-using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+using System.Threading.Tasks;
+
+///
+/// Azure Queue Service
+///
+public interface IAzureQueueServices
{
- public interface IAzureQueueServices
- {
- Task SendMessage(string message);
- }
-}
+ ///
+ /// Send Message
+ ///
+ ///
+ ///
+ Task SendMessage(string message);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureStorageQueueService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureStorageQueueService.cs
index 4e1b5330d..1ee763ff4 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureStorageQueueService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureStorageQueueService.cs
@@ -1,8 +1,19 @@
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+///
+/// Azure Storage Queue Service
+///
+public interface IAzureStorageQueueService
{
- public interface IAzureStorageQueueService
- {
- bool SendMessage(string message);
- string ReceiveMessage();
- }
-}
+ ///
+ /// Send Message
+ ///
+ ///
+ ///
+ bool SendMessage(string message);
+ ///
+ /// Receive Message
+ ///
+ ///
+ string ReceiveMessage();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureTableStorageService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureTableStorageService.cs
index 835af6483..6408a373b 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IAzureTableStorageService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IAzureTableStorageService.cs
@@ -1,10 +1,29 @@
-namespace BervProject.WebApi.Boilerplate.Services;
-
using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+///
+/// Azure Table Storage Service
+///
+///
public interface IAzureTableStorageService
{
+ ///
+ /// Create Table
+ ///
+ ///
Task CreateTableAsync();
+ ///
+ /// Upsert
+ ///
+ ///
+ ///
Task UpsertAsync(T data);
+ ///
+ /// Get Data
+ ///
+ ///
+ ///
+ ///
Task GetAsync(string partitionKey, string rowKey);
}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IBlobService.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IBlobService.cs
index da436a1ad..06e8765bb 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IBlobService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IBlobService.cs
@@ -1,12 +1,25 @@
-using Microsoft.AspNetCore.Http;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using Microsoft.AspNetCore.Http;
using System.Collections.Generic;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+/// Azure Blob Service
+///
+public interface IBlobService
{
- public interface IBlobService
- {
- void CreateStorageContainer();
- List> GetBlobsInfo();
- void UploadFile(IFormFile formFile);
- }
-}
+ ///
+ /// Create Container
+ ///
+ void CreateStorageContainer();
+ ///
+ /// Get Blobs Info
+ ///
+ ///
+ List> GetBlobsInfo();
+ ///
+ /// Upload File
+ ///
+ ///
+ void UploadFile(IFormFile formFile);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusQueueConsumer.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusQueueConsumer.cs
index e617baab8..bc28b8b56 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusQueueConsumer.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusQueueConsumer.cs
@@ -1,10 +1,19 @@
-using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+using System.Threading.Tasks;
+
+///
+/// Service Bus Queue Consumer
+///
+public interface IServiceBusQueueConsumer
{
- public interface IServiceBusQueueConsumer
- {
- void RegisterOnMessageHandlerAndReceiveMessages();
- Task CloseQueueAsync();
- }
-}
+ ///
+ /// Register event
+ ///
+ void RegisterOnMessageHandlerAndReceiveMessages();
+ ///
+ /// Close Queue
+ ///
+ ///
+ Task CloseQueueAsync();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusTopicSubscription.cs b/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusTopicSubscription.cs
index 0d211509e..61cef9a5f 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusTopicSubscription.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/IServiceBusTopicSubscription.cs
@@ -1,10 +1,19 @@
-using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+using System.Threading.Tasks;
+
+///
+/// Service Bus Topic Sub
+///
+public interface IServiceBusTopicSubscription
{
- public interface IServiceBusTopicSubscription
- {
- void RegisterOnMessageHandlerAndReceiveMessages();
- Task CloseSubscriptionClientAsync();
- }
-}
+ ///
+ /// Receive topic registration
+ ///
+ void RegisterOnMessageHandlerAndReceiveMessages();
+ ///
+ /// Close topic subs
+ ///
+ ///
+ Task CloseSubscriptionClientAsync();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/ITopicServices.cs b/BervProject.WebApi.Boilerplate/Services/Azure/ITopicServices.cs
index babf18b6a..f0039b0ac 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/ITopicServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/ITopicServices.cs
@@ -1,9 +1,16 @@
-using System.Threading.Tasks;
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+using System.Threading.Tasks;
+
+///
+/// Topic Service
+///
+public interface ITopicServices
{
- public interface ITopicServices
- {
- Task SendTopic(string message);
- }
-}
+ ///
+ /// Sending topic
+ ///
+ ///
+ ///
+ Task SendTopic(string message);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusQueueConsumer.cs b/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusQueueConsumer.cs
index a33d05c88..a28a9a404 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusQueueConsumer.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusQueueConsumer.cs
@@ -1,67 +1,77 @@
using Azure.Messaging.ServiceBus;
-using BervProject.WebApi.Boilerplate.ConfigModel;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class ServiceBusQueueConsumer : IServiceBusQueueConsumer
{
- public class ServiceBusQueueConsumer : IServiceBusQueueConsumer
+ private readonly ILogger _logger;
+ private readonly string _queueName;
+ private readonly ServiceBusProcessor _serviceBusProcessor;
+ private readonly IProcessData _processData;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ServiceBusQueueConsumer(ILogger logger,
+ IProcessData processData,
+ AzureConfiguration azureConfiguration,
+ ServiceBusClient serviceBusClient)
{
- private readonly ILogger _logger;
- private readonly string _queueName;
- private readonly ServiceBusProcessor _serviceBusProcessor;
- private readonly IProcessData _processData;
- public ServiceBusQueueConsumer(ILogger logger,
- IProcessData processData,
- AzureConfiguration azureConfiguration,
- ServiceBusClient serviceBusClient)
+ _logger = logger;
+ _processData = processData;
+ _queueName = azureConfiguration.ServiceBus.QueueName;
+ var options = new ServiceBusProcessorOptions
{
- _logger = logger;
- _processData = processData;
- _queueName = azureConfiguration.ServiceBus.QueueName;
- var options = new ServiceBusProcessorOptions
- {
- // By default or when AutoCompleteMessages is set to true, the processor will complete the message after executing the message handler
- // Set AutoCompleteMessages to false to [settle messages](https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock) on your own.
- // In both cases, if the message handler throws an exception without settling the message, the processor will abandon the message.
- AutoCompleteMessages = false,
+ // By default or when AutoCompleteMessages is set to true, the processor will complete the message after executing the message handler
+ // Set AutoCompleteMessages to false to [settle messages](https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock) on your own.
+ // In both cases, if the message handler throws an exception without settling the message, the processor will abandon the message.
+ AutoCompleteMessages = false,
- // I can also allow for multi-threading
- MaxConcurrentCalls = 2
- };
- _serviceBusProcessor = serviceBusClient.CreateProcessor(_queueName, options);
- }
+ // I can also allow for multi-threading
+ MaxConcurrentCalls = 2
+ };
+ _serviceBusProcessor = serviceBusClient.CreateProcessor(_queueName, options);
+ }
- public void RegisterOnMessageHandlerAndReceiveMessages()
- {
- _logger.LogDebug($"Register queue for {_queueName}");
- _serviceBusProcessor.ProcessMessageAsync += MessageHandler;
- _serviceBusProcessor.ProcessErrorAsync += ErrorHandler;
- _logger.LogDebug($"Registered queue for {_queueName}");
- }
+ ///
+ public void RegisterOnMessageHandlerAndReceiveMessages()
+ {
+ _logger.LogDebug($"Register queue for {_queueName}");
+ _serviceBusProcessor.ProcessMessageAsync += MessageHandler;
+ _serviceBusProcessor.ProcessErrorAsync += ErrorHandler;
+ _logger.LogDebug($"Registered queue for {_queueName}");
+ }
- private async Task MessageHandler(ProcessMessageEventArgs args)
- {
- var myPayload = args.Message.Body.ToString();
- _processData.Process(myPayload);
- await args.CompleteMessageAsync(args.Message);
- }
+ private async Task MessageHandler(ProcessMessageEventArgs args)
+ {
+ var myPayload = args.Message.Body.ToString();
+ _processData.Process(myPayload);
+ await args.CompleteMessageAsync(args.Message);
+ }
- private Task ErrorHandler(ProcessErrorEventArgs args)
- {
- _logger.LogError(args.Exception, "Message handler encountered an exception");
+ private Task ErrorHandler(ProcessErrorEventArgs args)
+ {
+ _logger.LogError(args.Exception, "Message handler encountered an exception");
- _logger.LogDebug($"- Error Source: {args.ErrorSource}");
- _logger.LogDebug($"- Entity Path: {args.EntityPath}");
- _logger.LogDebug($"- Identifier: {args.Identifier}");
- _logger.LogDebug($"- FullyQualifiedNamespace: {args.FullyQualifiedNamespace}");
+ _logger.LogDebug($"- Error Source: {args.ErrorSource}");
+ _logger.LogDebug($"- Entity Path: {args.EntityPath}");
+ _logger.LogDebug($"- Identifier: {args.Identifier}");
+ _logger.LogDebug($"- FullyQualifiedNamespace: {args.FullyQualifiedNamespace}");
- return Task.CompletedTask;
- }
+ return Task.CompletedTask;
+ }
- public async Task CloseQueueAsync()
- {
- await _serviceBusProcessor.CloseAsync();
- }
+ ///
+ public async Task CloseQueueAsync()
+ {
+ await _serviceBusProcessor.CloseAsync();
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusTopicSubscription.cs b/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusTopicSubscription.cs
index 1c797177e..c0e381044 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusTopicSubscription.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/ServiceBusTopicSubscription.cs
@@ -1,74 +1,79 @@
-using Amazon.Runtime.Internal;
-using Azure.Messaging.ServiceBus;
-using BervProject.WebApi.Boilerplate.ConfigModel;
-using Microsoft.Azure.ServiceBus;
+using Azure.Messaging.ServiceBus;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.Extensions.Logging;
-using System.Diagnostics;
-using System.Text;
-using System.Threading;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class ServiceBusTopicSubscription : IServiceBusTopicSubscription
{
- public class ServiceBusTopicSubscription : IServiceBusTopicSubscription
+ private readonly ILogger _logger;
+ private readonly string _topicName;
+ private readonly string _topicSubscription = "topicSubscriptionRandom";
+ private readonly ServiceBusProcessor _serviceBusProcessor;
+ private readonly IProcessData _processData;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ServiceBusTopicSubscription(ILogger logger,
+ IProcessData processData,
+ AzureConfiguration azureConfiguration,
+ ServiceBusClient serviceBusClient)
{
- private readonly ILogger _logger;
- private readonly string _topicName;
- private readonly string _topicSubscription = "topicSubscriptionRandom";
- private readonly ServiceBusProcessor _serviceBusProcessor;
- private readonly IProcessData _processData;
- public ServiceBusTopicSubscription(ILogger logger,
- IProcessData processData,
- AzureConfiguration azureConfiguration,
- ServiceBusClient serviceBusClient)
+ _logger = logger;
+ _processData = processData;
+ _topicName = azureConfiguration.ServiceBus.TopicName;
+ var options = new ServiceBusProcessorOptions
{
- _logger = logger;
- _processData = processData;
- _topicName = azureConfiguration.ServiceBus.TopicName;
- var options = new ServiceBusProcessorOptions
- {
- // By default or when AutoCompleteMessages is set to true, the processor will complete the message after executing the message handler
- // Set AutoCompleteMessages to false to [settle messages](https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock) on your own.
- // In both cases, if the message handler throws an exception without settling the message, the processor will abandon the message.
- AutoCompleteMessages = false,
+ // By default or when AutoCompleteMessages is set to true, the processor will complete the message after executing the message handler
+ // Set AutoCompleteMessages to false to [settle messages](https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock) on your own.
+ // In both cases, if the message handler throws an exception without settling the message, the processor will abandon the message.
+ AutoCompleteMessages = false,
- // I can also allow for multi-threading
- MaxConcurrentCalls = 2
- };
- _serviceBusProcessor = serviceBusClient.CreateProcessor(_topicName, options);
- }
+ // I can also allow for multi-threading
+ MaxConcurrentCalls = 2
+ };
+ _serviceBusProcessor = serviceBusClient.CreateProcessor(_topicName, options);
+ }
- public async Task CloseSubscriptionClientAsync()
- {
- await _serviceBusProcessor.CloseAsync();
- }
+ ///
+ public async Task CloseSubscriptionClientAsync()
+ {
+ await _serviceBusProcessor.CloseAsync();
+ }
- public void RegisterOnMessageHandlerAndReceiveMessages()
- {
+ ///
+ public void RegisterOnMessageHandlerAndReceiveMessages()
+ {
- _logger.LogDebug($"Register topic for {_topicName}/{_topicSubscription}");
- _serviceBusProcessor.ProcessMessageAsync += MessageHandler;
- _serviceBusProcessor.ProcessErrorAsync += ErrorHandler;
- _logger.LogDebug($"Registered topic for {_topicName}/{_topicSubscription}");
- }
+ _logger.LogDebug($"Register topic for {_topicName}/{_topicSubscription}");
+ _serviceBusProcessor.ProcessMessageAsync += MessageHandler;
+ _serviceBusProcessor.ProcessErrorAsync += ErrorHandler;
+ _logger.LogDebug($"Registered topic for {_topicName}/{_topicSubscription}");
+ }
- private async Task MessageHandler(ProcessMessageEventArgs args)
- {
- var myPayload = args.Message.Body.ToString();
- _processData.Process(myPayload);
- await args.CompleteMessageAsync(args.Message);
- }
+ private async Task MessageHandler(ProcessMessageEventArgs args)
+ {
+ var myPayload = args.Message.Body.ToString();
+ _processData.Process(myPayload);
+ await args.CompleteMessageAsync(args.Message);
+ }
- private Task ErrorHandler(ProcessErrorEventArgs args)
- {
- _logger.LogError(args.Exception, "Message handler encountered an exception");
+ private Task ErrorHandler(ProcessErrorEventArgs args)
+ {
+ _logger.LogError(args.Exception, "Message handler encountered an exception");
- _logger.LogDebug($"- Error Source: {args.ErrorSource}");
- _logger.LogDebug($"- Entity Path: {args.EntityPath}");
- _logger.LogDebug($"- Identifier: {args.Identifier}");
- _logger.LogDebug($"- FullyQualifiedNamespace: {args.FullyQualifiedNamespace}");
+ _logger.LogDebug($"- Error Source: {args.ErrorSource}");
+ _logger.LogDebug($"- Entity Path: {args.EntityPath}");
+ _logger.LogDebug($"- Identifier: {args.Identifier}");
+ _logger.LogDebug($"- FullyQualifiedNamespace: {args.FullyQualifiedNamespace}");
- return Task.CompletedTask;
- }
+ return Task.CompletedTask;
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/Azure/TopicServices.cs b/BervProject.WebApi.Boilerplate/Services/Azure/TopicServices.cs
index eb3dd0d08..2c7b7fee0 100644
--- a/BervProject.WebApi.Boilerplate/Services/Azure/TopicServices.cs
+++ b/BervProject.WebApi.Boilerplate/Services/Azure/TopicServices.cs
@@ -1,43 +1,50 @@
using Azure.Messaging.ServiceBus;
-using BervProject.WebApi.Boilerplate.ConfigModel;
-using Microsoft.Azure.ServiceBus;
+
+namespace BervProject.WebApi.Boilerplate.Services.Azure;
+
+using ConfigModel;
using Microsoft.Extensions.Logging;
using System;
-using System.Text;
using System.Threading.Tasks;
-namespace BervProject.WebApi.Boilerplate.Services.Azure
+///
+public class TopicServices : ITopicServices
{
- public class TopicServices : ITopicServices
+ private readonly string _topicName;
+ private readonly ServiceBusSender _serviceBusSender;
+ private readonly ILogger _logger;
+ ///
+ /// Default constructor with dependency injections
+ ///
+ ///
+ ///
+ ///
+ public TopicServices(AzureConfiguration azureConfiguration, ILogger logger, ServiceBusClient serviceBusClient)
{
- private readonly string _topicName;
- private readonly ServiceBusSender _serviceBusSender;
- private readonly ILogger _logger;
- public TopicServices(AzureConfiguration azureConfiguration, ILogger logger, ServiceBusClient serviceBusClient)
+ _logger = logger;
+ _topicName = azureConfiguration.ServiceBus.TopicName;
+ _serviceBusSender = serviceBusClient.CreateSender(_topicName);
+ }
+
+ ///
+ public async Task SendTopic(string message)
+ {
+ try
+ {
+ var encodedMessage = new ServiceBusMessage(message);
+ _logger.LogDebug($"Sending message: {message}");
+ await _serviceBusSender.SendMessageAsync(encodedMessage);
+ _logger.LogDebug($"Sent message: {message}");
+ return true;
+ }
+ catch (Exception ex)
{
- _logger = logger;
- _topicName = azureConfiguration.ServiceBus.TopicName;
- _serviceBusSender = serviceBusClient.CreateSender(_topicName);
+ _logger.LogError(ex.ToString());
+ return false;
}
- public async Task SendTopic(string message)
+ finally
{
- try
- {
- var encodedMessage = new ServiceBusMessage(message);
- _logger.LogDebug($"Sending message: {message}");
- await _serviceBusSender.SendMessageAsync(encodedMessage);
- _logger.LogDebug($"Sent message: {message}");
- return true;
- }
- catch (Exception ex)
- {
- _logger.LogError(ex.ToString());
- return false;
- }
- finally
- {
- await _serviceBusSender.CloseAsync();
- }
+ await _serviceBusSender.CloseAsync();
}
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/CronService.cs b/BervProject.WebApi.Boilerplate/Services/CronService.cs
index 7c1dab507..d6ad914c6 100644
--- a/BervProject.WebApi.Boilerplate/Services/CronService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/CronService.cs
@@ -1,19 +1,28 @@
-using Microsoft.Extensions.Logging;
+namespace BervProject.WebApi.Boilerplate.Services;
-namespace BervProject.WebApi.Boilerplate.Services
+using Microsoft.Extensions.Logging;
+
+///
+/// Cron Service
+///
+public class CronService : ICronService
{
- public class CronService : ICronService
+ private readonly ILogger _logger;
+ ///
+ /// Cron Service Constructor with Dependency Injection
+ ///
+ ///
+ public CronService(ILoggerFactory loggerFactory)
+ {
+ _logger = loggerFactory.CreateLogger();
+ }
+ ///
+ /// Hello World Cron
+ ///
+ public void HelloWorld()
{
- private readonly ILogger _logger;
- public CronService(ILoggerFactory loggerFactory)
- {
- _logger = loggerFactory.CreateLogger();
- }
- public void HelloWorld()
- {
- _logger.LogDebug("Run Cron");
- _logger.LogInformation("Hello World Cron!");
- _logger.LogDebug("Finished Run Cron");
- }
+ _logger.LogDebug("Run Cron");
+ _logger.LogInformation("Hello World Cron!");
+ _logger.LogDebug("Finished Run Cron");
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/ICronService.cs b/BervProject.WebApi.Boilerplate/Services/ICronService.cs
index cfea02fe9..183554d6e 100644
--- a/BervProject.WebApi.Boilerplate/Services/ICronService.cs
+++ b/BervProject.WebApi.Boilerplate/Services/ICronService.cs
@@ -1,7 +1,12 @@
-namespace BervProject.WebApi.Boilerplate.Services
+namespace BervProject.WebApi.Boilerplate.Services;
+
+///
+/// Interface Cron Service
+///
+public interface ICronService
{
- public interface ICronService
- {
- public void HelloWorld();
- }
-}
+ ///
+ /// Hello World method
+ ///
+ public void HelloWorld();
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/IProcessData.cs b/BervProject.WebApi.Boilerplate/Services/IProcessData.cs
index 343c66f5f..c18ab0a0d 100644
--- a/BervProject.WebApi.Boilerplate/Services/IProcessData.cs
+++ b/BervProject.WebApi.Boilerplate/Services/IProcessData.cs
@@ -1,7 +1,13 @@
-namespace BervProject.WebApi.Boilerplate.Services
+namespace BervProject.WebApi.Boilerplate.Services;
+
+///
+/// Interface Process Message
+///
+public interface IProcessData
{
- public interface IProcessData
- {
- void Process(string message);
- }
-}
+ ///
+ /// Process message
+ ///
+ ///
+ void Process(string message);
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Boilerplate/Services/ProcessData.cs b/BervProject.WebApi.Boilerplate/Services/ProcessData.cs
index b1c1b9132..aa50aac40 100644
--- a/BervProject.WebApi.Boilerplate/Services/ProcessData.cs
+++ b/BervProject.WebApi.Boilerplate/Services/ProcessData.cs
@@ -1,18 +1,28 @@
-using Microsoft.Extensions.Logging;
+namespace BervProject.WebApi.Boilerplate.Services;
-namespace BervProject.WebApi.Boilerplate.Services
+using Microsoft.Extensions.Logging;
+
+///
+/// Process Data Implementation
+///
+public class ProcessData : IProcessData
{
- public class ProcessData : IProcessData
+ private readonly ILogger _logger;
+ ///
+ /// Constructor with dependency injections
+ ///
+ ///
+ public ProcessData(ILogger logger)
+ {
+ _logger = logger;
+ }
+ ///
+ /// Only logging
+ ///
+ ///
+ public void Process(string message)
{
- private readonly ILogger _logger;
- public ProcessData(ILogger logger)
- {
- _logger = logger;
- }
- public void Process(string message)
- {
- _logger.LogDebug($"You get message: {message}");
- // TODO: another handler
- }
+ _logger.LogDebug($"You get message: {message}");
+ // TODO: another handler
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/BlobControllerTest.cs b/BervProject.WebApi.Integration.Test/BlobControllerTest.cs
index 73da7c8c8..74878582c 100644
--- a/BervProject.WebApi.Integration.Test/BlobControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/BlobControllerTest.cs
@@ -1,35 +1,33 @@
+namespace BervProject.WebApi.Integration.Test;
+
using System.Net.Http.Json;
-using BervProject.WebApi.Integration.Test.Fixtures;
+using Fixtures;
using Microsoft.AspNetCore.Mvc.Testing;
-using Newtonsoft.Json.Linq;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class BlobControllerTest
{
- [Collection("Webapp")]
- public class BlobControllerTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public BlobControllerTest(WebAppFixture webAppFixtures)
+ {
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task UploadBlobTest()
{
- private readonly WebApplicationFactory _applicationFactory;
- public BlobControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task UploadBlobTest()
- {
- var client = _applicationFactory.CreateClient();
- var response = await client.PostAsync("/api/v1.0/blob/create", null);
- Assert.True(response.IsSuccessStatusCode);
- using var file1 = File.OpenRead(@"Docs/test.txt");
- using var content1 = new StreamContent(file1);
- using var formData = new MultipartFormDataContent();
- formData.Add(content1, "file", "test.txt");
- response = await client.PostAsync("/api/v1.0/blob/upload", formData);
- Assert.True(response.IsSuccessStatusCode);
- response = await client.GetAsync("/api/v1.0/blob/list");
- Assert.True(response.IsSuccessStatusCode);
- var data = await response.Content.ReadFromJsonAsync>>();
- Assert.NotNull(data);
- Assert.Single(data);
- }
+ var client = _applicationFactory.CreateClient();
+ var response = await client.PostAsync("/api/v1.0/blob/create", null);
+ Assert.True(response.IsSuccessStatusCode);
+ using var file1 = File.OpenRead(@"Docs/test.txt");
+ using var content1 = new StreamContent(file1);
+ using var formData = new MultipartFormDataContent();
+ formData.Add(content1, "file", "test.txt");
+ response = await client.PostAsync("/api/v1.0/blob/upload", formData);
+ Assert.True(response.IsSuccessStatusCode);
+ response = await client.GetAsync("/api/v1.0/blob/list");
+ Assert.True(response.IsSuccessStatusCode);
+ var data = await response.Content.ReadFromJsonAsync>>();
+ Assert.NotNull(data);
+ Assert.Single(data);
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/Collections/WebAppCollection.cs b/BervProject.WebApi.Integration.Test/Collections/WebAppCollection.cs
index d69c33a3f..5590bec68 100644
--- a/BervProject.WebApi.Integration.Test/Collections/WebAppCollection.cs
+++ b/BervProject.WebApi.Integration.Test/Collections/WebAppCollection.cs
@@ -1,12 +1,11 @@
-using BervProject.WebApi.Integration.Test.Fixtures;
+namespace BervProject.WebApi.Integration.Test.Collections;
-namespace BervProject.WebApi.Integration.Test.Collections
+using Fixtures;
+
+[CollectionDefinition("Webapp")]
+public class WebAppCollection : ICollectionFixture
{
- [CollectionDefinition("Webapp")]
- public class WebAppCollection : ICollectionFixture
- {
- // This class has no code, and is never created. Its purpose is simply
- // to be the place to apply [CollectionDefinition] and all the
- // ICollectionFixture<> interfaces.
- }
-}
+ // This class has no code, and is never created. Its purpose is simply
+ // to be the place to apply [CollectionDefinition] and all the
+ // ICollectionFixture<> interfaces.
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/CronControllerTest.cs b/BervProject.WebApi.Integration.Test/CronControllerTest.cs
index 489f94b89..dcc219189 100644
--- a/BervProject.WebApi.Integration.Test/CronControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/CronControllerTest.cs
@@ -1,61 +1,61 @@
-using BervProject.WebApi.Integration.Test.Fixtures;
+namespace BervProject.WebApi.Integration.Test;
+
+using Fixtures;
using Hangfire;
using Microsoft.AspNetCore.Mvc.Testing;
-namespace BervProject.WebApi.Integration.Test
+
+[Collection("Webapp")]
+public class CronControllerTest : IDisposable
{
- [Collection("Webapp")]
- public class CronControllerTest : IDisposable
+ private readonly WebApplicationFactory _applicationFactory;
+ private readonly List _registeredRecurring = new();
+ public CronControllerTest(WebAppFixture webAppFixtures)
{
- private readonly WebApplicationFactory _applicationFactory;
- private readonly List _registeredRecurring = new List();
- public CronControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
+ _applicationFactory = webAppFixtures.WebApp;
+ }
- public void Dispose()
- {
- RemoveRecurringJob();
- }
+ public void Dispose()
+ {
+ RemoveRecurringJob();
+ }
- private void RemoveRecurringJob()
+ private void RemoveRecurringJob()
+ {
+ var cronClient = (IRecurringJobManager?)this._applicationFactory.Services.GetService(typeof(IRecurringJobManager));
+ if (cronClient != null)
{
- var cronClient = (IRecurringJobManager?)this._applicationFactory.Services.GetService(typeof(IRecurringJobManager));
- if (cronClient != null)
+ foreach (var cronId in _registeredRecurring)
{
- foreach (var cronId in _registeredRecurring)
- {
- cronClient.RemoveIfExists(cronId);
- }
+ cronClient.RemoveIfExists(cronId);
}
}
+ }
- [Fact]
- public async Task SuccessCreateCronOnceTest()
+ [Fact]
+ public async Task SuccessCreateCronOnceTest()
+ {
+ var client = _applicationFactory.CreateClient();
+ var response = await client.PostAsync("/api/v1.0/cron/CreateCronOnce", null);
+ Assert.True(response.IsSuccessStatusCode);
+ var stringResponse = await response.Content.ReadAsStringAsync();
+ Assert.NotEmpty(stringResponse);
+ var cronClient = (IBackgroundJobClient?)this._applicationFactory.Services.GetService(typeof(IBackgroundJobClient));
+ if (cronClient != null)
{
- var client = _applicationFactory.CreateClient();
- var response = await client.PostAsync("/api/v1.0/cron/CreateCronOnce", null);
- Assert.True(response.IsSuccessStatusCode);
- var stringResponse = await response.Content.ReadAsStringAsync();
- Assert.NotEmpty(stringResponse);
- var cronClient = (IBackgroundJobClient?)this._applicationFactory.Services.GetService(typeof(IBackgroundJobClient));
- if (cronClient != null)
- {
- var deleted = cronClient.Delete(stringResponse);
- Assert.True(deleted);
- }
+ var deleted = cronClient.Delete(stringResponse);
+ Assert.True(deleted);
}
+ }
- [Fact]
- public async Task SuccessCreateRecuranceTest()
- {
- var client = _applicationFactory.CreateClient();
- var response = await client.PostAsync("/api/v1.0/cron/CreateRecurance", null);
- Assert.True(response.IsSuccessStatusCode);
- var stringResponse = await response.Content.ReadAsStringAsync();
- Assert.NotEmpty(stringResponse);
- _registeredRecurring.Add(stringResponse);
- }
+ [Fact]
+ public async Task SuccessCreateRecuranceTest()
+ {
+ var client = _applicationFactory.CreateClient();
+ var response = await client.PostAsync("/api/v1.0/cron/CreateRecurance", null);
+ Assert.True(response.IsSuccessStatusCode);
+ var stringResponse = await response.Content.ReadAsStringAsync();
+ Assert.NotEmpty(stringResponse);
+ _registeredRecurring.Add(stringResponse);
}
}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/ErrorControllerTest.cs b/BervProject.WebApi.Integration.Test/ErrorControllerTest.cs
index 2783fa513..00314689f 100644
--- a/BervProject.WebApi.Integration.Test/ErrorControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/ErrorControllerTest.cs
@@ -1,30 +1,29 @@
-using BervProject.WebApi.Integration.Test.Fixtures;
+namespace BervProject.WebApi.Integration.Test;
+
+using Fixtures;
using Microsoft.AspNetCore.Mvc.Testing;
using Newtonsoft.Json.Linq;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class ErrorControllerTest
{
- [Collection("Webapp")]
- public class ErrorControllerTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public ErrorControllerTest(WebAppFixture webAppFixtures)
+ {
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task SuccessCheck()
{
- private readonly WebApplicationFactory _applicationFactory;
- public ErrorControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task SuccessCheck()
- {
- var client = _applicationFactory.CreateClient();
- var response = await client.GetAsync("/api/v1.0/error/error");
- Assert.False(response.IsSuccessStatusCode);
- Assert.Equal(System.Net.HttpStatusCode.InternalServerError, response.StatusCode);
- var responseString = await response.Content.ReadAsStringAsync();
- var jObject = JObject.Parse(responseString);
- var status = jObject.Value("status");
- var title = jObject.Value("title");
- Assert.Equal("An error occurred while processing your request.", title);
- Assert.Equal(500, status);
- }
+ var client = _applicationFactory.CreateClient();
+ var response = await client.GetAsync("/api/v1.0/error/error");
+ Assert.False(response.IsSuccessStatusCode);
+ Assert.Equal(System.Net.HttpStatusCode.InternalServerError, response.StatusCode);
+ var responseString = await response.Content.ReadAsStringAsync();
+ var jObject = JObject.Parse(responseString);
+ var status = jObject.Value("status");
+ var title = jObject.Value("title");
+ Assert.Equal("An error occurred while processing your request.", title);
+ Assert.Equal(500, status);
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/Fixtures/WebAppFixture.cs b/BervProject.WebApi.Integration.Test/Fixtures/WebAppFixture.cs
index ac76367f1..2da3b04bb 100644
--- a/BervProject.WebApi.Integration.Test/Fixtures/WebAppFixture.cs
+++ b/BervProject.WebApi.Integration.Test/Fixtures/WebAppFixture.cs
@@ -1,21 +1,20 @@
-using Microsoft.AspNetCore.Mvc.Testing;
+namespace BervProject.WebApi.Integration.Test.Fixtures;
-namespace BervProject.WebApi.Integration.Test.Fixtures
+using Microsoft.AspNetCore.Mvc.Testing;
+
+public class WebAppFixture : IDisposable
{
- public class WebAppFixture : IDisposable
+ public WebAppFixture()
{
- public WebAppFixture()
- {
- WebApp = new WebApplicationFactory()
- .WithWebHostBuilder(builder =>
- {
- // ... Configure test services
- });
+ WebApp = new WebApplicationFactory()
+ .WithWebHostBuilder(_ =>
+ {
+ // ... Configure test services
+ });
- }
+ }
- public void Dispose() => WebApp.Dispose();
+ public void Dispose() => WebApp.Dispose();
- public WebApplicationFactory WebApp { get; private set; }
- }
-}
+ public WebApplicationFactory WebApp { get; }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/HealthCheckTest.cs b/BervProject.WebApi.Integration.Test/HealthCheckTest.cs
index 5eff2cc76..d96f5e767 100644
--- a/BervProject.WebApi.Integration.Test/HealthCheckTest.cs
+++ b/BervProject.WebApi.Integration.Test/HealthCheckTest.cs
@@ -1,24 +1,23 @@
-using BervProject.WebApi.Integration.Test.Fixtures;
+namespace BervProject.WebApi.Integration.Test;
+
+using Fixtures;
using Microsoft.AspNetCore.Mvc.Testing;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class HealthCheckTest
{
- [Collection("Webapp")]
- public class HealthCheckTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public HealthCheckTest(WebAppFixture webAppFixtures)
+ {
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task SuccessCheck()
{
- private readonly WebApplicationFactory _applicationFactory;
- public HealthCheckTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task SuccessCheck()
- {
- var client = _applicationFactory.CreateClient();
- var response = await client.GetAsync("/health");
- Assert.True(response.IsSuccessStatusCode);
- var stringResponse = await response.Content.ReadAsStringAsync();
- Assert.Equal("Healthy", stringResponse);
- }
+ var client = _applicationFactory.CreateClient();
+ var response = await client.GetAsync("/health");
+ Assert.True(response.IsSuccessStatusCode);
+ var stringResponse = await response.Content.ReadAsStringAsync();
+ Assert.Equal("Healthy", stringResponse);
}
}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/NoteControllerTest.cs b/BervProject.WebApi.Integration.Test/NoteControllerTest.cs
index a4bb3e9e8..626af8c01 100644
--- a/BervProject.WebApi.Integration.Test/NoteControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/NoteControllerTest.cs
@@ -1,47 +1,46 @@
+namespace BervProject.WebApi.Integration.Test;
+
using System.Net.Http.Json;
-using BervProject.WebApi.Integration.Test.Fixtures;
-using BervProject.WebApi.Boilerplate.Entities;
+using Fixtures;
+using Boilerplate.Entities;
using Microsoft.AspNetCore.Mvc.Testing;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class NoteControllerTest
{
- [Collection("Webapp")]
- public class NoteControllerTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public NoteControllerTest(WebAppFixture webAppFixtures)
{
- private readonly WebApplicationFactory _applicationFactory;
- public NoteControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task CreateNoteTest()
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task CreateNoteTest()
+ {
+ var client = _applicationFactory.CreateClient();
+ var response = await client.PostAsync("/api/v1.0/note/createTable", null);
+ Assert.True(response.IsSuccessStatusCode);
+ var stringResponse = await response.Content.ReadAsStringAsync();
+ Assert.Equal("true", stringResponse);
+ var partitionKey = "part-1";
+ var rowKey = "row-1";
+ var title = "Hello World!";
+ var message = "Yes!";
+ var newNote = new Note()
{
- var client = _applicationFactory.CreateClient();
- var response = await client.PostAsync("/api/v1.0/note/createTable", null);
- Assert.True(response.IsSuccessStatusCode);
- var stringResponse = await response.Content.ReadAsStringAsync();
- Assert.Equal("true", stringResponse);
- var partitionKey = "part-1";
- var rowKey = "row-1";
- var title = "Hello World!";
- var message = "Yes!";
- var newNote = new Note()
- {
- PartitionKey = partitionKey,
- RowKey = rowKey,
- Title = title,
- Message = message,
- };
- response = await client.PostAsJsonAsync("/api/v1.0/note/upsert", newNote);
- Assert.True(response.IsSuccessStatusCode);
- stringResponse = await response.Content.ReadAsStringAsync();
- Assert.Equal("true", stringResponse);
- response = await client.GetAsync($"/api/v1.0/note/get?partitionKey={partitionKey}&rowKey={rowKey}");
- Assert.True(response.IsSuccessStatusCode);
- var data = await response.Content.ReadFromJsonAsync();
- Assert.NotNull(data);
- Assert.Equal(title, data.Title);
- Assert.Equal(message, data.Message);
- }
+ PartitionKey = partitionKey,
+ RowKey = rowKey,
+ Title = title,
+ Message = message,
+ };
+ response = await client.PostAsJsonAsync("/api/v1.0/note/upsert", newNote);
+ Assert.True(response.IsSuccessStatusCode);
+ stringResponse = await response.Content.ReadAsStringAsync();
+ Assert.Equal("true", stringResponse);
+ response = await client.GetAsync($"/api/v1.0/note/get?partitionKey={partitionKey}&rowKey={rowKey}");
+ Assert.True(response.IsSuccessStatusCode);
+ var data = await response.Content.ReadFromJsonAsync();
+ Assert.NotNull(data);
+ Assert.Equal(title, data.Title);
+ Assert.Equal(message, data.Message);
}
}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/StorageQueueControllerTest.cs b/BervProject.WebApi.Integration.Test/StorageQueueControllerTest.cs
index ea1c4a4b0..f5f237422 100644
--- a/BervProject.WebApi.Integration.Test/StorageQueueControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/StorageQueueControllerTest.cs
@@ -1,42 +1,40 @@
+namespace BervProject.WebApi.Integration.Test;
+
using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
-using BervProject.WebApi.Boilerplate.Models;
-using BervProject.WebApi.Boilerplate.Models.Response;
-using BervProject.WebApi.Integration.Test.Fixtures;
+using Boilerplate.Models;
+using Boilerplate.Models.Response;
+using Fixtures;
using Microsoft.AspNetCore.Mvc.Testing;
-using Newtonsoft.Json.Linq;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class StorageQueueControllerTest
{
- [Collection("Webapp")]
- public class StorageQueueControllerTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public StorageQueueControllerTest(WebAppFixture webAppFixtures)
+ {
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task StorageQueueSendMessageTest()
{
- private readonly WebApplicationFactory _applicationFactory;
- public StorageQueueControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task StorageQueueSendMessageTest()
- {
- var client = _applicationFactory.CreateClient();
- var messageData = new MessageData{
- Message = "Hello World!"
- };
- using var content = new StringContent(JsonSerializer.Serialize(messageData), Encoding.UTF8, "application/json");
- var response = await client.PostAsync("/api/v1.0/storagequeue/sendMessage", content);
- Assert.True(response.IsSuccessStatusCode);
- var data = await response.Content.ReadFromJsonAsync();
- Assert.NotNull(data);
- Assert.True(data.IsSuccess);
- response = await client.GetAsync("/api/v1.0/storagequeue/receiveMessage");
- Assert.True(response.IsSuccessStatusCode);
- data = await response.Content.ReadFromJsonAsync();
- Assert.NotNull(data);
- Assert.True(data.IsSuccess);
- Assert.Equal("Hello World!", data.YourMessage);
+ var client = _applicationFactory.CreateClient();
+ var messageData = new MessageData{
+ Message = "Hello World!"
+ };
+ using var content = new StringContent(JsonSerializer.Serialize(messageData), Encoding.UTF8, "application/json");
+ var response = await client.PostAsync("/api/v1.0/storagequeue/sendMessage", content);
+ Assert.True(response.IsSuccessStatusCode);
+ var data = await response.Content.ReadFromJsonAsync();
+ Assert.NotNull(data);
+ Assert.True(data.IsSuccess);
+ response = await client.GetAsync("/api/v1.0/storagequeue/receiveMessage");
+ Assert.True(response.IsSuccessStatusCode);
+ data = await response.Content.ReadFromJsonAsync();
+ Assert.NotNull(data);
+ Assert.True(data.IsSuccess);
+ Assert.Equal("Hello World!", data.YourMessage);
- }
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Integration.Test/WeatherForecastControllerTest.cs b/BervProject.WebApi.Integration.Test/WeatherForecastControllerTest.cs
index 134cc035f..a1dc2f32a 100644
--- a/BervProject.WebApi.Integration.Test/WeatherForecastControllerTest.cs
+++ b/BervProject.WebApi.Integration.Test/WeatherForecastControllerTest.cs
@@ -1,28 +1,26 @@
-
-using BervProject.WebApi.Boilerplate.Entities;
-using BervProject.WebApi.Integration.Test.Fixtures;
+namespace BervProject.WebApi.Integration.Test;
+
+using Boilerplate.Entities;
+using Fixtures;
using Microsoft.AspNetCore.Mvc.Testing;
using System.Net.Http.Json;
-namespace BervProject.WebApi.Integration.Test
+[Collection("Webapp")]
+public class WeatherForecastControllerTest
{
- [Collection("Webapp")]
- public class WeatherForecastControllerTest
+ private readonly WebApplicationFactory _applicationFactory;
+ public WeatherForecastControllerTest(WebAppFixture webAppFixtures)
+ {
+ _applicationFactory = webAppFixtures.WebApp;
+ }
+ [Fact]
+ public async Task SuccessCheck()
{
- private readonly WebApplicationFactory _applicationFactory;
- public WeatherForecastControllerTest(WebAppFixture webAppFixtures)
- {
- this._applicationFactory = webAppFixtures.WebApp;
- }
- [Fact]
- public async Task SuccessCheck()
- {
- var client = _applicationFactory.CreateClient();
- var response = await client.GetAsync("/api/v1.0/weatherforecast/db");
- Assert.True(response.IsSuccessStatusCode);
- var books = await response.Content.ReadFromJsonAsync>();
- Assert.NotNull(books);
- Assert.Equal(2, books.Count);
- }
+ var client = _applicationFactory.CreateClient();
+ var response = await client.GetAsync("/api/v1.0/weatherforecast/db");
+ Assert.True(response.IsSuccessStatusCode);
+ var books = await response.Content.ReadFromJsonAsync>();
+ Assert.NotNull(books);
+ Assert.Equal(2, books.Count);
}
}
\ No newline at end of file
diff --git a/BervProject.WebApi.Test/Services/AWS/AWSS3ServiceTest.cs b/BervProject.WebApi.Test/Services/AWS/AWSS3ServiceTest.cs
deleted file mode 100644
index 87d7d1c4a..000000000
--- a/BervProject.WebApi.Test/Services/AWS/AWSS3ServiceTest.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using Amazon.S3;
-using Amazon.S3.Model;
-using Autofac.Extras.Moq;
-using BervProject.WebApi.Boilerplate.Services.AWS;
-using Microsoft.AspNetCore.Http;
-using Moq;
-using System.IO;
-using System.Threading.Tasks;
-using Xunit;
-
-namespace BervProject.WebApi.Test.Services.AWS
-{
- public class AWSS3ServiceTest
- {
-
- [Fact]
- public async Task UploadFileSuccess()
- {
- using var mock = AutoMock.GetLoose();
- var amazonS3Mock = mock.Mock();
- var fileMock = mock.Mock();
- var nullStream = new MemoryStream(0);
- var fileName = "ok.jpg";
- var contentType = "image/jpeg";
- amazonS3Mock.Setup(x => x.PutObjectAsync(It.IsAny(), default));
- fileMock.SetupGet(x => x.FileName).Returns(fileName);
- fileMock.SetupGet(x => x.ContentType).Returns(contentType);
- fileMock.Setup(x => x.OpenReadStream()).Returns(nullStream);
- var awsS3Service = mock.Create();
- var result = await awsS3Service.UploadFile(fileMock.Object);
- Assert.Equal($"uploads/{fileName}", result);
- fileMock.Verify(x => x.OpenReadStream(), Times.Once());
- amazonS3Mock.Verify(x => x.PutObjectAsync(It.IsAny(), default), Times.Once());
- }
- }
-}
diff --git a/BervProject.WebApi.Test/Services/AWS/AwsS3ServiceTest.cs b/BervProject.WebApi.Test/Services/AWS/AwsS3ServiceTest.cs
new file mode 100644
index 000000000..8e20159dd
--- /dev/null
+++ b/BervProject.WebApi.Test/Services/AWS/AwsS3ServiceTest.cs
@@ -0,0 +1,35 @@
+namespace BervProject.WebApi.Test.Services.AWS;
+
+using Amazon.S3;
+using Amazon.S3.Model;
+using Autofac.Extras.Moq;
+using BervProject.WebApi.Boilerplate.Services.AWS;
+using Microsoft.AspNetCore.Http;
+using Moq;
+using System.IO;
+using System.Threading.Tasks;
+using Xunit;
+
+public class AwsS3ServiceTest
+{
+
+ [Fact]
+ public async Task UploadFileSuccess()
+ {
+ using var mock = AutoMock.GetLoose();
+ var amazonS3Mock = mock.Mock();
+ var fileMock = mock.Mock();
+ var nullStream = new MemoryStream(0);
+ var fileName = "ok.jpg";
+ var contentType = "image/jpeg";
+ amazonS3Mock.Setup(x => x.PutObjectAsync(It.IsAny(), default));
+ fileMock.SetupGet(x => x.FileName).Returns(fileName);
+ fileMock.SetupGet(x => x.ContentType).Returns(contentType);
+ fileMock.Setup(x => x.OpenReadStream()).Returns(nullStream);
+ var awsS3Service = mock.Create();
+ var result = await awsS3Service.UploadFile(fileMock.Object);
+ Assert.Equal($"uploads/{fileName}", result);
+ fileMock.Verify(x => x.OpenReadStream(), Times.Once());
+ amazonS3Mock.Verify(x => x.PutObjectAsync(It.IsAny(), default), Times.Once());
+ }
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Test/Services/AWS/DynamoDbServicesTest.cs b/BervProject.WebApi.Test/Services/AWS/DynamoDbServicesTest.cs
index 24f6cb386..8da18de8d 100644
--- a/BervProject.WebApi.Test/Services/AWS/DynamoDbServicesTest.cs
+++ b/BervProject.WebApi.Test/Services/AWS/DynamoDbServicesTest.cs
@@ -1,4 +1,5 @@
-using System;
+namespace BervProject.WebApi.Test.Services.AWS;
+
using System.Threading.Tasks;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
@@ -8,28 +9,25 @@
using Moq;
using Xunit;
-namespace BervProject.WebApi.Test.Services.AWS
+public class DynamoDbServicesTest
{
- public class DynamoDbServicesTest
+ [Fact]
+ public async Task Test_CreateObject()
{
- [Fact]
- public async Task Test_CreateObject()
- {
- using var mock = AutoMock.GetLoose();
- var amazonDynamoDBMock = mock.Mock();
- var logMock = mock.Mock>();
- amazonDynamoDBMock.Setup(x => x.PutItemAsync(It.IsAny(), default))
- .Returns(Task.FromResult(new PutItemResponse
- {
- HttpStatusCode = System.Net.HttpStatusCode.OK,
- Attributes = new System.Collections.Generic.Dictionary
+ using var mock = AutoMock.GetLoose();
+ var amazonDynamoDBMock = mock.Mock();
+ var logMock = mock.Mock>();
+ amazonDynamoDBMock.Setup(x => x.PutItemAsync(It.IsAny(), default))
+ .Returns(Task.FromResult(new PutItemResponse
+ {
+ HttpStatusCode = System.Net.HttpStatusCode.OK,
+ Attributes = new System.Collections.Generic.Dictionary
{
- {"mock", new AttributeValue ("Hello")}
+ {"mock", new AttributeValue ("Hello")}
}
- }));
- var dynamoDbServices = mock.Create();
- await dynamoDbServices.CreateObject();
- amazonDynamoDBMock.Verify(x => x.PutItemAsync(It.IsAny(), default), Times.Once());
- }
+ }));
+ var dynamoDbServices = mock.Create();
+ await dynamoDbServices.CreateObject();
+ amazonDynamoDBMock.Verify(x => x.PutItemAsync(It.IsAny(), default), Times.Once());
}
-}
+}
\ No newline at end of file
diff --git a/BervProject.WebApi.Test/Services/AWS/EmailServiceTest.cs b/BervProject.WebApi.Test/Services/AWS/EmailServiceTest.cs
index 3db5161ee..6fcd07f04 100644
--- a/BervProject.WebApi.Test/Services/AWS/EmailServiceTest.cs
+++ b/BervProject.WebApi.Test/Services/AWS/EmailServiceTest.cs
@@ -1,4 +1,6 @@
-using Amazon.SimpleEmail;
+namespace BervProject.WebApi.Test.Services.AWS;
+
+using Amazon.SimpleEmail;
using Amazon.SimpleEmail.Model;
using Autofac.Extras.Moq;
using BervProject.WebApi.Boilerplate.Services.AWS;
@@ -9,64 +11,61 @@
using System.Threading.Tasks;
using Xunit;
-namespace BervProject.WebApi.Test.Services.AWS
+public class EmailServiceTest
{
- public class EmailServiceTest
+ [Fact]
+ public async Task SendEmailSuccess()
{
- [Fact]
- public async Task SendEmailSuccess()
+ using var mock = AutoMock.GetLoose();
+ var mockEmailService = mock.Mock();
+ var logMock = mock.Mock>();
+ var reciever = new List
+ {
+ "myreceiver@receiver.com"
+ };
+ var sendEmailResponse = new SendEmailResponse()
{
- using var mock = AutoMock.GetLoose();
- var mockEmailService = mock.Mock();
- var logMock = mock.Mock>();
- var reciever = new List
- {
- "myreceiver@receiver.com"
- };
- var sendEmailResponse = new SendEmailResponse()
- {
- HttpStatusCode = System.Net.HttpStatusCode.OK,
- MessageId = "random",
- ResponseMetadata = new Amazon.Runtime.ResponseMetadata()
- };
- mockEmailService.Setup(x => x.SendEmailAsync(It.IsAny(), default))
- .Returns(Task.FromResult(sendEmailResponse));
- var emailService = mock.Create();
- await emailService.SendEmail(reciever);
- mockEmailService.Verify(x => x.SendEmailAsync(It.IsAny(), default), Times.Once());
- }
+ HttpStatusCode = System.Net.HttpStatusCode.OK,
+ MessageId = "random",
+ ResponseMetadata = new Amazon.Runtime.ResponseMetadata()
+ };
+ mockEmailService.Setup(x => x.SendEmailAsync(It.IsAny(), default))
+ .Returns(Task.FromResult(sendEmailResponse));
+ var emailService = mock.Create();
+ await emailService.SendEmail(reciever);
+ mockEmailService.Verify(x => x.SendEmailAsync(It.IsAny(), default), Times.Once());
+ }
- [Fact]
- public async Task SendEmailFailed()
+ [Fact]
+ public async Task SendEmailFailed()
+ {
+ using var mock = AutoMock.GetLoose();
+ var mockEmailService = mock.Mock();
+ var logMock = mock.Mock>();
+ var reciever = new List
+ {
+ "myreceiver@receiver.com"
+ };
+ var sendEmailResponse = new SendEmailResponse()
{
- using var mock = AutoMock.GetLoose();
- var mockEmailService = mock.Mock();
- var logMock = mock.Mock>();
- var reciever = new List
- {
- "myreceiver@receiver.com"
- };
- var sendEmailResponse = new SendEmailResponse()
- {
- HttpStatusCode = System.Net.HttpStatusCode.InternalServerError,
- MessageId = "random",
- ResponseMetadata = new Amazon.Runtime.ResponseMetadata()
- };
- mockEmailService.Setup(x => x.SendEmailAsync(It.IsAny(), default))
- .Returns(Task.FromResult(sendEmailResponse));
- var emailService = mock.Create();
- await emailService.SendEmail(reciever);
- mockEmailService.Verify(x => x.SendEmailAsync(It.IsAny(), default), Times.Once());
- logMock.Verify(l =>
+ HttpStatusCode = System.Net.HttpStatusCode.InternalServerError,
+ MessageId = "random",
+ ResponseMetadata = new Amazon.Runtime.ResponseMetadata()
+ };
+ mockEmailService.Setup(x => x.SendEmailAsync(It.IsAny(), default))
+ .Returns(Task.FromResult(sendEmailResponse));
+ var emailService = mock.Create();
+ await emailService.SendEmail(reciever);
+ mockEmailService.Verify(x => x.SendEmailAsync(It.IsAny(), default), Times.Once());
+ logMock.Verify(l =>
l.Log(
LogLevel.Warning,
It.IsAny(),
It.Is((state, type) => state.ToString().Equals("There is a problem when sending email")),
null,
(Func