package Ġuk . co . c raig b ass . pr atura . main Ċ Ċ import Ġcom . made tech . clean . Application Ċ import Ġcom . made tech . clean . use case .* Ċ import Ġuk . co . c raig b ass . pr atura . boundary . administration . Add Product Ċ import Ġuk . co . c raig b ass . pr atura . boundary . administration . Set Store Currency Ċ import Ġuk . co . c raig b ass . pr atura . boundary . basket .* Ċ import Ġuk . co . c raig b ass . pr atura . boundary . catalog ue . View All Products Ċ import Ġuk . co . c raig b ass . pr atura . boundary . checkout . Add Shipping Address Ċ import Ġuk . co . c raig b ass . pr atura . boundary . checkout . View Draft Order Ċ import Ġuk . co . c raig b ass . pr atura . use case .* Ċ import Ġuk . co . c raig b ass . pr atura . use case . administration .* Ċ import Ġuk . co . c raig b ass . pr atura . use case . basket . Basket Writer Ċ import Ġuk . co . c raig b ass . pr atura . use case . checkout .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ abstract Ġclass ĠPr atura Ġ: ĠApplication () Ġ{ ĊĠ Ġabstract Ġval Ġbasket Writer : ĠB asket Writer ĊĠ Ġabstract Ġval Ġbasket Reader : ĠB asket Reader ĊĠ Ġabstract Ġval Ġproduct Saver : ĠProduct Saver ĊĠ Ġabstract Ġval Ġproduct Retriever : ĠProduct Retriever ĊĠ Ġabstract Ġval Ġcurrency Setter : ĠCurrency Setter ĊĠ Ġabstract Ġval Ġcurrency Retriever : ĠCurrency Retriever ĊĠ Ġabstract Ġval Ġshipping Address Retriever : ĠSh ipping Address Retriever ĊĠ Ġabstract Ġval Ġ Ġshipping Address Saver : ĠSh ipping Address Saver ĊĊĠ Ġoverride Ġfun Ġunsafe Construct As ynchronous ( use Case : ĠK Class < *> ): ĠAs ynchronous UseCase < *, Ġ* >? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġunsafe Construct S ynchronous ( use Case : ĠK Class < *> ): ĠS ynchronous UseCase < *, Ġ* >? Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( use Case ) Ġ{ ĊĠĠĠĠĠ ĠAdd Item To Basket :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . basket . AddItem To Basket ( ĊĠĠĠĠĠĠĠ Ġbasket Writer , ĊĠĠĠĠĠĠĠ Ġbasket Reader , ĊĠĠĠĠĠĠĠ Ġproduct Retriever ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠView Basket :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . basket . View Basket ( ĊĠĠĠĠĠĠĠ Ġbasket Reader , ĊĠĠĠĠĠĠĠ Ġproduct Retriever , ĊĠĠĠĠĠĠĠ Ġcurrency Retriever ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠCreate Basket :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . basket . Create Basket ( basket Writer ) ĊĠĠĠĠĠ ĠAdd Product :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . administration . Add Product ( product Saver ) ĊĠĠĠĠĠ ĠView All Products :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . catalog ue . View All Products ( ĊĠĠĠĠĠĠĠ Ġproduct Retriever , ĊĠĠĠĠĠĠĠ Ġcurrency Retriever ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠAdd Shipping Address :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . checkout . Add Shipping Address ( ĊĠĠĠĠĠĠĠ Ġshipping Address Saver ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠView Draft Order :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . checkout . View Draft Order ( ĊĠĠĠĠĠĠĠ Ġbasket Reader , ĊĠĠĠĠĠĠĠ Ġshipping Address Retriever ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠSet Store Currency :: class Ġ-> Ġuk . co . c raig b ass . pr atura . use case . administration . Set Store Currency ( currency Setter ) ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Use ĠCase ĠNot ĠFound ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ