Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extending the JS SDK with controllers #284

Merged
merged 11 commits into from
Apr 26, 2019
Merged

Conversation

Aschen
Copy link
Contributor

@Aschen Aschen commented Apr 23, 2019

What does this PR do?

Add a page about how to extend the JS SDK with custom controllers.
https://deploy-preview-284--kuzzle-doc-v2.netlify.com/sdk-reference/js/6/extend-sdk/

Also document:

  • BaseController class
  • Kuzzle.useController method

See kuzzleio/sdk-javascript#388

How should this be manually tested?

@kuzzle
Copy link
Contributor

kuzzle commented Apr 23, 2019

Snippets tests reports

SDK Version Tests overview
v6 ✔️
v5 ✔️
v1 ✔️
v1 ✔️
v1 ✔️
v1 ✔️

@Yoann-Abbes
Copy link
Contributor

Yoann-Abbes commented Apr 23, 2019

Is it really necessary to have 3 pages for Base Controller since the content is quiet short ?
It feels empty like that.
I suggest to have only one page with 3 sub chapters.

@Aschen
Copy link
Contributor Author

Aschen commented Apr 24, 2019

We have the same documentation structure for every core class, it feel weird to have a different one for BaseController only because there is not a lot of content.

And this content can also grow in the futur

scottinet pushed a commit to kuzzleio/sdk-javascript that referenced this pull request Apr 25, 2019
## What does this PR do?

*I'm not sure if this is a new feature or an enhancement* 

This PR intend to unify the way we add/use controllers with the SDK. In this way we can have the same API when using our core controllers (`document`, `collection`, etc.) and custom controllers made by users.  

All existing controllers are now inheriting from the `BaseController` class and they are added to the SDK with `Kuzzle.useController` instead of been manually instantiated.

Example of custom controller
```
class TaxiController extends BaseController {
  constructor (kuzzle) {
    super(kuzzle, 'my-plugin/taxi');
  }

  startDuty (driver) {
    return this.query({ driver, action: 'startDuty' });
  }
}

kuzzle.useController(TaxiController, 'taxi');

kuzzle.taxi.startDuty('Martin');
```

I know this look like a breaking change but since we never documented this feature by now it is not really one.

Documentation kuzzleio/documentation#284

### How should this be manually tested?

  - Step 1 : Run unit tests
src/sdk-reference/js/6/base-controller/query/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/base-controller/query/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/base-controller/query/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/base-controller/query/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/extend-sdk/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/extend-sdk/index.md Show resolved Hide resolved
src/sdk-reference/js/6/kuzzle/use-controller/index.md Outdated Show resolved Hide resolved
src/sdk-reference/js/6/kuzzle/use-controller/index.md Outdated Show resolved Hide resolved
}

enroll () {
return 'Success';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should use "this.query" instead

This probably means a custom template with either a mocked version of Kuzzle.query, or more simply a dedicated try...catch returning a success response if the error is exactly about a missing API method, paving the way for more thorough end-to-end tests with plugins.

BaseController
} = require('kuzzle-sdk');

BaseController.prototype.query = () => Promise.resolve(null);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clever and efficient 👍

@Aschen Aschen merged commit 5638bf2 into 2-dev Apr 26, 2019
@Aschen Aschen deleted the use-controller-and-basecontroller branch April 26, 2019 12:07
@kuzzle kuzzle mentioned this pull request Apr 29, 2019
alexandrebouthinon pushed a commit that referenced this pull request Apr 29, 2019
* Add documentation page about mappings (#271)

Adds a documentation essentials page about mappings:

dynamic mapping policy
collection metadata
properties types definitions
Also update SDKs

See kuzzleio/kuzzle#1257

* Embedded protocols (#286)

Documentation for embedded protocols, notably for MQTT.

* Extending the JS SDK with controllers (#284)

Add a page about how to extend the JS SDK with custom controllers.  
https://deploy-preview-284--kuzzle-doc-v2.netlify.com/sdk-reference/js/6/extend-sdk/

Also document:
 - BaseController class
 - Kuzzle.useController method

See kuzzleio/sdk-javascript#388

* [KZL-907] Getting started dev plugin (#276)

## What does this PR do?

This PR responds to this [ticket](https://jira.kaliop.net/browse/KZL-907).
Also, it increases the readability of documentation's plugin part.

### How should this be manually tested?

[Netify](https://deploy-preview-276--kuzzle-doc-v2.netlify.com/plugins/1/essentials/introduction/)

### Other changes

- Re-arrange plugin documentation path
- Update dead link in boilerplate repository

### Boyscout

Prettier

* Release 2.1.1
Aschen pushed a commit that referenced this pull request May 29, 2019
This was referenced Jun 12, 2019
xbill82 added a commit that referenced this pull request Jun 13, 2019
# [3.0.0](https://github.com/kuzzleio/documentation/releases/tag/3.0.0) (2019-06-12)


#### Bug fixes

- [ [#298](#298) ] Fix bulk import return   ([Aschen](https://github.com/Aschen))
- [ [#325](#325) ] Adapt legacy redirection   ([Aschen](https://github.com/Aschen))
- [ [#322](#322) ] Fix remaining dead links and add check_link to CI   ([Aschen](https://github.com/Aschen))
- [ [#304](#304) ] Fix sdk js tests   ([benoitvidis](https://github.com/benoitvidis))

#### New features

- [ [#299](#299) ] Documentation for wildcard events   ([thomasarbona](https://github.com/thomasarbona))
- [ [#321](#321) ] Add guide about secrets management with the Vault   ([Aschen](https://github.com/Aschen))
- [ [#300](#300) ] Add page about bulk:write and bulk:mwrite   ([Aschen](https://github.com/Aschen))

#### Enhancements

- [ [#327](#327) ] SPA mode   ([xbill82](https://github.com/xbill82))
- [ [#324](#324) ] Update Redis version   ([Aschen](https://github.com/Aschen))
- [ [#316](#316) ] Sdks authenticated connected props   ([Aschen](https://github.com/Aschen))
- [ [#317](#317) ] Add new way for updateSpecifications & validateSpecifications   ([thomasarbona](https://github.com/thomasarbona))
- [ [#296](#296) ] Rewrite the Realtime guide   ([Aschen](https://github.com/Aschen))
- [ [#301](#301) ] Deprecate realtime join   ([Aschen](https://github.com/Aschen))
- [ [#291](#291) ] Getting started React + improve snippetManager   ([thomasarbona](https://github.com/thomasarbona))
- [ [#294](#294) ] Add s3 plugin   ([Aschen](https://github.com/Aschen))
- [ [#292](#292) ] Add since   ([Aschen](https://github.com/Aschen))
- [ [#276](#276) ] [KZL-907] Getting started dev plugin   ([Yoann-Abbes](https://github.com/Yoann-Abbes))
- [ [#284](#284) ] Extending the JS SDK with controllers   ([Aschen](https://github.com/Aschen))
- [ [#271](#271) ] Add documentation page about mappings   ([Aschen](https://github.com/Aschen))

#### Others

- [ [#314](#314) ] Add a clustering guide   ([scottinet](https://github.com/scottinet))
- [ [#319](#319) ] Getting-started-sdk-JS6-architecture   ([berthieresteban](https://github.com/berthieresteban))
- [ [#311](#311) ] Add PDF sending example for Request.setResult   ([Aschen](https://github.com/Aschen))
- [ [#315](#315) ] Normalize directories and generate redirections   ([Aschen](https://github.com/Aschen))
- [ [#309](#309) ] Port #284 to 3-dev   ([berthieresteban](https://github.com/berthieresteban))
- [ [#308](#308) ] Port #283 to 3-dev   ([berthieresteban](https://github.com/berthieresteban))
- [ [#307](#307) ] Port #282 to 3-dev   ([berthieresteban](https://github.com/berthieresteban))
- [ [#306](#306) ] Port #280 to 3-dev   ([berthieresteban](https://github.com/berthieresteban))
- [ [#312](#312) ] Port 278 to 3-dev   ([Aschen](https://github.com/Aschen))
- [ [#310](#310) ] Port #277 to 3-dev   ([Aschen](https://github.com/Aschen))
- [ [#305](#305) ] Port #275 to 3-dev   ([Aschen](https://github.com/Aschen))
- [ [#303](#303) ] Port #274 to 3-dev   ([Aschen](https://github.com/Aschen))
- [ [#302](#302) ] Port #271 to 3-dev   ([Aschen](https://github.com/Aschen))
- [ [#313](#313) ] Port #266 to 3-dev   ([Yoann-Abbes](https://github.com/Yoann-Abbes))
- [ [#290](#290) ] [KZL-1050] Role template example in the documentation   ([Yoann-Abbes](https://github.com/Yoann-Abbes))
- [ [#293](#293) ] [KZL-1036] Add available plugins   ([Yoann-Abbes](https://github.com/Yoann-Abbes))
- [ [#286](#286) ] Embedded protocols   ([benoitvidis](https://github.com/benoitvidis))
---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants