1.0.9 • Published 7 months ago

class_orm v1.0.9

Weekly downloads
-
License
ISC
Repository
-
Last release
7 months ago

Подключение replica set в MongoDB для работы транзакций:

  1. В конфиг (путь по умолчанию в Windows: C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg) добавить строчки:
    replication:
        replSetName: имя_replica_set
    В тестах используется rs0 имя replica set.
  2. Перезапустить службу:
    • Windows: net stop MongoDB && net start MongoDB
    • Linux: sudo systemctl stop mongod && sudo systemctl start mongod
  3. Подключиться к MongoDB серверу используя MongoDB Shell (для Windows скачать по ссылке на официальном сайте), пример для локальной БД с настройками по умолчанию:
    mongo --host 127.0.0.1 --port 27017
  4. Инициализировать replica set:
    rs.initiate()

После этого для переключения между обычным режимом и replica set будет достаточно 1-2 пунктов.

Тесты, запускаемые через npm test автоматически пропускают те из них, которые не подходят для текущей конфигурации.

Краткое описание классов

BaseEntity — базовый класс для работы с базой, остальные классы сущностей наследуют его. Хранит поля:

  • static entityConstructors: Map<string, any> — map конструкторов для восстановления из документа БД
  • static entityId: WeakEntityCollection — класс для хранения прокси, используемых для отслеживания изменения полей через get/set
  • onChangeCallback?: { remove: (item: BaseEntity) => void; insert: (item: BaseEntity) => void } — объект с методами вызова при изменении/удалении
  • _id: ObjectId — идентификатор экземпляра класса
  • _changedProperties: Set<string> — set изменённых полей экземпляра класса с момента создания или последней записи в БД

Методы представляют возможности по записи в базу одного/нескольких экземпляров класса (включая возможность рекурсивного сохранения всех вложенных классов), запросе одного экземпляра из базы, пополнени/очистке списка изменённых полей.


LazyPromise — класс ленивой загрузки экземпляров классов из БД. Хранит поля:

  • static promises: WeakEntityCollection — список promise ленивой загрузки всех экземпляров класса
  • promise?: Promise<T> — promise загрузки текущего экземпляра
  • _id: ObjectId — идентификатор в базе
  • collectionName: string — имя коллекции в базе

Тип export type Lazy<T extends BaseEntity> = T | LazyPromise<T> предоставляет обёртку для типа лениво загружаемых полей или полноценных экземпляров класса.


WeakEntityCollection — класс для сборки мусора тех экземпляров классов, которые более не нужны:

  • map: Map<string, WeakRef<any>> — карте текущих экземпляров классов
  • registry: FinalizationRegistry<string> — список более не нужных экземпляров классов

EntitySerializer — класс для сериализации/десериализации объектов, способен также сериализировать и восстанавливать Array/Map/Set. Поля:

  • static serializedCollections: Map<string, any[]> — хранилище уже сериализованных объектов по классам, очищается при вызове getSerializedCollections()
  • static processedEntities: Set<string> — хранилище ссылок на уже сериализованные объекты, очищается при вызове getSerializedCollections()
  • static serializationHandlers: { [key: string]: (val: any, recursively: boolean) => SerializedValue } — обработчики сериализации отдельных классов

CacheList — класс закэшированного списка заданного размера, хранит данные в комбинации Array+Map, при доступе к отдельным элементам повышает их позицию в Array, неиспользуемые автоматически сдвигаются в конец пока не удалятся.

  • cacheSize: number — максимальный размер кэша
  • indexList: WrapEntity[] — список объектов, обёрнутых во WrapItem, хранящий указатель на объект и индекс закэшированном списке
  • map: MapInterface<WrapEntity> — обёртка для Map<string, WrapEntity> с дополнительными методами для удобства работы внутри закэшированного списка

SortedList — класс сортированного списка:

  • доступна сортировка по одному полю (для полей типов, реализующих оператор сравнения) или с помощью произвольной функции
  • доступна фильтрация по Partial<T>
  • доступна выборка по интервалу (со строгими или нестрогими границами)

Поля:

  • items: T[] — сами объекты
  • compareFn: (a: T, b: T) => number — функция сравнения
  • compareKey?: MaybeBasePropertyKeys<T> — поля для фильтрации/обрезки по промежутку значений

Замена функции сортировки невозможна, для этого создаётся новый экземпляр с новой сортировкой.


Collections — класс, комбинирующий в себе произвольное количество SortedList с разными сортировками и возможностью задания автоматического удаления значений из Collections. Стандартные возможности работы с SortedList также доступны (например, обрезание списка по интервалу значений)Ж

  • indices: { [name: string]: SortedList<T> } — хранилище всех вариантов сортировки экземпляров T
  • shouldAutoUpdate: boolean — флаг автоматического вызова обновления/удаления экземпляра T из всех SortedList при соответствующих действиях над экземпляом T

DatabaseCollections — расширение Collections возможностью сохранения/загрузки содержимого из БД.


MongoDBService — класс работы с MongoDB БД и сериализуемыми коллекциями в формате Map<string, any[]> и записью сериализованных данных по кускам:

  • client: MongoClient — клиент MongoDB
  • static db: Db — конкретная база MongoDB
1.0.9

7 months ago

1.0.7

7 months ago

1.0.6

7 months ago

1.0.5

8 months ago

1.0.4

8 months ago

1.0.3

8 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago