# Integrate IDGen Service

## Overview

This page provides the steps to integrate with the IDGen Service. Each application needs to have a unique ID. The [IDGen service](https://docs.digit.org/platform/platform/core-services/id-generation-service) generates these unique IDs. ID format can be customised via configuration in MDMS.

## Steps

1. Add the ID format that needs to be generated in this file - [Id Format Mdms File](https://github.com/egovernments/egov-mdms-data/blob/DEV/data/pb/common-masters/IdFormat.json). The following config has been added for this module:

```
{
"format": "PB-BTR-[cy:yyyy-MM-dd]-[SEQ_EG_BTR_ID]",
"idname": "btr.registrationid"
}
```

2. Restart the IDGen service and MDMS service and port-forward IDGen service to port 8285:

```
kubectl port-forward <IDGEN_SERVICE_POD_NAME> 8285:8080
```

{% hint style="info" %}
Note that you can set the ID format in the application.properties file of IDGen service and run the service locally if you don't have access to a DIGIT environment.
{% endhint %}

3. Hit the below curl to verify that the format is added properly. The "ID" name needs to match exactly with what was added in MDMS.

{% code lineNumbers="true" %}

```bash
curl --location --request POST 'http://localhost:8285/egov-idgen/id/_generate' \
--header 'Content-Type: application/json' \
--data-raw '{
    "RequestInfo": {
        "apiId": "string",
        "ver": "string",
        "ts": null,
        "action": "string",
        "did": "string",
        "key": "string",
        "msgId": "string",
        "authToken": "6456b2cf-49ca-47c7-b7b6-c179f19614c7",
        "correlationId": "e721639b-c095-40b3-86e2-acecb2cb6efb",
        "userInfo": {
            "id": 23299,
            "uuid": "e721639b-c095-40b3-86e2-acecb2cb6efb",
            "userName": "9337682030",
            "name": "Abhilash Seth",
            "type": "EMPLOYEE",
            "mobileNumber": "9337682030",
            "emailId": "abhilash.seth@gmail.com",
            "roles": [
                {
                    "id": 281,
                    "name": "Employee"
                }
            ]
        }
    },
    "idRequests": [
        {
            "tenantId": "pb.amritsar",
            "idName": "btr.registrationid"
        }
    ]
}'
```

{% endcode %}

4. Once verified, we can call the ID generation service from within our application and generate the registrationId. \\
5. In the BirthApplicationEnrichment class, update the enrichBirthApplication method as shown below:

```java
  public void enrichBirthApplication(BirthRegistrationRequest birthRegistrationRequest) {
        List<String> birthRegistrationIdList = idgenUtil.getIdList(birthRegistrationRequest.getRequestInfo(), birthRegistrationRequest.getBirthRegistrationApplications().get(0).getTenantId(), "btr.registrationid", "", birthRegistrationRequest.getBirthRegistrationApplications().size());
        Integer index = 0;
        for(BirthRegistrationApplication application : birthRegistrationRequest.getBirthRegistrationApplications()){
            // Enrich audit details
            AuditDetails auditDetails = AuditDetails.builder().createdBy(birthRegistrationRequest.getRequestInfo().getUserInfo().getUuid()).createdTime(System.currentTimeMillis()).lastModifiedBy(birthRegistrationRequest.getRequestInfo().getUserInfo().getUuid()).lastModifiedTime(System.currentTimeMillis()).build();
            application.setAuditDetails(auditDetails);

            // Enrich UUID
            application.setId(UUID.randomUUID().toString());

//            Enrich application number from IDgen
            application.setApplicationNumber(birthRegistrationIdList.get(index++));
//             Enrich registration Id
            application.getAddress().setApplicationNumber(application.getId());

            // Enrich address UUID
            application.getAddress().setId(UUID.randomUUID().toString());

        }
    }
```

6. Make sure below ID generation host configuration is present in the application.properties file. Make sure to fill in the correct values for the host.

{% code lineNumbers="true" %}

```properties
#Idgen Config
egov.idgen.host=http://localhost:8285/ #REPLACE
egov.idgen.path=egov-idgen/id/_generate
```

{% endcode %}
