npm package: @leoantares/phiv-core
Description: Core package for Pharmactiv projects
Author: Léo Antares
Latest version: 2.0.5

# Pharmactiv code package

This package intend to publish common code regarding the Pharmactiv projets

---

## Apis

To use an API simply instanciate it `const apiCategory = new ApiCategory(config)`.

The **Configuration** object:

```typescript
interface IConfiguration {
  baseURL: string;
  headers: Object;
  timeout: number;
}
```

```typescript
const configuration: IConfiguration = {
  baseURL: "https://www.api.com",
  fileMaxSize: 15000000,
  headers: {},
  timeout: 60000
};
```

### Constants

The exported variable `API_CONSTANTS` exposes the following set of constants: **ACCOUNTS**, **DISCOUNTS**, **HIGHLIGHTS**, **PAGES**.

### Assistance

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Category

List of endpoints: **get**, **getPostsById**, **getByType**, **post**, **patch**, **positionByType**, **delete**.

### Drugstore

```typescript
interface IDrugstoreSearch {
    nw: string<lat, lng>;
    se: string<lat, lng>;
    assistances: string<uuid>[];
    specializations: string<uuid>[];
}
```

List of endpoints: **get**, **getBy**, **getById**, **search(query: IDrugstoreSearch, config?: IConfiguration)**, **register()**, **patch**.

### Drugstore Membership

List of endpoints: **get**, **getById**, **patch**.

### File

List of endpoints: **upload(isMultiple: boolean, isBase64: boolean)**, **getFile**.

```typescript
const query = {
    url: '<file_url>',
}

const { data } = await apiFile.getFile(query);
```

### Highlight

List of endpoints: **get(contextType?: string, contextId?: string, config?: IConfiguration)**, **getById**, **getByType(type: integer, contextType?: string, contextId?: string, config?: IConfiguration)**, **getByTypeWithQuery**, **post**, **patch**, **delete**.

If necessary, you can send queries from Frontend to filter results like example below :

**Method getByTypeWithQuery :**
```typescript
const query = { 
    env: '<env>' // Integer - Available values : API_CONSTANTS.PHREF_ENVS (For now env parameter works only with Highlight's type API_CONSTANTS.HIGHLIGHTS.HOMEPAGE_CATALOG)
};

const { data } = await apiHighlight.getByTypeWithQuery(
    '<highlight_type>', // Integer - Available values : API_CONSTANTS.HIGHLIGHTS.HOMEPAGE_CATALOG
    query
);
```

### Highlightable

List of endpoints: **patch**, **delete**.

### Page

List of endpoints: **get**, **post**, **patch**, **delete**.

### Partoo

List of endpoints: **auth**, **businesses**, **organizations**, **users**, **categories**.

### Patient

List of endpoints: **version**, **verify**, **login**, **register**, **resendCode**, **requestResetPassword**, **resetPassword**, **me**, **verifyPhone**, **verifyPinCode**, **patch**, **patchLink**, **patchPassword**, **patchPinCode**, **delete**, **adelyaGet**, **adelyaPut**, **adelyaDelete**, **epsilonGet**, **epsilonPut**, **epsilonDelete**, **apiCoreGet**, **apiCorePost**, **apiCorePatch**, **apiCorePut**, **apiCoreDelete**, **linkGet**, **linkPost**, **linkPatch**, **linkPut**, **linkDelete**.

### Pharmanity

List of endpoints: **categories**, **ranges**.

### Post

List of endpoints: **get**, **getById**, **getBySlug**, **post**, **patch**, **delete**.

If necessary, you can send queries from Frontend to filter results like example below :

```typescript
const query = {
    categories: '<category_id>,<category_id>,...', // uuid,uuid,...
    level_id: '<level_id>', // uuid
    right_id: '<right_id>', // uuid
    packs: '<pack_id>,<pack_id>,...', // uuid,uuid,...
    min_date: '<min_date>', // Y-m-d H:i:s
    max_date: '<max_date>', // Y-m-d H:i:s
    search: '<search>', // String
}

const { data } = await apiPost.get(query);
```

### Product

List of endpoints: **get**, **getById**, **getByCategoryId(categoryId: integer, type: string<(medi|para)>, page?: integer, pharmanityId?: string, config?: IConfiguration)**, **getPostsById**, **getStock**, **post**, **patch**, **delete**.

### Search

The endpoint is `apiSearch.get(model: string, query: string, type?: number, config?: IConfiguration)`.

Models: **product**, **drugstore**, **post**.

### Service

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Specialisation

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Universe

List of endpoints: **get**, **getBySlug**, **post**, **patch**, **delete**.

### Popin

List of endpoints: **get**, **post**, **delete**.

### Level

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Pack

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Zone

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Right

List of endpoints: **get**, **getById**, **post**, **patch**, **delete**.

### Help

List of endpoints: **get**, **getById**, **post**, **patch**, **position**, **delete**.

### Event

List of endpoints: **get**, **getById**, **exportCsv**, **post**, **patch**, **delete**, **search**, **searchAdmin**.

If necessary, you can send queries from Frontend to filter results like example below :

**Method get (GET method) :**
```typescript
const query = {
    category_id: '<category_id>', // uuid
    level_id: '<level_id>', // uuid
    zone_id: '<zone_id>', // uuid
    right_id: '<right_id>', // uuid
    packs: '<pack_id>,<pack_id>,...', // uuid,uuid,...
    min_date: '<min_date>', // Y-m-d H:i:s
    max_date: '<max_date>', // Y-m-d H:i:s
    group: '<group>', // Integer - Available values : API_CONSTANTS.PHREF_GROUPS
    drugstore_id: '<drugstore_id>', // uuid
}

const { data } = await apiEvent.get(query);
```

**Method search (POST method) :**
```typescript
const query = {
    category_id: '<category_id>', // uuid
    level_id: '<level_id>', // uuid
    zone_id: '<zone_id>', // uuid
    right_id: '<right_id>', // uuid
    packs: '<pack_id>,<pack_id>,...', // uuid,uuid,...
    min_date: '<min_date>', // Y-m-d H:i:s
    max_date: '<max_date>', // Y-m-d H:i:s
    group: '<group>', // Integer - Available values : API_CONSTANTS.PHREF_GROUPS
    drugstore_id: '<drugstore_id>', // uuid
}

const { data } = await apiEvent.search(query);
```

### Registration

List of endpoints: **get**, **getById**, **getPositionsList**, **post**, **patch**, **delete**.

### Docutheque

List of endpoints: **get**, **getAdmin**, **post**, **patch**, **delete**.

If necessary, you can send queries from Frontend to filter results like example below :

```typescript
const query = {
    category_id: '<category_id>', // uuid
    level_id: '<level_id>', // uuid
    right_id: '<right_id>', // uuid
    packs: '<pack_id>,<pack_id>,...', // uuid,uuid,...
    type: '<type>', // Integer
    search: '<search>', // String
}

const { data } = await apiDocument.get(query);
```

### Advancedpage

List of endpoints: **get**, **getByCategory**, **getBySlug**, **post**, **patch**, **positionByCategory**, **delete**.

### Warning

List of endpoints: **get**, **getAdmin**, **post**, **patch**, **import**, **delete**.

### Mydata

List of endpoints: **get**, **getAdmin**, **getMyData**, **post**, **patch**, **import**, **delete**.

If necessary, you can send queries from Frontend to filter results like example below :

```typescript
const query = {
    min_date: '<min_date>', // Y-m-d
    max_date: '<max_date>', // Y-m-d
}

const { data } = await apiMydata.get(query);
```

```typescript
const query = {
    history: '<bool>',
}

const { data } = await apiMydata.getMyData(
    '<mydata_id>', // uuid
    '<cip>', // String
    '<type>', // String - Available types values inside record returned by apiMydata.get()
    query
);
```

### TransactionType (Opérations BRI)

List of endpoints: **get**, **getAdmin**, **getByCategoryId**, **post**, **patch**, **delete**.

### User

```typescript
interface ILog {
    email: string;
    password: string;
}

interface IResetPassword {
    password: string;
    confirmation_password: string;
    token: string;
}
```

List of User endpoints: **login(logs: ILog, config?: IConfiguration)**, **loginAsAdmin(logs: ILog, config?: IConfiguration)**, **register()**, **registerPharmacist()**, **getById**, **post**, **patch**, **sendResetPasswordToken(email: string, config?: IConfiguration)**, **resetPassword(data: IResetPassword, config?: IConfiguration)**, **logout()**.

List of Account endpoints: **logAccount(account: Account, config: IConfiguration)**, **patchAccount**.

List of Notifications endpoints: **getUnreadNotifications**, **getReadNotifications**, **setNotificationAsRead**.

```typescript
apiUser.getUnreadNotifications(
    '<user_id>', // uuid
    '<type>', // String - Allowed values : 'post', 'document'
);
```

```typescript
apiUser.getReadNotifications(
    '<user_id>', // uuid
    '<type>', // String - Allowed values : 'post', 'document'
);
```

```typescript
apiUser.setNotificationAsRead(
    '<notification_id>', // uuid
);
```
---

## Functions

### Accounts

- **AccountsTypeLabel(type: integer)**

### Currency

- **FormatCurrency**

### Dates

- **DateFormat(date: Date, format: string)**
- **DateFormatDistance(date1: Date, date2: Date)**
- **DateFormatRelative(date1: Date, date2: Date)**

For the moment, all dates are set in _French_.

### Events

- **EventsDebounce(cb: Function): Function**

### Highlights

- **HighlightsFilter(highlights: Highlightable[], type: integer)**
- **HighlightsFilterOne(highlights: Highlightable[], type: integer)**
- **HihglightsGroup(Highlightable[])**
- **HighlightsGetDiscountsLabel(discountType: integer)**
- **HighlightsGetDiscountLabels(discountType: integer)**
- **HighlightsGetPriceDescription(highlightable: IHighlightable)**
- **HighlightsConvertCentsToEuro(price: string)**

### Notifications

```typescript
interface INotification {
  content: string;
  timeout?: integer; // default 5000
}
```

List of notifications: **custom**, **error**, **info**, **success**.

---

#### How to publish on npm

- Change **package.json** version and push it `npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]`
- `npm publish --access public`