diff --git a/src/Lib.hs b/src/Lib.hs index fdc253f..5edf504 100644 --- a/src/Lib.hs +++ b/src/Lib.hs @@ -2,12 +2,11 @@ module Lib (someFunc) where -import OrderQuantity +import Types.OrderQuantity as OrderQuantity import OrderTakingDomain -import qualified KilogramQuantity +import qualified Types.KilogramQuantity as KilogramQuantity import Data.Aeson - -import UnvalidatedOrderLine +import Types.UnvalidatedOrderLine as UnvalidatedOrderLine someFunc :: IO () someFunc = @@ -18,5 +17,3 @@ someFunc = in print newstr -- someFunc = print $ KilogramQuantity.create 2.4 - - diff --git a/src/OrderLine.hs b/src/OrderLine.hs deleted file mode 100644 index 3054570..0000000 --- a/src/OrderLine.hs +++ /dev/null @@ -1,14 +0,0 @@ -module OrderLine where - -import SharedTypes -import OrderLineId -import OrderQuantity -import ProductCode -import qualified OrderId - -data OrderLine = OrderLine { - orderLineId :: OrderLineId, - orderId :: OrderId.OrderId, - productCode :: ProductCode.ProductCode, - quantity :: OrderQuantity -} deriving (Eq, Show) diff --git a/src/OrderTakingDomain.hs b/src/OrderTakingDomain.hs index f15fa2b..c37676e 100644 --- a/src/OrderTakingDomain.hs +++ b/src/OrderTakingDomain.hs @@ -1,38 +1,38 @@ -{-# LANGUAGE DuplicateRecordFields #-} -{-# LANGUAGE DisambiguateRecordFields #-} +{-# LANGUAGE DuplicateTypesFields #-} +{-# LANGUAGE DisambiguateTypesFields #-} -- TODO rename in OrderTaking.Domain (file too?) module OrderTakingDomain where -import OrderQuantity +import Types.OrderQuantity as OrderQuantity -- import qualified Data.List as L (find) import qualified Data.List as L import Prelude hiding (lines, map) import Data.List.NonEmpty as NEL -import qualified PricedOrderLine as POL -import qualified PricedOrder as PO -import qualified OrderAcknowledgment -import qualified OrderAcknowledgmentSent +import qualified Types.PricedOrderLine as POL +import qualified Types.PricedOrder as PO +import qualified Types.OrderAcknowledgment as OrderAcknowledgment +import qualified Types.OrderAcknowledgmentSent as OrderAcknowledgmentSent import SharedTypes import PlaceOrderWorkflow -import qualified UnvalidatedOrder -import qualified ValidatedOrder -import qualified OrderId -import String50 -import qualified UnvalidatedCustomerInfo -import qualified CustomerInfo -import qualified PersonalName -import qualified CheckedAddress -import qualified Address -import qualified UnvalidatedOrderLine -import qualified OrderLineId -import qualified OrderLine -import qualified UnitQuantity -import qualified KilogramQuantity -import qualified ProductCode -import qualified PricedOrderLine -import Price -import qualified BillingAmount +import qualified Types.UnvalidatedOrder as UnvalidatedOrder +import qualified Types.ValidatedOrder as ValidatedOrder +import qualified Types.OrderId as OrderId +import Types.String50 +import qualified Types.UnvalidatedCustomerInfo +import qualified Types.CustomerInfo as CustomerInfo +import qualified Types.PersonalName as PersonalName +import qualified Types.CheckedAddress as CheckedAddress +import qualified Types.Address as Address +import qualified Types.UnvalidatedOrderLine +import qualified Types.OrderLineId as OrderLineId +import qualified Types.OrderLine as OrderLine +import qualified Types.UnitQuantity as UnitQuantity +import qualified Types.KilogramQuantity as KilogramQuantity +import qualified Types.ProductCode as ProductCode +import qualified Types.PricedOrderLine +import Types.Price as Price +import qualified Types.BillingAmount as BillingAmount -- data Foo = Foo { -- myField :: Int diff --git a/src/Payments.hs b/src/Payments.hs deleted file mode 100644 index 35281ab..0000000 --- a/src/Payments.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Payments where - - newtype CheckNumber = CheckNumber Int deriving (Show) - newtype CardNumber = CardNumber String deriving (Show) - newtype PaymentAmount = PaymentAmount Double - - data PaymentMethod = Cash | Check CheckNumber | Card CardNumber - data Currency = EUR | USD - - data Payment = Payment { - amount :: PaymentAmount, - currency :: Currency, - method :: PaymentMethod - } diff --git a/src/PlaceOrderWorkflow.hs b/src/PlaceOrderWorkflow.hs index 2d57b14..881e7a4 100644 --- a/src/PlaceOrderWorkflow.hs +++ b/src/PlaceOrderWorkflow.hs @@ -5,32 +5,31 @@ import Prelude hiding (lines, map, sequence) import Data.List.NonEmpty as NE import qualified NonEmptyExt as NEE import SharedTypes -import qualified ValidatedOrder -import qualified UnvalidatedOrder -import qualified PricedOrder -import qualified OrderLine -import qualified OrderId -import qualified BillingAmount -import qualified PricedOrder as PO -import qualified OrderAcknowledgment -import qualified OrderAcknowledgmentSent -import qualified CustomerInfo -import qualified Address -import qualified OrderLineId -import qualified UnvalidatedOrderLine -import qualified CheckedAddress -import qualified UnvalidatedCustomerInfo -import qualified PersonalName -import String50 -import qualified ProductCode -import OrderQuantity -import qualified UnitQuantity -import qualified KilogramQuantity -import qualified PricedOrderLine as POL -import Price +import qualified Types.ValidatedOrder as ValidatedOrder +import qualified Types.UnvalidatedOrder as UnvalidatedOrder +import qualified Types.OrderLine as OrderLine +import qualified Types.OrderId as OrderId +import qualified Types.BillingAmount as BillingAmount +import qualified Types.PricedOrder as PO +import qualified Types.OrderAcknowledgment as OrderAcknowledgment +import qualified Types.OrderAcknowledgmentSent as OrderAcknowledgmentSent +import qualified Types.CustomerInfo as CustomerInfo +import qualified Types.Address as Address +import qualified Types.OrderLineId as OrderLineId +import qualified Types.UnvalidatedOrderLine as UnvalidatedOrderLine +import qualified Types.CheckedAddress as CheckedAddress +import qualified Types.UnvalidatedCustomerInfo as UnvalidatedCustomerInfo +import qualified Types.PersonalName as PersonalName +import Types.String50 +import qualified Types.ProductCode as ProductCode +import Types.OrderQuantity as OrderQuantity +import qualified Types.UnitQuantity as UnitQuantity +import qualified Types.KilogramQuantity as KilogramQuantity +import qualified Types.PricedOrderLine as POL +import Types.Price as Price import Control.Arrow(left) -type OrderPlaced = PricedOrder.PricedOrder +type OrderPlaced = PO.PricedOrder type PlaceOrder = Command UnvalidatedOrder.UnvalidatedOrder data BillableOrderPlaced = BillableOrderPlaced { @@ -39,7 +38,7 @@ data BillableOrderPlaced = BillableOrderPlaced { amountToBill :: BillingAmount.BillingAmount } -data Order = Unvalidated UnvalidatedOrder.UnvalidatedOrder | Validated ValidatedOrder.ValidatedOrder | Priced PricedOrder.PricedOrder +data Order = Unvalidated UnvalidatedOrder.UnvalidatedOrder | Validated ValidatedOrder.ValidatedOrder | Priced PO.PricedOrder data PlaceOrderEvents = PlaceOrderEvents { acknowledgmentSent :: OrderAcknowledgment.OrderAcknowledgment, diff --git a/src/SharedTypes.hs b/src/SharedTypes.hs index b9638ca..abe56d5 100644 --- a/src/SharedTypes.hs +++ b/src/SharedTypes.hs @@ -1,7 +1,7 @@ module SharedTypes where import Data.Time -import String50 +import Types.String50 newtype ProductId = ProductId String deriving (Eq, Show) newtype CustomerId = CustomerId Int deriving (Show) diff --git a/src/Address.hs b/src/Types/Address.hs similarity index 84% rename from src/Address.hs rename to src/Types/Address.hs index 69a142e..ffb8cd5 100644 --- a/src/Address.hs +++ b/src/Types/Address.hs @@ -1,9 +1,9 @@ -module Address( +module Types.Address( Address(Address) ) where import SharedTypes -import String50 +import Types.String50 data Address = Address { addressLine1 :: String50, diff --git a/src/BillingAmount.hs b/src/Types/BillingAmount.hs similarity index 89% rename from src/BillingAmount.hs rename to src/Types/BillingAmount.hs index ad1f51e..6738068 100644 --- a/src/BillingAmount.hs +++ b/src/Types/BillingAmount.hs @@ -1,4 +1,4 @@ -module BillingAmount( +module Types.BillingAmount( BillingAmount(BillingAmount), create, value ) where @@ -9,4 +9,3 @@ create = BillingAmount value :: BillingAmount -> Double value (BillingAmount value) = value - diff --git a/src/CheckedAddress.hs b/src/Types/CheckedAddress.hs similarity index 85% rename from src/CheckedAddress.hs rename to src/Types/CheckedAddress.hs index ff9c7cd..2f27c86 100644 --- a/src/CheckedAddress.hs +++ b/src/Types/CheckedAddress.hs @@ -1,4 +1,4 @@ -module CheckedAddress where +module Types.CheckedAddress where import SharedTypes diff --git a/src/CustomerInfo.hs b/src/Types/CustomerInfo.hs similarity index 51% rename from src/CustomerInfo.hs rename to src/Types/CustomerInfo.hs index 1f75faa..9f8f6a5 100644 --- a/src/CustomerInfo.hs +++ b/src/Types/CustomerInfo.hs @@ -1,10 +1,10 @@ -module CustomerInfo where +module Types.CustomerInfo where -import String50 +import Types.String50 import SharedTypes -import PersonalName +import Types.PersonalName data CustomerInfo = CustomerInfo { - name :: PersonalName.PersonalName, + name :: PersonalName, emailAddress :: EmailAddress } deriving (Eq, Show) diff --git a/src/OrderDto.hs b/src/Types/DTO/OrderDto.hs similarity index 62% rename from src/OrderDto.hs rename to src/Types/DTO/OrderDto.hs index 2b4de4b..67a6a97 100644 --- a/src/OrderDto.hs +++ b/src/Types/DTO/OrderDto.hs @@ -1,6 +1,6 @@ -module OrderDto where +module Types.DTO.OrderDto where -import OrderLineDto +import Types.DTO.OrderLineDto data OrderDto = OrderDto { orderId :: String, diff --git a/src/OrderLineDto.hs b/src/Types/DTO/OrderLineDto.hs similarity index 81% rename from src/OrderLineDto.hs rename to src/Types/DTO/OrderLineDto.hs index a21121b..5f17927 100644 --- a/src/OrderLineDto.hs +++ b/src/Types/DTO/OrderLineDto.hs @@ -1,4 +1,4 @@ -module OrderLineDto where +module Types.DTO.OrderLineDto where data OrderLineDto = OrderLineDto { orderLineId :: Int, diff --git a/src/KilogramQuantity.hs b/src/Types/KilogramQuantity.hs similarity index 91% rename from src/KilogramQuantity.hs rename to src/Types/KilogramQuantity.hs index 44874d3..8503ccd 100644 --- a/src/KilogramQuantity.hs +++ b/src/Types/KilogramQuantity.hs @@ -1,4 +1,4 @@ -module KilogramQuantity( +module Types.KilogramQuantity( KilogramQuantity, create, value ) where diff --git a/src/OrderAcknowledgment.hs b/src/Types/OrderAcknowledgment.hs similarity index 76% rename from src/OrderAcknowledgment.hs rename to src/Types/OrderAcknowledgment.hs index 3236520..0ef8406 100644 --- a/src/OrderAcknowledgment.hs +++ b/src/Types/OrderAcknowledgment.hs @@ -1,4 +1,4 @@ -module OrderAcknowledgment where +module Types.OrderAcknowledgment where import SharedTypes diff --git a/src/OrderAcknowledgmentSent.hs b/src/Types/OrderAcknowledgmentSent.hs similarity index 54% rename from src/OrderAcknowledgmentSent.hs rename to src/Types/OrderAcknowledgmentSent.hs index af3cb40..9e877c5 100644 --- a/src/OrderAcknowledgmentSent.hs +++ b/src/Types/OrderAcknowledgmentSent.hs @@ -1,10 +1,10 @@ -module OrderAcknowledgmentSent where +module Types.OrderAcknowledgmentSent where import SharedTypes -import qualified OrderId +import Types.OrderId data OrderAcknowledgmentSent = OrderAcknowledgmentSent { - orderId :: OrderId.OrderId, + orderId :: OrderId, emailAddress :: EmailAddress } - \ No newline at end of file + diff --git a/src/OrderId.hs b/src/Types/OrderId.hs similarity index 94% rename from src/OrderId.hs rename to src/Types/OrderId.hs index 0da0985..a92b2bb 100644 --- a/src/OrderId.hs +++ b/src/Types/OrderId.hs @@ -1,4 +1,4 @@ -module OrderId( +module Types.OrderId( OrderId, create, value ) where diff --git a/src/Types/OrderLine.hs b/src/Types/OrderLine.hs new file mode 100644 index 0000000..a92af41 --- /dev/null +++ b/src/Types/OrderLine.hs @@ -0,0 +1,14 @@ +module Types.OrderLine where + +import SharedTypes +import Types.OrderLineId +import Types.OrderQuantity +import Types.ProductCode +import Types.OrderId + +data OrderLine = OrderLine { + orderLineId :: OrderLineId, + orderId :: OrderId, + productCode :: ProductCode, + quantity :: OrderQuantity +} deriving (Eq, Show) diff --git a/src/OrderLineId.hs b/src/Types/OrderLineId.hs similarity index 94% rename from src/OrderLineId.hs rename to src/Types/OrderLineId.hs index 90ad127..7f8aaa4 100644 --- a/src/OrderLineId.hs +++ b/src/Types/OrderLineId.hs @@ -1,4 +1,4 @@ -module OrderLineId( +module Types.OrderLineId( OrderLineId, create, value ) where diff --git a/src/OrderQuantity.hs b/src/Types/OrderQuantity.hs similarity index 73% rename from src/OrderQuantity.hs rename to src/Types/OrderQuantity.hs index 58aa18c..164cc25 100644 --- a/src/OrderQuantity.hs +++ b/src/Types/OrderQuantity.hs @@ -1,10 +1,10 @@ -module OrderQuantity( +module Types.OrderQuantity( OrderQuantity(UnitQuantity, KilogramQuantity), value ) where -import qualified UnitQuantity -import qualified KilogramQuantity +import qualified Types.UnitQuantity as UnitQuantity +import qualified Types.KilogramQuantity as KilogramQuantity data OrderQuantity = UnitQuantity UnitQuantity.UnitQuantity | KilogramQuantity KilogramQuantity.KilogramQuantity deriving (Eq, Show) diff --git a/src/Types/Payment.hs b/src/Types/Payment.hs new file mode 100644 index 0000000..41ddc97 --- /dev/null +++ b/src/Types/Payment.hs @@ -0,0 +1,14 @@ +module Types.Payment where + +newtype CheckNumber = CheckNumber Int deriving (Show) +newtype CardNumber = CardNumber String deriving (Show) +newtype PaymentAmount = PaymentAmount Double + +data PaymentMethod = Cash | Check CheckNumber | Card CardNumber +data Currency = EUR | USD + +data Payment = Payment { + amount :: PaymentAmount, + currency :: Currency, + method :: PaymentMethod +} diff --git a/src/PersonalName.hs b/src/Types/PersonalName.hs similarity index 66% rename from src/PersonalName.hs rename to src/Types/PersonalName.hs index ae51414..de7aef5 100644 --- a/src/PersonalName.hs +++ b/src/Types/PersonalName.hs @@ -1,6 +1,6 @@ -module PersonalName where +module Types.PersonalName where -import String50 +import Types.String50 data PersonalName = PersonalName { firstName :: String50, diff --git a/src/Price.hs b/src/Types/Price.hs similarity index 91% rename from src/Price.hs rename to src/Types/Price.hs index e3b5817..913feda 100644 --- a/src/Price.hs +++ b/src/Types/Price.hs @@ -1,4 +1,4 @@ -module Price( +module Types.Price( Price(Price), create, multiply ) where diff --git a/src/PricedOrder.hs b/src/Types/PricedOrder.hs similarity index 63% rename from src/PricedOrder.hs rename to src/Types/PricedOrder.hs index 59400a4..c20ddd6 100644 --- a/src/PricedOrder.hs +++ b/src/Types/PricedOrder.hs @@ -1,12 +1,12 @@ -module PricedOrder where +module Types.PricedOrder where import SharedTypes -import PricedOrderLine +import Types.PricedOrderLine import Data.List.NonEmpty -import OrderId -import CustomerInfo -import Address -import BillingAmount +import Types.OrderId +import Types.CustomerInfo +import Types.Address +import Types.BillingAmount data PricedOrder = PricedOrder { orderId :: OrderId, diff --git a/src/PricedOrderLine.hs b/src/Types/PricedOrderLine.hs similarity index 58% rename from src/PricedOrderLine.hs rename to src/Types/PricedOrderLine.hs index 9b503cd..4d25940 100644 --- a/src/PricedOrderLine.hs +++ b/src/Types/PricedOrderLine.hs @@ -1,11 +1,11 @@ -module PricedOrderLine where +module Types.PricedOrderLine where import SharedTypes -import OrderId -import OrderLineId -import ProductCode -import Price -import OrderQuantity +import Types.OrderId +import Types.OrderLineId +import Types.ProductCode +import Types.Price +import Types.OrderQuantity data PricedOrderLine = PricedOrderLine { orderLineId :: OrderLineId, diff --git a/src/ProductCode.hs b/src/Types/ProductCode.hs similarity index 93% rename from src/ProductCode.hs rename to src/Types/ProductCode.hs index a803054..38cc4d5 100644 --- a/src/ProductCode.hs +++ b/src/Types/ProductCode.hs @@ -1,4 +1,4 @@ -module ProductCode( +module Types.ProductCode( ProductCode(Widget, Gizmo), create, value -- exporting data constructors to be able to pattern match ) where diff --git a/src/String50.hs b/src/Types/String50.hs similarity index 94% rename from src/String50.hs rename to src/Types/String50.hs index 83ed891..549146f 100644 --- a/src/String50.hs +++ b/src/Types/String50.hs @@ -1,4 +1,4 @@ -module String50( +module Types.String50( String50, string50, value ) where diff --git a/src/UnitQuantity.hs b/src/Types/UnitQuantity.hs similarity index 91% rename from src/UnitQuantity.hs rename to src/Types/UnitQuantity.hs index 37f9219..ff635e6 100644 --- a/src/UnitQuantity.hs +++ b/src/Types/UnitQuantity.hs @@ -1,4 +1,4 @@ -module UnitQuantity( +module Types.UnitQuantity( UnitQuantity, create, value ) where diff --git a/src/UnvalidatedCustomerInfo.hs b/src/Types/UnvalidatedCustomerInfo.hs similarity index 75% rename from src/UnvalidatedCustomerInfo.hs rename to src/Types/UnvalidatedCustomerInfo.hs index 4be1090..817c176 100644 --- a/src/UnvalidatedCustomerInfo.hs +++ b/src/Types/UnvalidatedCustomerInfo.hs @@ -1,5 +1,4 @@ - -module UnvalidatedCustomerInfo where +module Types.UnvalidatedCustomerInfo where data UnvalidatedCustomerInfo = UnvalidatedCustomerInfo { firstName :: String, diff --git a/src/UnvalidatedOrder.hs b/src/Types/UnvalidatedOrder.hs similarity index 69% rename from src/UnvalidatedOrder.hs rename to src/Types/UnvalidatedOrder.hs index aad41b8..c9718a8 100644 --- a/src/UnvalidatedOrder.hs +++ b/src/Types/UnvalidatedOrder.hs @@ -1,9 +1,8 @@ - -module UnvalidatedOrder where +module Types.UnvalidatedOrder where import SharedTypes -import UnvalidatedCustomerInfo -import UnvalidatedOrderLine +import Types.UnvalidatedCustomerInfo +import Types.UnvalidatedOrderLine import Data.List.NonEmpty data UnvalidatedOrder = UnvalidatedOrder { diff --git a/src/UnvalidatedOrderLine.hs b/src/Types/UnvalidatedOrderLine.hs similarity index 71% rename from src/UnvalidatedOrderLine.hs rename to src/Types/UnvalidatedOrderLine.hs index 3b66a53..751fc78 100644 --- a/src/UnvalidatedOrderLine.hs +++ b/src/Types/UnvalidatedOrderLine.hs @@ -1,10 +1,10 @@ {-# LANGUAGE DeriveGeneric #-} -module UnvalidatedOrderLine where +module Types.UnvalidatedOrderLine where import SharedTypes -import qualified OrderId -import qualified CustomerInfo +import qualified Types.OrderId as OrderId +import qualified Types.CustomerInfo as CustomerInfo import Data.Aeson import GHC.Generics diff --git a/src/ValidatedOrder.hs b/src/Types/ValidatedOrder.hs similarity index 60% rename from src/ValidatedOrder.hs rename to src/Types/ValidatedOrder.hs index 7d530c3..77d82d7 100644 --- a/src/ValidatedOrder.hs +++ b/src/Types/ValidatedOrder.hs @@ -1,11 +1,11 @@ -module ValidatedOrder where +module Types.ValidatedOrder where import SharedTypes import Data.List.NonEmpty as NEL -import OrderLine -import qualified OrderId -import qualified CustomerInfo -import qualified Address +import Types.OrderLine +import qualified Types.OrderId as OrderId +import qualified Types.CustomerInfo as CustomerInfo +import qualified Types.Address as Address data ValidatedOrder = ValidatedOrder { orderId :: OrderId.OrderId, diff --git a/test/Spec.hs b/test/Spec.hs index 4ea737f..1947b42 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -2,23 +2,23 @@ import Test.Hspec import Test.QuickCheck import Control.Exception (evaluate) import PlaceOrderWorkflow -import CheckedAddress +import Types.CheckedAddress import qualified Data.List.NonEmpty as NE -import qualified OrderLineId -import qualified OrderId -import qualified ProductCode -import qualified UnitQuantity -import qualified OrderQuantity -import qualified CustomerInfo -import qualified PersonalName +import qualified Types.OrderLineId +import qualified Types.OrderId as OrderId +import qualified Types.ProductCode as ProductCode +import qualified Types.UnitQuantity as UnitQuantity +import qualified Types.OrderQuantity as OrderQuantity +import qualified Types.CustomerInfo as CustomerInfo +import qualified Types.PersonalName as PersonalName import SharedTypes -import qualified Address -import qualified ValidatedOrder -import UnvalidatedCustomerInfo -import OrderLine +import qualified Types.Address as Address +import qualified Types.ValidatedOrder as ValidatedOrder +import Types.UnvalidatedCustomerInfo +import Types.OrderLine import UnvalidatedOrder import UnvalidatedOrderLine -import String50 +import Types.String50 main :: IO () main = hspec $