# Certificate

## Certificate model fields

Certificate model in database contains next fields:

* Required:
  * `id` (uuid)
  * `holder` (ForeignKey to user, setting to Null, if user was deleted)
  * `user_eth_address` (CharField)
  * `institution_title` (CharField)
  * `institution_link` (URLField)
  * `certificate_title` (CharField)
  * `granted_to_type` (PositiveSmallIntegerField from 1 to 3)
  * `ipfs_hash` (CharField)
* Optional:
  * `program_title` (CharField)
  * `course_link` (URLField)
  * `industries` (ManyToManyField)
  * `skills` (ManyToManyField)
  * `score` (FloatField)
  * `duration` (PositiveSmallIntegerField)
  * `expiration_date` (DateTimeField)
  * `checksum_hash` (CharField)

## Certificate View Set

### Create new certificate

Method `create(self, request)` acccepting POST requests with JSON information about new certificate.

Certificate file previously should be uploaded on IPFS.

**Returns**

* If ok:
  * Code status 200
  * `certificate_pk` JSON with Certificate id on bdn
* Else:
  * Code status 400
  * `error` JSON with errors

**Example**:

```
// POST Request to *your_bdn_host*/api/v1/certificates/

'/api/v1/certificates/',
data={
    'institution_title': 'test',
    'institution_link': 'http://example.com',
    'certificate_title': 'test',
    'holder_eth_address': '0xD2BE64317Eb1832309DF8c8C18B09871809f3735',
    'score': '',
    'duration': '',
    'skills': ['Python'],
    'ipfs_hash': 'Qme1WcHcEZU5uct9Wgfdn7S3mKbjSkvwdDTTfSUDjHTqjL'
},
HTTP_AUTH_SIGNATURE='0xe646de646dde9cee6875e3845428ce6fc13d41086e8a7f6531d1d526598cc4104122e01c38255d1e1d595710986d193f52e3dbc47cb01cb554d8e4572d6920361c',
HTTP_AUTH_ETH_ADDRESS='D2BE64317Eb1832309DF8c8C18B09871809f3735'
```

### Get certificate info

Method `retrieve(self, request, pk=None)` acccepting GET requests with certificate id and reply with JSON information about certificate.

**Returns**

* If ok:
  * Code status 200
  * JSON with Certificate data

**Example**

```
// GET Request to *your_bdn_host*/api/v1/certificates/(?P<pk>[^/.]+)/

'/api/v1/certificates/e0e433e9-477e-43a3-8e23-dfe2686202be/',
HTTP_AUTH_SIGNATURE='0xe646de646dde9cee6875e3845428ce6fc13d41086e8a7f6531d1d526598cc4104122e01c38255d1e1d595710986d193f52e3dbc47cb01cb554d8e4572d6920361c',
HTTP_AUTH_ETH_ADDRESS='D2BE64317Eb1832309DF8c8C18B09871809f3735')
```

### Get certificate list

Method `list(self, request)` acccepting GET requests reply with JSON information about certificates by issuer user.

**Returns**

* If ok:
  * Code status 200
  * JSON with Certificates list data by issuer user

**Example**

```
// GET Request to *your_bdn_host*/api/v1/certificates/

'/api/v1/certificates/',
HTTP_AUTH_SIGNATURE='0xe646de646dde9cee6875e3845428ce6fc13d41086e8a7f6531d1d526598cc4104122e01c38255d1e1d595710986d193f52e3dbc47cb01cb554d8e4572d6920361c',
HTTP_AUTH_ETH_ADDRESS='D2BE64317Eb1832309DF8c8C18B09871809f3735'
```

### Get certificates by learner

Method `get_certificates_by_learner(self, request)` acccepting GET requests with `eth_address` and reply with JSON information about certificates by learner ETH Address.

**Returns**

* If ok:
  * Code status 200
  * JSON with Certificates list data by learner ETH Address

**Example**

```
// GET Request to *your_bdn_host*/api/v1/certificates/get_certificates_by_learner/?eth_address=*some_eth_address*

'/api/v1/certificates/?eth_address=0x00000',
HTTP_AUTH_SIGNATURE='0xe646de646dde9cee6875e3845428ce6fc13d41086e8a7f6531d1d526598cc4104122e01c38255d1e1d595710986d193f52e3dbc47cb01cb554d8e4572d6920361c',
HTTP_AUTH_ETH_ADDRESS='D2BE64317Eb1832309DF8c8C18B09871809f3735'
```

### Delete certificate by id

Method `delete_by_id(self, request, pk=None)` acccepting POST requests with certificate id in line.

**Returns**

* If ok:
  * Code status 200
* Else if user is not holder:
  * Code status 401
* Else if certificate does not exist:
  * Code status 404

**Example**:

```
// POST Request to *your_bdn_host*/api/v1/certificates/(?P<pk>[^/.]+)/delete_by_id/

'/api/v1/certificates/e0e433e9-477e-43a3-8e23-dfe2686202be/delete_by_id/',
data={
},
HTTP_AUTH_SIGNATURE='0xe646de646dde9cee6875e3845428ce6fc13d41086e8a7f6531d1d526598cc4104122e01c38255d1e1d595710986d193f52e3dbc47cb01cb554d8e4572d6920361c',
HTTP_AUTH_ETH_ADDRESS='D2BE64317Eb1832309DF8c8C18B09871809f3735'
```
