mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-01 00:08:27 +01:00
50fb671b66
* docs: add ADRs
* docs/adrs
* fix: update developer guide
* fix: add space
* Update website/docs/contributing/backend/overview.md
Co-authored-by: Ivar Conradi Østhus <ivar@getunleash.ai>
* docs: remove auto-generated sidebar
This should've been in .gitignore, but has only been ignored to the
ignore file for the website subdirectory. (This has been fixed on main.)
* docs: delete empty file
* Revert "docs: delete empty file"
This reverts commit 2435f173ff
.
* docs: add frontmatter to new dev docs
* Docs(fix): add quotes around page titles
In yaml, the colon is a special character, so we need to use quotes.
* docs: fix remaining titles
* Update website/docs/contributing/backend/overview.md
Co-authored-by: Ivar Conradi Østhus <ivar@getunleash.ai>
* fix: update empty ADR
* fix: update text to reflect postgres 12
* fix: update backend overview
* fix: remove link
* fix: add form ADR
Co-authored-by: Ivar Conradi Østhus <ivar@getunleash.ai>
Co-authored-by: Thomas Heartman <thomas@getunleash.ai>
93 lines
2.6 KiB
Markdown
93 lines
2.6 KiB
Markdown
---
|
|
title: "ADR: Preferred data mutation method"
|
|
---
|
|
|
|
## Background
|
|
|
|
Because our product is open-core, we have complexities and needs for our SaaS platform that are not compatible with the needs of our open-source product. We have found a need to standardise how we fetch data from APIs, in order to reduce complexity and simplify the data fetching process.
|
|
|
|
## Decision
|
|
|
|
We have decided to standardise data-fetching and error handling by implementing a top level `useAPI` hook that will take care of formatting the
|
|
request in the correct way adding the basePath if unleash is hosted on a subpath, wrap with error handlers and return the data in a consistent way.
|
|
|
|
Example:
|
|
|
|
```tsx
|
|
import { ITagPayload } from 'interfaces/tags';
|
|
import useAPI from '../useApi/useApi';
|
|
|
|
const useTagTypesApi = () => {
|
|
const { makeRequest, createRequest, errors, loading } = useAPI({
|
|
propagateErrors: true,
|
|
});
|
|
|
|
const createTag = async (payload: ITagPayload) => {
|
|
const path = `api/admin/tag-types`;
|
|
const req = createRequest(path, {
|
|
method: 'POST',
|
|
body: JSON.stringify(payload),
|
|
});
|
|
|
|
try {
|
|
const res = await makeRequest(req.caller, req.id);
|
|
|
|
return res;
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|
|
|
|
const validateTagName = async (name: string) => {
|
|
const path = `api/admin/tag-types/validate`;
|
|
const req = createRequest(path, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ name }),
|
|
});
|
|
try {
|
|
const res = await makeRequest(req.caller, req.id);
|
|
return res;
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|
|
const updateTagType = async (tagName: string, payload: ITagPayload) => {
|
|
const path = `api/admin/tag-types/${tagName}`;
|
|
const req = createRequest(path, {
|
|
method: 'PUT',
|
|
body: JSON.stringify(payload),
|
|
});
|
|
|
|
try {
|
|
const res = await makeRequest(req.caller, req.id);
|
|
return res;
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|
|
|
|
const deleteTagType = async (tagName: string) => {
|
|
const path = `api/admin/tag-types/${tagName}`;
|
|
const req = createRequest(path, { method: 'DELETE' });
|
|
|
|
try {
|
|
const res = await makeRequest(req.caller, req.id);
|
|
return res;
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|
|
|
|
return {
|
|
createTag,
|
|
validateTagName,
|
|
updateTagType,
|
|
deleteTagType,
|
|
errors,
|
|
loading,
|
|
};
|
|
};
|
|
|
|
export default useTagTypesApi;
|
|
```
|