using System;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
using AWS.Lambda.Powertools.Logging;
using AWS.Lambda.Powertools.Tracing;
using Microsoft.Extensions.DependencyInjection;
using SqsEventHandler.Handlers;
using SqsEventHandler.Infrastructure;
using SqsEventHandler.Models;
using SqsEventHandler.Repositories;
using SqsEventHandler.Repositories.Models;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace SqsEventHandler.Functions;
///
/// This class implements the business logic of the function. The function handler can be found in
/// the base abstract class SqsEventHandler::Handler
///
public class ProcessEmployeeFunction : SqsEventHandler
{
private readonly IDynamoDbRepository _employeeRepository;
public ProcessEmployeeFunction()
{
_employeeRepository = ServiceProvider.GetRequiredService>();
}
public ProcessEmployeeFunction(IDynamoDbRepository employeeRepository)
{
_employeeRepository = employeeRepository;
}
[Tracing(SegmentName = "ProcessEmployeeFunction")]
public override async Task ProcessSqsMessage(Employee message, ILambdaContext lambdaContext)
{
if (message == null)
throw new ArgumentNullException(nameof(message));
if (message.EmployeeId == null)
throw new ArgumentNullException(nameof(message.EmployeeId));
using var cts = lambdaContext.GetCancellationTokenSource();
var response = await _employeeRepository.PutItemAsync(message.AsDto(), cts.Token);
Logger.LogInformation($"{response}, {message}");
}
}