@startuml "AWS Sequence Diagram"

title "Shortly - Deletar URL encurtada"

skinparam participantPadding 35
skinparam style strictuml

!define AWSPUML https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v15.0/dist

!include AWSPUML/AWSCommon.puml
!include AWSPUML/General/User.puml
!include AWSPUML/Compute/Lambda.puml
!include AWSPUML/Database/DynamoDB.puml
!include AWSPUML/ManagementGovernance/CloudWatch.puml
!include AWSPUML/ApplicationIntegration/APIGateway.puml
!include AWSPUML/ApplicationIntegration/APIGatewayEndpoint.puml

'!include AWSPUML/AWSSimplified.puml

UserParticipant(MyUser, "User", "Cliente")
APIGatewayParticipant(MyApiGateway, "Api Gateway", "Proxy Gateway")
APIGatewayEndpointParticipant(MyApiGatewayEndpoint, "Endpoint Lambda", "DELETE /v1/code/{code}")
LambdaParticipant(MyLambda, "Função Lambda", "src/functions/code/{code}/delete.main")
DynamoDBParticipant(MyDynamoDB, "Banco de Dados", "Banco de dados não-relacional")
CloudWatchParticipant(MyCloudWatch, "Logs do Sistema", "Grupos de Logs")

autonumber 1.1
MyUser -> MyApiGateway : DELETE /v1/code/{code}
autonumber 2.1
MyApiGateway -> MyApiGatewayEndpoint : Encaminha a solicitação para o endpoint Lambda apropriado
MyApiGateway -->> MyCloudWatch : Adiciona uma entrada nos logs contendo o RequestID, o método e a rota da solicitação
autonumber 3.1
MyApiGatewayEndpoint -> MyLambda : Invoca a função com o contexto de chamada e o evento APIGatewayProxyEventV2
autonumber 4.1
MyLambda -> MyDynamoDB : Busca o registro ShortUrl da URL encurtada pelo seu código
autonumber 4.1
MyDynamoDB -->> MyLambda : Registro ShortUrl da URL encurtada
autonumber 4.2
MyLambda -> MyDynamoDB : Deleta o registro da URL encurtada pelo valor PK e SK
autonumber 4.2
MyDynamoDB -->> MyLambda : Antigo registro ShortUrl da URL encurtada
MyLambda -->> MyCloudWatch : Adiciona entradas nos logs para escritas e erros de execução
autonumber 3.1
MyLambda --> MyApiGatewayEndpoint : Código da URL encurtada excluída
autonumber 2.1
MyApiGatewayEndpoint --> MyApiGateway : Evento APIGatewayProxyResultV2 contendo o código da URL encurtada excluída
autonumber 1.1
MyApiGateway --> MyUser : JSON contendo o código da URL encurtada excluída

@enduml
