Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Overview

RetailOrderInstructionService is a rest service used to create and manager orders for clients.

It contains the following operations:

Code Block
    "/login/{ssn}"
    Stream Login(string ssn);

    "/customerinfo/{ssn}"
    Stream CustomerInfo(string ssn);

    "/create/{ssn}"
    Stream Create(string ssn, CreateOrderInstructionRetailDmaRequest json);

    "/update/{ssn}"
    Stream Update(string ssn, UpdateOrderInstructionsRetailDmaRequest json);

    "/cancel/{ssn}"
    Stream Cancel(string ssn, CancelOrderInstructionRetailDmaRequest json);

    "/calculateorder/{ssn}"
    Stream CalculateOrder(string ssn, CalculateOrderRetailDmaRequest request);

    "/portfoliooverview/{ssn}"
    Stream GetPortfolioOverview(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.PortfolioOverviewRequest request);

    "/portfolioposition/{ssn}"
    Stream GetPortfolioPosition(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.PortfolioPositionRequest request);

    "/portfoliotransactions/{ssn}"
    Stream GetPortfolioTransactions(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.PortfolioTransactionsRequest request);

    "/accountbalance/{ssn}"
    Stream GetAccountBalance(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.AccountBalanceRequest request);

    "/searchorders/{ssn}"
    Stream SearchOrders(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.OrderSearchRequest request);

    "/searchtrades/{ssn}"
    Stream SearchTrades(string ssn, Kodi.Kodiak.OrderEntry.Retail.Contracts.TradeSearchRequest request);

Prerequisites

What do we need from 5D?

  • 5D Endpoints - Paths to PerformanceService and ExternalQueryService

  • Authorization/user configuration - The identity of windows user needed to call those services. This user is specified in appSettings.config as RetailsCustomerUserId

Setup

The Kodi.Kodiak.OrderEntry.Retail.dll file needs to be present in C:/KodiakOrderEntryServer

A correct version of Kodi.Kodiak.Adapters.Libra.dll (above 3.1.1.52) needs to be present in C:/KodiakOrderEntryServer

Configuration

...

  • Spring

  • Services

  • Connection strings

  • Access

Setup

Overview - What does this service do

How do you set this up?

Do you need to create a user/user group/trader/external user?

Where are the executables?

Where is the jenkins build?

Deployment

Where are the configs saved after deployment

What steps should be followed after deployment?

...

Check logs?

...

Check endpoints?

...

The following configuration files need to be set

1: config/serviceconfig/CustomServices.config

This file contains the depency injection cofiguration for the service.

Code Block
languagexml
  <object id="RetailOrderInstructionService" type="Kodi.Kodiak.Services.RetailOrderInstructionService, Kodi.Kodiak.OrderEntry.Retail" singleton="false" scope="request">
    <property name="LibraExtSystemId" value="Libra"/>
    <property name="DefaultUserIdForRetailCustomers" value="${RetailCustomersUserId}"/>
    <property name="UserRepository" ref="UserRepository"/>
    <property name="CustomerRepository" ref="CustomerRepository"/>
    <property name="RetailKodiakService" ref="RetailKodiakService"/>    
    <property name="RetailOrderInstructionEntryService" ref="RetailOrderInstructionEntryService"/>
    <property name="RetailSearchService" ref="RetailSearchService"/>
    <property name="PortfolioService" ref="PortfolioServiceImplementation"/>
    <property name="AccountService" ref="AccountServiceImplementation"/>
  </object>  

2: config/serviceconfig/system.servicemodel.services.config

This setting needs to be added here for the Wcf system to load the service.

Code Block
languagexml
<!-- For use with Retail DMA -->
<service behaviorConfiguration="ServiceBehaviorBasic" name="RetailOrderInstructionService">
	<endpoint address="" binding="webHttpBinding" contract="Kodi.Kodiak.Services.IRetailOrderInstructionService" behaviorConfiguration="rest" />
</service>    

3: Config/Spring/Kodi.Kodiak.OrderEntry.Retail.config

This file contains configuartion for RetailKodiakService, RetailOrderInstructionService and RetailSearchService

Code Block
languagexml
  <object id="RetailKodiakService" type="Kodi.Kodiak.OrderEntry.Retail.RetailKodiakService, Kodi.Kodiak.OrderEntry.Retail">
    <property name="CustomerRepository" ref="CustomerRepository"/>
    <property name="LoginRepository" ref="LoginRepository"/>
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository"/>
  </object>
  <object id="RetailOrderInstructionEntryService" type="Kodi.Kodiak.OrderEntry.Retail.RetailOrderInstructionEntryService, Kodi.Kodiak.OrderEntry.Retail">
    <property name="AllocateWhenFilled" value="${RetailCustomersAllocateWhenFilled}"/>
    <property name="DirectToMarket" value="${RetailCustomersDirectToMarket}"/>
    <property name="BypassBackoffice" value="${RetailCustomersBypassBackoffice}"/>
 
    <property name="CustomerRepository" ref="CustomerRepository"/>
    <property name="BrokerRepository" ref="BrokerRepository"/>
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository"/>    
    <property name="InstrumentRepository" ref="InstrumentRepository"/>
 
    <property name="OrderValidationAdapter" ref="OrderValidationAdapterRetail"/>
    <property name="OrderCalculator" ref="OrderCalculator"/>    
    <property name="OrderInstructionEntry" ref="OrderInstructionEntry"/>    
    <property name="OrderService" ref="OrderService"/>    
  </object>
  <object id="RetailSearchService" type="Kodi.Kodiak.OrderEntry.Retail.RetailSearchService, Kodi.Kodiak.OrderEntry.Retail">
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository"/>
    <property name="TradeRepository" ref="TradeRepository"/>
    <property name="CustomerRepository" ref="CustomerRepository"/>
    <property name="PortfolioRepository" ref="PortfolioRepository"/>
  </object>

4: Kodi.Kodiak.WindowsServices.OrderEntryServer.exe.config

This line needs to be present under the context node of spring.

Code Block
languagexml
<resource uri="~/Config/Spring/Kodi.Kodiak.OrderEntry.Retail.config" /> 

5: config/Adapters.config

The OrderValidationAdapterRetail needs to be configured. OrderValidationAdapterRetail uses PortfolioServiceImplementationand AccountServiceImplementation which are defined in Spring/Kodi.Kodiak.Allocations.config. Those nodes use PortfolioPositionAdapter and AccountBalanceAdapter are also configured in Adapters.config.

Code Block
languagexml
  <object id="OrderValidationAdapterRetail" type="Kodi.Kodiak.OrderEntry.Retail.OrderValidationAdapter, Kodi.Kodiak.OrderEntry.Retail">
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository"/>
    <property name="PortfolioService" ref="PortfolioServiceImplementation"/>
    <property name="AccountService" ref="AccountServiceImplementation"/>
    <property name="OrderCalculator" ref="OrderCalculator"/>
  </object>

  <object id="PortfolioPositionAdapter" type="Kodi.Kodiak.Adapters.Libra.PortfolioPositionAdapter, Kodi.Kodiak.Adapters.Libra">
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository" />
    <property name="PortfolioRepository" ref="PortfolioRepository" />
    <property name="CustomerRepository" ref="CustomerRepository" />
    <property name="InstrumentRepository" ref="InstrumentRepository" />
    <property name="AllocationSummaryService" ref="AllocationSummaryService" />
    <property name="OrderInstructionSummaryService" ref="OrderInstructionSummaryService" />
    <property name="LibraInterface" ref="LibraInterface" />
    <property name="CalculateAveragePriceFromTransactions" value="false" />
  </object>
    
  <object id="AccountBalanceAdapter" type="Kodi.Kodiak.Adapters.Libra.AccountBalanceAdapter, Kodi.Kodiak.Adapters.Libra">
    <property name="OrderInstructionRepository" ref="OrderInstructionRepository" />
    <property name="PortfolioRepository" ref="PortfolioRepository" />
    <property name="CustomerRepository" ref="CustomerRepository" />
	<property name="OrderInstructionSummaryService" ref="OrderInstructionSummaryService" />
  </object>    

6: config/environment/appSettings.config

An important setting here is RetailCustomerUserId which maps to the user which will be used when creating orders and calling libra services.

Code Block
languagexml
  <!-- Retail Customers -->
	<add key="RetailCustomersUserId" value="68" />
	<add key="RetailCustomersAllocateWhenFilled" value="true" />
	<add key="RetailCustomersDirectToMarket" value="true" />
	<add key="RetailCustomersBypassBackoffice" value="true" />

7: config/serviceconfig/system.servicemodel.client.config

This file contains the web service client configuration used to call Libra services.

Code Block
languagexml
  <endpoint address="http://urltolibraserver/Libra.Services/Assetmanager/PerformanceService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IPerformanceService" 
  contract="LibraServices.IPerformanceService" name="WSHttpBinding_IPerformanceService">
    <!-- <identity> -->
      <!-- <userPrincipalName value="srv.iisapppool_test@fjaf.internal" /> -->
    <!-- </identity> -->
  </endpoint>
  <endpoint address="http://urltolibraserver/Libra.Services/Portfolio/ExternalQueryService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IExternalQueryService" 
  contract="LibraServicesExternal.IExternalQueryService" name="WSHttpBinding_IExternalQueryService">
    <!-- <identity> -->
      <!-- <userPrincipalName value="srv.iisapppool_test@fjaf.internal" /> -->
    <!-- </identity> -->
  </endpoint>

8: config/serviceconfig/system.servicemodel.bindings.config

The client config in section 7 need wsHttpBindings.

Code Block
    <binding name="WSHttpBinding_IPerformanceService" textEncoding="utf-8" maxReceivedMessageSize="20000000">
      <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000" />
    </binding>
    <binding name="WSHttpBinding_IExternalQueryService" textEncoding="utf-8" maxReceivedMessageSize="20000000">
      <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000" />
    </binding>