Browse Source

chore: update README.md

e22m4u 2 years ago
parent
commit
b83af27cd1
1 changed files with 17 additions and 216 deletions
  1. 17 216
      README.md

+ 17 - 216
README.md

@@ -354,99 +354,30 @@ console.log(result);
 // }
 ```
 
-## Пример
+### Расширение
 
-Создаем модель `user`
-
-```js
-schema.defineModel({
-  name: 'user', // название модели
-  adapter: 'myMemory', // выбранный источник
-  properties: { // поля модели
-    name: 'string',
-    age: 'number',
-  },
-});
-```
-
-Получаем репозиторий модели `user`
-
-```js
-const userRep = schema.getRepository('user');
-```
-
-Добавляем новую запись методом `create`
-
-```js
-const fedor = await userRep.create({
-  name: 'Fedor',
-  age: 24,
-});
-
-console.log(fedor);
-// {
-//   id: 1,
-//   name: 'Fedor',
-//   age: 24,
-// }
-```
-
-Изменяем данные методом `patchById`
-
-```js
-const result = await userRep.patchById(
-  fedor.id,
-  {age: 30},
-);
-
-console.log(result);
-// {
-//   id: 1,
-//   name: 'Fedor',
-//   age: 30,
-// }
-```
-
-Удаляем по идентификатору методом `deleteById`
-
-```js
-await userRep.deleteById(fedor.id); // true
-```
-
-## Репозиторий
-
-Выполняет операции чтения и записи определенной коллекции.
-
-Методы:
-
-- `create(data, filter = undefined)`
-- `replaceById(id, data, filter = undefined)`
-- `replaceOrCreate(data, filter = undefined)`
-- `patch(data, where = undefined)`
-- `patchById(id, data, filter = undefined)`
-- `find(filter = undefined)`
-- `findOne(filter = undefined)`
-- `findById(id, filter = undefined)`
-- `delete(where = undefined)`
-- `deleteById(id)`
-- `exists(id)`
-- `count(where = undefined)`
-
-Получение репозитория модели:
+При использовании метода `getRepository` выполняется проверка на
+наличие существующего экземпляра репозитория для нужной модели.
+При первичном запросе создается новый экземпляр, который будет
+сохранен для повторных обращений к методу.
 
 ```js
 import {Schema} from '@e22m4u/js-repository';
+import {Repository} from '@e22m4u/js-repository';
 
-const schema = new Schema();
-// создаем источник
-schema.defineDatasource({name: 'myDatasource', adapter: 'memory'});
-// создаем модель
-schema.defineModel({name: 'myModel', datasource: 'myDatasource'});
-// получаем репозиторий по названию модели
-const repositorty = schema.getRepository('myModel');
+// const schema = new Schema();
+// schema.defineDatasource ...
+// schema.defineModel ...
+
+const rep1 = schema.getRepository('myModel');
+const rep2 = schema.getRepository('myModel');
+console.log(rep1 === rep2); // true
 ```
 
-Переопределение конструктора:
+Если требуется изменить или расширить поведение репозитория, то
+перед его созданием можно переопределить его конструктор методом
+`setRepositoryCtor`. После чего, все создаваемые репозитории будут
+использовать уже пользовательский конструктор вместо стандартного.
 
 ```js
 import {Schema} from '@e22m4u/js-repository';
@@ -515,136 +446,6 @@ schema.get(RepositoryRegistry).setRepositoryCtor(MyRepository);
   `include: ['foo', 'bar']` включение `foo` и `bar`  
   `include: {foo: 'bar'}` включение вложенной связи `foo`
 
-## Источник данных
-
-Определяет настройки и способ подключения к базе.
-
-Параметры:
-
-- `name: string` название нового источника
-- `adapter: string` выбранный адаптер базы данных
-
-Пример:
-
-```js
-schema.defineDatasource({
-  name: 'myDatasource',
-  adapter: 'memory',
-});
-```
-
-Адаптер может иметь параметры, которые передаются
-при определении источника.
-
-Пример:
-
-```js
-schema.defineDatasource({
-  name: 'myDatasource',
-  adapter: 'mongodb',
-  // параметры адаптера:
-  host: '127.0.0.1',
-  port: 27017,
-});
-```
-
-## Модель
-
-Описывает набор полей и связей к другим моделям.
-
-Параметры:
-
-- `name: string` название новой модели
-- `datasource: string` выбранный источник данных
-- `properties: object` определения полей модели
-- `relations: object` определения связей модели
-
-Пример:
-
-```js
-schema.defineModel({
-  name: 'myModel',
-  datasource: 'myDatasource',
-  properties: {...}, // см. ниже
-  relations: {...}, // см. ниже
-});
-```
-
-## Поля
-
-Параметр `properties` описывает набор полей и их настройки.
-
-Типы:
-
-- `string`  
-- `number`  
-- `boolean`  
-- `array`  
-- `object`  
-- `any`  
-
-Пример:
-
-```js
-schema.defineModel({
-  // ...
-  properties: {
-    prop1: 'string',
-    prop2: 'number',
-    prop3: 'boolean',
-    prop4: 'array',
-    prop5: 'object',
-    prop6: 'any',
-  },
-});
-```
-
-Расширенные параметры:
-
-- `type: string` тип хранимого значения
-- `itemType: string` тип элемента массива (для `type: 'array'`)
-- `model: string` модель объекта (для `type: 'object'`)
-- `primaryKey: boolean` объявить поле первичным ключом 
-- `columnName: string` переопределение названия колонки
-- `columnType: string` тип колонки (определяется адаптером)
-- `required: boolean` объявить поле обязательным
-- `default: any` значение по умолчанию для `undefined`
-
-Пример:
-
-```js
-schema.defineModel({
-  // ...
-  properties: {
-    prop1: {
-      type: 'string',
-      primaryKey: true,
-    },
-    prop2: {
-      type: 'boolean',
-      required: true,
-    },
-    prop3: {
-      type: 'number',
-      default: 100,
-    },
-    prop3: {
-      type: 'string',
-      // фабричное значение
-      default: () => new Date().toISOString(),
-    },
-    prop4: {
-      type: 'array',
-      itemType: 'string',
-    },
-    prop5: {
-      type: 'object',
-      model: 'objectModel',
-    },
-  },
-});
-```
-
 ## Связи
 
 Параметр `relations` описывает набор связей к другим моделям.