Skip to content

Commit 3a313f8

Browse files
committed
Phase 2
1 parent 46c5b10 commit 3a313f8

27 files changed

+672
-501
lines changed

BervProject.WebApi.Boilerplate/Controllers/AWSS3Controller.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ namespace BervProject.WebApi.Boilerplate.Controllers
1111
[ApiVersion("1.0")]
1212
public class SThreeController : ControllerBase
1313
{
14-
private readonly IAWSS3Service _awsS3Service;
15-
public SThreeController(IAWSS3Service awsS3Service)
14+
private readonly IAwsS3Service _awsS3Service;
15+
public SThreeController(IAwsS3Service awsS3Service)
1616
{
1717
_awsS3Service = awsS3Service;
1818
}

BervProject.WebApi.Boilerplate/Controllers/NoteController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using BervProject.WebApi.Boilerplate.Services;
33
using Microsoft.AspNetCore.Mvc;
44
using System.Threading.Tasks;
5+
using BervProject.WebApi.Boilerplate.Services.Azure;
56
using Microsoft.AspNetCore.Http;
67

78
namespace BervProject.WebApi.Boilerplate.Controllers

BervProject.WebApi.Boilerplate/Extensions/SetupAWSExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static void SetupAws(this IServiceCollection services)
2323
services.AddAWSService<IAmazonSimpleEmailService>();
2424
services.AddScoped<IEmailService, EmailService>();
2525
services.AddScoped<IDynamoDbServices, DynamoDbServices>();
26-
services.AddScoped<IAWSS3Service, AWSS3Service>();
26+
services.AddScoped<IAwsS3Service, AwsS3Service>();
2727
}
2828
}
2929

BervProject.WebApi.Boilerplate/Program.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
2424
builder.Logging.ClearProviders();
2525
builder.Logging.SetMinimumLevel(LogLevel.Trace);
26-
builder.Logging.AddNLog("Nlog.config");
27-
builder.Logging.AddNLogWeb();
26+
builder.Logging.AddNLogWeb("Nlog.config");
2827
builder.Host.UseNLog();
2928

3029
// settings injection

BervProject.WebApi.Boilerplate/Services/AWS/AWSS3Service.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
namespace BervProject.WebApi.Boilerplate.Services.AWS;
2+
3+
using System.Threading.Tasks;
4+
using Microsoft.AspNetCore.Http;
5+
using Amazon.S3;
6+
using Amazon.S3.Model;
7+
8+
/// <inheritdoc />
9+
public class AwsS3Service : IAwsS3Service
10+
{
11+
private readonly IAmazonS3 _s3Client;
12+
/// <summary>
13+
/// Default constructor with dependency injections
14+
/// </summary>
15+
/// <param name="amazonS3"></param>
16+
public AwsS3Service(IAmazonS3 amazonS3)
17+
{
18+
_s3Client = amazonS3;
19+
}
20+
/// <summary>
21+
/// Implementation of Upload File
22+
/// </summary>
23+
/// <param name="formFile"></param>
24+
/// <returns></returns>
25+
public async Task<string> UploadFile(IFormFile formFile)
26+
{
27+
var location = $"uploads/{formFile.FileName}";
28+
await using var stream = formFile.OpenReadStream();
29+
var putRequest = new PutObjectRequest
30+
{
31+
Key = location,
32+
BucketName = "upload-test-berv",
33+
InputStream = stream,
34+
AutoCloseStream = true,
35+
ContentType = formFile.ContentType
36+
};
37+
await _s3Client.PutObjectAsync(putRequest);
38+
return location;
39+
}
40+
}
Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,51 @@
1-
using Amazon.DynamoDBv2;
1+
namespace BervProject.WebApi.Boilerplate.Services.AWS;
2+
3+
using Amazon.DynamoDBv2;
24
using Amazon.DynamoDBv2.Model;
35
using Microsoft.Extensions.Logging;
46
using System;
57
using System.Collections.Generic;
68
using System.Text.Json;
79
using System.Threading.Tasks;
810

9-
namespace BervProject.WebApi.Boilerplate.Services.AWS
11+
/// <inheritdoc />
12+
public class DynamoDbServices : IDynamoDbServices
1013
{
11-
public class DynamoDbServices : IDynamoDbServices
14+
private readonly IAmazonDynamoDB _dynamoClient;
15+
private readonly ILogger<DynamoDbServices> _logger;
16+
/// <summary>
17+
/// Default constructor with dependency injections
18+
/// </summary>
19+
/// <param name="amazonDynamoDb"></param>
20+
/// <param name="logger"></param>
21+
public DynamoDbServices(IAmazonDynamoDB amazonDynamoDb, ILogger<DynamoDbServices> logger)
1222
{
13-
private readonly IAmazonDynamoDB _dynamoClient;
14-
private readonly ILogger<DynamoDbServices> _logger;
15-
public DynamoDbServices(IAmazonDynamoDB amazonDynamoDb, ILogger<DynamoDbServices> logger)
16-
{
17-
_logger = logger;
18-
_dynamoClient = amazonDynamoDb;
19-
}
23+
_logger = logger;
24+
_dynamoClient = amazonDynamoDb;
25+
}
2026

21-
public async Task CreateObject()
27+
/// <summary>
28+
/// Create Object
29+
/// </summary>
30+
public async Task CreateObject()
31+
{
32+
var request = new PutItemRequest()
2233
{
23-
var request = new PutItemRequest()
34+
TableName = "dev-test",
35+
Item = new Dictionary<string, AttributeValue>
2436
{
25-
TableName = "dev-test",
26-
Item = new Dictionary<string, AttributeValue>
37+
{ "Id", new AttributeValue
38+
{
39+
S = Guid.NewGuid().ToString()
40+
}},
41+
{ "Name", new AttributeValue
2742
{
28-
{ "Id", new AttributeValue
29-
{
30-
S = Guid.NewGuid().ToString()
31-
}},
32-
{ "Name", new AttributeValue
33-
{
34-
S = "Hello World!"
35-
}}
36-
}
37-
};
38-
var response = await _dynamoClient.PutItemAsync(request);
39-
string message = $"Response: {response.HttpStatusCode}, {JsonSerializer.Serialize(response.Attributes)}";
40-
_logger.LogInformation(message);
41-
}
43+
S = "Hello World!"
44+
}}
45+
}
46+
};
47+
var response = await _dynamoClient.PutItemAsync(request);
48+
string message = $"Response: {response.HttpStatusCode}, {JsonSerializer.Serialize(response.Attributes)}";
49+
_logger.LogInformation(message);
4250
}
43-
}
51+
}
Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,57 @@
1-
using Amazon.SimpleEmail;
1+
namespace BervProject.WebApi.Boilerplate.Services.AWS;
2+
3+
using Amazon.SimpleEmail;
24
using Amazon.SimpleEmail.Model;
35
using Microsoft.Extensions.Logging;
46
using System.Collections.Generic;
57
using System.Text.Json;
6-
using System.Text.Json.Serialization;
78
using System.Threading.Tasks;
89

9-
namespace BervProject.WebApi.Boilerplate.Services.AWS
10+
/// <inheritdoc />
11+
public class EmailService : IEmailService
1012
{
11-
public class EmailService : IEmailService
13+
private readonly IAmazonSimpleEmailService _emailClient;
14+
private readonly ILogger<EmailService> _logger;
15+
/// <summary>
16+
/// Default Constructor with Dependency Injections
17+
/// </summary>
18+
/// <param name="logger"></param>
19+
/// <param name="emailClient"></param>
20+
public EmailService(ILogger<EmailService> logger, IAmazonSimpleEmailService emailClient)
1221
{
13-
private readonly IAmazonSimpleEmailService _emailClient;
14-
private readonly ILogger<EmailService> _logger;
15-
public EmailService(ILogger<EmailService> logger, IAmazonSimpleEmailService emailClient)
16-
{
17-
_logger = logger;
18-
_emailClient = emailClient;
19-
}
22+
_logger = logger;
23+
_emailClient = emailClient;
24+
}
2025

21-
public async Task SendEmail(List<string> receiver)
26+
/// <summary>
27+
/// Send Email
28+
/// </summary>
29+
/// <param name="receiver"></param>
30+
public async Task SendEmail(List<string> receiver)
31+
{
32+
var request = new SendEmailRequest()
2233
{
23-
var request = new SendEmailRequest()
34+
ReplyToAddresses = new List<string> { "bervianto.leo@gmail.com" },
35+
Message = new Message()
2436
{
25-
ReplyToAddresses = new List<string> { "bervianto.leo@gmail.com" },
26-
Message = new Message()
27-
{
28-
Body = new Body(new Content("Hello World!")),
29-
Subject = new Content("Stand by me")
30-
},
31-
Destination = new Destination(receiver),
32-
Source = "support@berviantoleo.my.id"
33-
};
34-
var response = await _emailClient.SendEmailAsync(request);
35-
string messageId = $"Message id: {response.MessageId}";
36-
_logger.LogDebug(messageId);
37-
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
38-
{
39-
_logger.LogInformation("Finished Sent Email");
40-
}
41-
else
42-
{
43-
_logger.LogWarning("There is a problem when sending email");
44-
string message = $"Error: {response.MessageId}:{response.HttpStatusCode}:{JsonSerializer.Serialize(response.ResponseMetadata.Metadata)}";
45-
_logger.LogWarning(message);
46-
}
37+
Body = new Body(new Content("Hello World!")),
38+
Subject = new Content("Stand by me")
39+
},
40+
Destination = new Destination(receiver),
41+
Source = "support@berviantoleo.my.id"
42+
};
43+
var response = await _emailClient.SendEmailAsync(request);
44+
string messageId = $"Message id: {response.MessageId}";
45+
_logger.LogDebug(messageId);
46+
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
47+
{
48+
_logger.LogInformation("Finished Sent Email");
49+
}
50+
else
51+
{
52+
_logger.LogWarning("There is a problem when sending email");
53+
string message = $"Error: {response.MessageId}:{response.HttpStatusCode}:{JsonSerializer.Serialize(response.ResponseMetadata.Metadata)}";
54+
_logger.LogWarning(message);
4755
}
4856
}
49-
}
57+
}

BervProject.WebApi.Boilerplate/Services/AWS/IAWSS3Service.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace BervProject.WebApi.Boilerplate.Services.AWS;
2+
3+
using System.Threading.Tasks;
4+
using Microsoft.AspNetCore.Http;
5+
6+
/// <summary>
7+
/// AWS S3 Service Interface
8+
/// </summary>
9+
public interface IAwsS3Service
10+
{
11+
/// <summary>
12+
/// Upload File
13+
/// </summary>
14+
/// <param name="formFile"></param>
15+
/// <returns></returns>
16+
Task<string> UploadFile(IFormFile formFile);
17+
}

0 commit comments

Comments
 (0)