forked from mengyxu/noob-components
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.2 KiB
110 lines
2.2 KiB
|
3 months ago
|
# Config API
|
||
|
|
|
||
|
|
> `plugs/api/config.ts` - System configuration management.
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
System configuration API with list and update operations, plus single value retrieval.
|
||
|
|
|
||
|
|
## Endpoint
|
||
|
|
|
||
|
|
- **Root**: `config`
|
||
|
|
|
||
|
|
## Exports
|
||
|
|
|
||
|
|
| Function | HTTP | Description |
|
||
|
|
|----------|------|-------------|
|
||
|
|
| `list` | GET | List config entries with filter |
|
||
|
|
| `set` | PUT | Update existing config entry |
|
||
|
|
| `getValue` | GET | Get config value by key |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Functions
|
||
|
|
|
||
|
|
### list
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export const list = (example) => {
|
||
|
|
return queryPage(root, example);
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Uses**: `queryPage` from base
|
||
|
|
- **URL**: `config`
|
||
|
|
- **Parameters**: `example` - Filter criteria (optional)
|
||
|
|
- **Returns**: Paginated result
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### set
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export const set = (config) => {
|
||
|
|
return update(root, config);
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Uses**: `update` from base (PUT)
|
||
|
|
- **Parameters**: `config` - Config object to update
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### getValue
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
export const getValue = (key) => {
|
||
|
|
return new Promise((resolve, reject) => {
|
||
|
|
get(root + '/' + key, null, true, true).then(
|
||
|
|
(rsp: any) => {
|
||
|
|
resolve(rsp);
|
||
|
|
},
|
||
|
|
(err) => {
|
||
|
|
resolve(null);
|
||
|
|
}
|
||
|
|
);
|
||
|
|
});
|
||
|
|
};
|
||
|
|
```
|
||
|
|
|
||
|
|
- **URL**: `config/{key}`
|
||
|
|
- **Parameters**: `key` - Configuration key
|
||
|
|
- **noMsg**: `true` - Suppress success message
|
||
|
|
- **noLoading**: `true` - Suppress loading indicator
|
||
|
|
- **Returns**: `null` on error (not `false` or `{}`)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Usage Example
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { config } from 'plugs/api';
|
||
|
|
|
||
|
|
// List all configs
|
||
|
|
const configs = await config.list();
|
||
|
|
|
||
|
|
// List filtered configs
|
||
|
|
const dbConfigs = await config.list({ category: 'database' });
|
||
|
|
|
||
|
|
// Update config
|
||
|
|
await config.set({ key: 'app.name', value: 'My App', id: 1 });
|
||
|
|
|
||
|
|
// Get single config value
|
||
|
|
const appName = await config.getValue('app.name');
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Pattern Notes
|
||
|
|
|
||
|
|
- No `add` function - configs are typically only updated, not created
|
||
|
|
- `getValue` returns `null` on error (different from other APIs that return `false`)
|
||
|
|
- `getValue` uses custom implementation instead of `getById` from base
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Anti-Patterns
|
||
|
|
|
||
|
|
1. **Missing `add` function** - Inconsistent with other CRUD APIs
|
||
|
|
2. **Custom `getValue` instead of `getById`** - Could use base's `getById` with URL template
|