@startuml package com.iluwatar.claimcheckpattern.producer.calldetails.functions { class UsageDetailPublisherFunction { - eventHandlerUtility : EventHandlerUtility - messageHandlerUtility : MessageHandlerUtility + UsageDetailPublisherFunction() + UsageDetailPublisherFunction(messageHandlerUtility : MessageHandlerUtility, eventHandlerUtility : EventHandlerUtility) + run(request : HttpRequestMessage>, context : ExecutionContext) : HttpResponseMessage } } package com.iluwatar.claimcheckpattern.domain { class Message { - messageBody : MessageBody - messageHeader : MessageHeader + Message() + getMessageBody() : MessageBody + getMessageHeader() : MessageHeader + setMessageBody(messageBody : MessageBody) + setMessageHeader(messageHeader : MessageHeader) } class MessageBody { - data : List + MessageBody() + getData() : List + setData(data : List) } class MessageHeader { - data : Object - dataVersion : String - eventTime : String - eventType : String - id : String - subject : String - topic : String + MessageHeader() + getData() : Object + getDataVersion() : String + getEventTime() : String + getEventType() : String + getId() : String + getSubject() : String + getTopic() : String + setData(data : Object) + setDataVersion(dataVersion : String) + setEventTime(eventTime : String) + setEventType(eventType : String) + setId(id : String) + setSubject(subject : String) + setTopic(topic : String) } class MessageReference { - dataFileName : String - dataLocation : String + MessageReference() + MessageReference(dataLocation : String, dataFileName : String) + getDataFileName() : String + getDataLocation() : String + setDataFileName(dataFileName : String) + setDataLocation(dataLocation : String) } class UsageCostDetail { - callCost : double - dataCost : double - userId : String + UsageCostDetail() + getCallCost() : double + getDataCost() : double + getUserId() : String + setCallCost(callCost : double) + setDataCost(dataCost : double) + setUserId(userId : String) } class UsageDetail { - data : int - duration : int - userId : String + UsageDetail() + getData() : int + getDuration() : int + getUserId() : String + setData(data : int) + setDuration(duration : int) + setUserId(userId : String) } } package com.iluwatar.claimcheckpattern.utility { class EventHandlerUtility { - customEventClient : EventGridPublisherClient + EventHandlerUtility() + EventHandlerUtility(customEventClient : EventGridPublisherClient) + publishEvent(customEvent : T, logger : Logger) } class MessageHandlerUtility { - blobServiceClient : BlobServiceClient + MessageHandlerUtility() + MessageHandlerUtility(blobServiceClient : BlobServiceClient) + dropToPersistantStorage(message : Message, logger : Logger) + readFromPersistantStorage(messageReference : MessageReference, logger : Logger) : Message } } package com.iluwatar.claimcheckpattern.consumer.callcostprocessor.functions { class UsageCostProcessorFunction { - messageHandlerUtilityForUsageCostDetail : MessageHandlerUtility - messageHandlerUtilityForUsageDetail : MessageHandlerUtility + UsageCostProcessorFunction() + UsageCostProcessorFunction(messageHandlerUtilityForUsageDetail : MessageHandlerUtility, messageHandlerUtilityForUsageCostDetail : MessageHandlerUtility) - calculateUsageCostDetails(usageDetailsList : List) : List + run(request : HttpRequestMessage>, context : ExecutionContext) : HttpResponseMessage } } UsageCostProcessorFunction --> "-messageHandlerUtilityForUsageDetail" MessageHandlerUtility Message --> "-messageBody" MessageBody UsageDetailPublisherFunction --> "-eventHandlerUtility" EventHandlerUtility Builder ..+ HttpResponseMessage UsageDetailPublisherFunction --> "-messageHandlerUtility" MessageHandlerUtility Message --> "-messageHeader" MessageHeader @enduml