Page Properties | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
As described in prod ticket:
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Non-functional Requirements
Manageability
The solution should provide the ability to configure specific LoC fields without affecting other Libraries
Interoperability
The solution should provide external API for 3rd party applications to create patrons in FOLIO
Security
The solution should provide an authorization mechanism through FOLIO edge module API keys mechanism
Target Architecture
Context Diagram
...
Workflow diagram
Drawio | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Container Diagram
The solution should be imlemented as new edge-API in edge-patron
module to provide access for external application.
Drawio | ||||
---|---|---|---|---|
|
Swimlane diagram (V2)
The process of remote registration for LC is based on the interaction of a patron with a pre-registration form through Locate UI. To support the flow Locate should be able to verify the patron’s email address.
Expand | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
Edge API Contract
...
Drawio | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Non-functional Requirements
Manageability
The solution should provide the ability to configure specific LoC fields without affecting other Libraries
Interoperability
The solution should provide external API for 3rd party applications to create patrons in FOLIO
Security
The solution should provide an authorization mechanism through FOLIO edge module API keys mechanism
Assumptions
Locate verifies the patron’s email address before starting pre-registration in FOLIO
Locate can define and represent in UI the current status of patron’s registration in FOLIO (expired or not)
Target Architecture
Context Diagram
Drawio | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Container Diagram
The solution should be imlemented as new edge-API in edge-patron
module to provide access for external application.
Drawio | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Edge API Contract
Macro openapi | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
openapi: 3.0.3 info: title: Patron creation description: Edge API for creation of patron account through web-form version: 1.0.0 servers: - url: 'https://github.com/folio-org/mod-patron' paths: /patron/account/{email}: get: description: Get patron account by email tags: - patron parameters: - in: path name: email schema: type: string required: true responses: 201: $ref: "#/components/requestBodies/PatronAccountRequest" 404: $ref: '#/components/responses/NotFound' put: description: Update Patron Account by email operationId: updatePatronByEmail tags: - patron parameters: - in: path name: email schema: type: string required: true requestBody: $ref: "#/components/requestBodies/PatronAccountRequest" responses: 201: $ref: "#/components/requestBodies/PatronAccountRequest" 404: $ref: '#/components/responses/NotFound' 400: $ref: '#/components/responses/BadRequest' 500: $ref: '#/components/responses/InternalServerError' /patron/account: postget: description: CreateGet PatronExpired Accountrecords operationId: createPatron getExpiredRecords tags: - patron tagsparameters: - patronin: query requestBody: name: expired $ref: "#/components/requestBodies/PatronAccountRequest" responsesdescription: flag to fetch expired records 201: required: true $ref: "#/components/requestBodies/PatronAccountRequest" responses: 404: 201: $ref: '#/components/responses/NotFound' description: A JSON array of user 400:names $refcontent: '#/components/responses/BadRequest' 500: application/json: $ref: '#/components/responses/InternalServerError' components: schemasschema: PatronAccount: type: object descriptiontype: Informationarray for patron registration for web-form required: items: - generalInfo - address0 $ref: "#/components/schemas/ExpiredPatronAccount" - contactInfo 404: - preferences $ref: - userType'#/components/responses/NotFound' properties400: generalInfo $ref: '#/components/responses/BadRequest' description500: General info $ref: type: object'#/components/responses/InternalServerError' post: requireddescription: Create Patron Account operationId: createPatron - firstName tags: - lastNamepatron requestBody: properties: $ref: "#/components/requestBodies/PatronAccountRequest" titleresponses: 201: description: Title $ref: "#/components/requestBodies/PatronAccountRequest" type404: string firstName$ref: '#/components/responses/NotFound' 400: description: First Name $ref: '#/components/responses/BadRequest' type500: string middleName$ref: '#/components/responses/InternalServerError' components: schemas: descriptionExpiredPatronAccount: Middle Name type: object typedescription: stringInformation on expired patron accoun properties: lastName: externalSystemId: description: Last Name description: External System ID type: string address0firstName: description: Current address/Address 0First Name type: objectstring propertiespreferredFirstName: description: Preferred addressLine0:First Name type: string description: Current Address/Address line 0 middleName: typedescription: stringMiddle Name addressLine1type: string lastName: description: Current Address/Address line 1 description: Last Name type: string city: email: description: CityEmail Address type: string provinceexpirationDate: description: State/Province Expiration Date type: string format: date zip: PatronAccount: type: object description: Zip/Postal Code description: Information for patron registration for web-form typerequired: string - generalInfo country: - address description:- CountrycontactInfo - userType type: string properties: address1generalInfo: description: AddressGeneral oninfo Photo ID/Address 1 (optional) type: object propertiesrequired: addressLine0:- firstName - description:lastName Current Address/Address line 0 type: stringproperties: addressLine1externalSystemId: description: Current Address/Address line 1External System ID type: string cityfirstName: description: First CityName type: string provincepreferredFirstName: description: State/Province Preferred First Name type: string zipmiddleName: description: Zip/PostalMiddle CodeName type: string countrylastName: description: Last CountryName type: string contactInfoaddress: description: ContactCurrent infoaddress/Address type: object requiredproperties: addressLine0: - homePhone description: Current Address/Address line 0 - email propertiestype: string homePhone addressLine1: description: Home Phone Current Address/Address line 1 type: string mobilePhonecity: description: MobileCity Phone type: string localPhoneprovince: description: Local PhoneState/Province type: string emailzip: description: Email AddressZip/Postal Code type: string country: type: string description: Country preferences: type: objectstring descriptioncontactInfo: Preferences propertiesdescription: Contact info serviceEmailAlertsEnabledtype: object descriptionrequired: I would like to receive email communications from the Library of Congress about- servicephone requests and alerts, research information, and surveys related to doing research at the Library. - email typeproperties: boolean phone: default: false description: Phone programEmailAlertsEnabled:Number descriptiontype: string I would like to receive email communications from the Library of Congress aboutmobilePhone: other Library programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to thedescription: generalMobile public.Phone type: boolean string defaultemail: false supportEmailAlertsEnableddescription: Email Address description type: Istring would like to receive email communications from the Library ofpreferences: Congress about how I might support the Library. type: object typedescription: booleanPreferences properties: default: false userTypeserviceEmailAlertsEnabled: description: User Type description: I would like to receive email communications type:from objectthe Library of Congress about service requests and alerts, research information, required:and surveys related to doing research at the Library. - age type: boolean - use propertiesdefault: false age programEmailAlertsEnabled: description: AgeI would like to receive email communications from the Library of Congress about other Library type: integer use:programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to the general public. defaulttype: Useboolean (Academic/personal) typedefault: stringfalse enumsupportEmailAlertsEnabled: [ "ACADEMIC", "PERSONAL" ] academicStatusdescription: I would like to receive email communications from description: Academic Status (required if "use" is ACADEMIC) the Library of Congress about how I might support the Library. institution: type: boolean description: Academic Institution (required if "use" isdefault: ACADEMIC)false Error: description: "An error" type: object properties: message: type: string minLength: 1 description: "Error message text" type: type: string description: "Error message type" code: type: string description: "Error message code" additionalProperties: false required: - message requestBodies: PatronAccountRequest: content: application/json: schema: $ref: "#/components/schemas/PatronAccount" responses: PatronAccountResponse: description: SuccessfulResult content: application/json: schema: $ref: "#/components/schemas/PatronAccount" NotFound: description: Resource not found content: application/json: schema: $ref: "#/components/schemas/Error" BadRequest: description: Bad request content: application/json: schema: $ref: "#/components/schemas/Error" InternalServerError: description: Internal server error content: application/json: schema: $ref: "#/components/schemas/Error" |
Configuration Settings
The solution should provide a UI screen to map values for externally created patron accounts to correct FOLIO values:
Patron group: FOLIO User should be able to select existing patron group for new patrons
Expiration date: FOLIO User should be able to select the existing patron group for new patrons
For user type and status the solution should provide related defaults described in prod ticket
The solution should provide a UI setting for the one-time operation to create LoC-required custom fields. The list of custom fields is attached to
Jira Legacy server System JIRAJira serverId 01505d01-b853-3c2e-90f1-ee9b165564fc key UXPROD-4663