@startuml
!include ..\..\..\.c4s\C4_Sequence.puml

title Complete (End-To-End) - C4 Sequence - Container level

Person(BigBankPlc.Actors.Customer, "Customer", "A customer of the bank, with personal bank accounts")

System_Boundary(BigBankPlc.SoftwareSystems.InternetBanking, "Internet Banking")
    Container(BigBankPlc.SoftwareSystems.InternetBanking.Containers.WebApplication, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA")
    Container(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser")
    Container(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "API Application", "Java, Docker Container", "Provides Internet banking functionality via API")
    ContainerDb(BigBankPlc.SoftwareSystems.InternetBanking.Containers.Database, "Database", "SQL Server Database", "Stores user registration information, hashed auth credentials, access logs, etc.")
    Container(BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device")
Boundary_End()
System_Ext(BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Mainframe Banking System", "")
System_Ext(BigBankPlc.SoftwareSystems.EMailSystem, "E-Mail System", "The internal Microsoft Exchange system")

group Customer - Banking via Web App
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.WebApplication, "Navigate")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.WebApplication, BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "Load And Start")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "Sign In")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Sign In")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.InternetBanking.Containers.Database, "Authenticate User")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "View Customer Details")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Customer")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Customer")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Customer Accounts")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Customer Accounts")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "View Account Transactions")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Account Transactions")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Account Transactions")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, "Create Account")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.SinglePageApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Create Account")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Create Account")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.EMailSystem, "Send New Account Created Notification E-Mail")
end
group Customer - Banking via Mobile App
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, "Sign In")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Sign In")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.InternetBanking.Containers.Database, "Authenticate User")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, "View Customer Details")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Customer")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Customer")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Customer Accounts")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Customer Accounts")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, "View Account Transactions")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.MobileApp, BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, "Get Account Transactions")
Rel(BigBankPlc.SoftwareSystems.InternetBanking.Containers.APIApplication, BigBankPlc.SoftwareSystems.MainframeBankingSystem, "Get Account Transactions")
end
group Customer - Receive E-Mail Notifications
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.EMailSystem, "Receive Password Changed Notification E-Mail")
Rel(BigBankPlc.Actors.Customer, BigBankPlc.SoftwareSystems.EMailSystem, "Receive New Account Created Notification E-Mail")
end


@enduml
