CCCTC Docs

CCCTC Docs

  • Help

MDM Enable College Adaptor Design (POC)

To "MDM-enable" a service is taken to mean any updates to the service are 'shared' with MDM so that MDM can further share those updates appropriately.

Overview

This is a Proof Of Concept to explore MDM implementation choices with the college adaptor.

Several pieces are still in development or in the process of being finalized in design and implementation. To help shape the final stages of these pieces in progress, this POC will prove some integration choices with the API Gateway.

Business Case

The business case here is typical of a data update and the flow of sharing that update through MDM to downstream systems.

  1. When a college adaptor (source system) receives an update to a Person's CCCID attribute (source record), we will notify the MDM framework. With this information, MDM will properly apply governance and other capabilities to share this data update with downstream systems.
  2. A second college adaptor that registers to receive data updates (interested system), will receive an update from MDM containing this new CCCID value.

Technical Requirements

  1. Ideally, the micro won't have any dependencies or knowledge of MDM. This adheres to a major principal of micro architecture, (viz. "separation of concerns")

API Gateway

The components in the gateway, the service-router, service-conductor, and service-workers will allow us to integrate with MDM and make ZERO changes to the college-adaptor. In fact, all work outlined below involves no Java code and simply leverages the features of the gateway stack.

Service Router

Authorization and service routing (URI) for the MDM college adaptor are described below.

Authorization

Note: The OAuth information below is not new and describes existing functionality.

Proper OAuth 2.0 credentials are required to access all endpoints through the API Gateway.

Calls to update a source adaptor will use existing flows and legacy endpoints. Those endpoints to update the SIS behind the college-adaptor must have the following security scope(s) as documented elsewhere.

- sisdata_W

Note: Data updates from MDM to the interested adaptor will not go through the service-router, but via the eventing system in service-conductor.

URI

Note: The information below is not new and describes existing functionality.

The URI below is exposed to update the source system adaptor:

PATCH /adaptor/{mis}}/mock/colleges/{{mis}}/persons/{{sisPersonId}}

where:

LabelDescription
misThe MIS code of the college to update
sisPersonIdThe ID of the Person record in the SIS

This URI will initiate the College Adaptor Workflow below.

Service Conductor

The Service Conductor has the following workflow and task definitions for the MDM college adaptor defined below.

Workflow Definitions

There are two workflows for the MDM college adaptor:

  • College Adaptor Workflow
  • MDM Workflow
College Adaptor Workflow

Version 1 of the college-adaptorWF will remain the same to support legacy code and allow A-B testing.

A new version 2 of the college-adaptorWF will extend v1 to add an event task to fire when PATCH calls happen for the college adaptor. The Event task is described in Conductor's Event Task.

MDM Workflow

This new workflow is started from the MDM Event Handler.

This workflow is responsible for calling the MDM microservice and passing it details to share/notify the updated Person object.

Note: At this point, exactly how the workflow will call MDM is in development. The top choices discussed are:

  1. Make a RESTful call to a service that wraps the MDM framework.
  2. Use an AWS SQS queue to post updates to Conductor and in turn post to the MDM adaptor. This solution may also solve the TBD flow of how to receive updates from MDM.

Task Definitions

The MDM college adaptor has two workflow tasks and one event handler associated with it:

  • College Adaptor Intake Task
  • MDM event handler
College Adaptor Intake Task

Note: The information below is not new and describes existing functionality.

This task is responsible for supporting all calls to the college adaptor. It is 100% compatible with legacy calls (prior to API Gateway) and will allow future versions and upgrades to be forked into appropriate flows.

The design and implementation details of this new microservice are contained in TODO: link-to-microservice-design-markdown-doc

Input

An example payload to update the cccid field of the specified {{sisPersonId}} in the URI:

{
    "cccid": "TEST777"
}
Output
{
    "misCode": "001",
    "sisPersonId": "person1",
    "firstName": "Marge",
    "lastName": "Simpson",
    "emailAddresses": [
        {
            "type": "Institution",
            "emailAddress": "msimpson@springfield.edu"
        },
        {
            "type": "Personal",
            "emailAddress": "msimpson@mail.com"
        }
    ],
    "loginId": "msimpson",
    "loginSuffix": "springfield.edu",
    "cccid": "TEST777"
}

Event Handlers

All event handlers are asynchronous. Events 'fire-and-forget' in the main thread so they have little to no impact on the main flow. In a separate thread, handlers listen for specific events and act on them accordingly.

MDM Event Handler

This handler listens for events produced in College Adaptor Workflow. Events are received by this handler that pass the condition below:

"condition": "$.inbound.httpMethod == '\''PATCH'\'' && $.outbound.statusCodeValue >= 200 && $.outbound.statusCodeValue <= 299 ",

By satisfying this condition, a start_workflow action is performed naming the MDM Workflow to be started.

Service Workers

The service workers for the MDM college adaptor are described below.

College Adaptor

Note: The information below is not new and describes existing functionality.

This worker is required for the College Adaptor Intake Task

This worker is running co-located with the deployment of the college adaptor. From there, the worker calls out to the college adaptor securely on a private network.

Properties

URL of microservice.

Response

An example return from a call to this gateway endpoint will return:

{
    "misCode": "001",
    "sisPersonId": "person1",
    "firstName": "Marge",
    "lastName": "Simpson",
    "emailAddresses": [
        {
            "type": "Institution",
            "emailAddress": "msimpson@springfield.edu"
        },
        {
            "type": "Personal",
            "emailAddress": "msimpson@mail.com"
        }
    ],
    "loginId": "msimpson",
    "loginSuffix": "springfield.edu",
    "cccid": "TEST777"
}

Limitations

  • We do not define updates from MDM (originated on an upstream system). There are still some design discussions being made in this area and prototyping is in process.

  • This design does not address updates made at the college, directly into the SIS. This also is too early in the design phase to design a solution around.

  • Issues outside the college-adaptor such as the issues described below are unresolved:

    • Another application such as CCCApply updates some part of a record (e.g., student address), then how are those deltas shared with college-adaptors
    • How do we map a person's unique id at one college with that same person at another college? The sisPersonId will be different for the same person at two colleges. However, in the call above, sisPersonId is all we pass for home college's PATCH update.

Related links:

  • Netflix OSS Docs
  • Overview
  • Business Case
  • Technical Requirements
  • API Gateway
    • Service Router
    • Service Conductor
    • Service Workers
  • Response