Skip to content

API: Модели

Документация API для работы с моделями данных.

Создание модели

typescript
const Model = kodzero.createModel<T, M>(options)

Типовые параметры

ПараметрОписание
TИнтерфейс данных. Должен содержать _id: string | null
MИнтерфейс кастомных методов (опционально)

Параметры options

ПараметрТипОбязательныйОписание
collectionstringНазвание коллекции
schemaobjectСхема валидации

Статические методы

Model.get(id)

Получает документ по ID и возвращает экземпляр модели.

typescript
static get(id: string): Promise<ModelInstance<T, M>>
ПараметрТипОписание
idstringID документа

Возвращает: Экземпляр модели с данными.

typescript
const user = await User.get('user_id')
user.set('name', 'Новое имя')
await user.save()

Model.find(id)

Получает документ по ID и возвращает простой объект.

typescript
static find(id: string): Promise<T>

Возвращает: Объект с данными документа.

typescript
const userData = await User.find('user_id')
console.log(userData.name)

Model.findMany(options?)

Получает список документов.

typescript
static findMany(options?: FindManyOptions): Promise<T[]>

FindManyOptions

ПараметрТипОписание
pagenumberНомер страницы
perPagenumberДокументов на страницу
searchstringПоисковый запрос
sortstringСортировка (префикс - для DESC)
fieldsstring[]Поля для возврата
typescript
const users = await User.findMany({
  page: 1,
  perPage: 10,
  sort: '-createdAt'
})

Model.findManyPaginated(options?, page?, perPage?)

Получает список с информацией о пагинации.

typescript
static findManyPaginated(
  options?: FindManyOptions | {},
  page?: number,
  perPage?: number
): Promise<PaginatedResult<T>>

Возвращает: Объект PaginatedResult. См. API: Пагинация.

typescript
const result = await User.findManyPaginated({}, 1, 25)
console.log(result.data)        // массив документов
console.log(result.state.total) // всего документов

Model.create(data)

Создаёт новый документ.

typescript
static create(data: T): Promise<T>

Возвращает: Созданный документ с присвоенным _id.

typescript
const newUser = await User.create({
  _id: null,
  name: 'Иван',
  email: 'ivan@example.com'
})
console.log(newUser._id) // 'generated_id'

Model.createMany(records)

Создаёт несколько документов.

typescript
static createMany(records: T[]): Promise<T[]>
typescript
const users = await User.createMany([
  { _id: null, name: 'Иван', email: 'ivan@example.com' },
  { _id: null, name: 'Мария', email: 'maria@example.com' }
])

Model.update(id, data)

Обновляет документ по ID.

typescript
static update(id: string, data: Partial<T>): Promise<T>
typescript
const updated = await User.update('user_id', {
  name: 'Новое имя'
})

Model.updateMany(updates)

Обновляет несколько документов.

typescript
static updateMany(updates: Partial<T>[]): Promise<T[]>

Требуется _id

Каждый объект должен содержать _id.

typescript
const updated = await User.updateMany([
  { _id: 'id1', name: 'Имя 1' },
  { _id: 'id2', name: 'Имя 2' }
])

Model.delete(id)

Удаляет документ по ID.

typescript
static delete(id: string): Promise<boolean>
typescript
const deleted = await User.delete('user_id')
// deleted: true

Model.deleteMany(ids)

Удаляет несколько документов.

typescript
static deleteMany(ids: string[]): Promise<Record<string, boolean>>
typescript
const results = await User.deleteMany(['id1', 'id2', 'id3'])
// { 'id1': true, 'id2': true, 'id3': true }

Model.registerMethod(name, fn)

Регистрирует кастомный метод.

typescript
static registerMethod<K extends keyof M>(name: K, fn: M[K]): void
typescript
interface UserMethods {
  getFullName: () => string
}

const User = kodzero.createModel<User, UserMethods>({
  collection: 'users'
})

User.registerMethod('getFullName', function() {
  return `${this.data().firstName} ${this.data().lastName}`
})

Методы экземпляра

instance.data()

Возвращает данные модели.

typescript
data(): T
typescript
const user = new User({ _id: null, name: 'Иван' })
console.log(user.data().name) // 'Иван'

instance.set(key, value) или instance.set(data)

Устанавливает значения полей.

typescript
set(key: string, value: any): T
set(data: Record<string, any>): T
typescript
// Одно поле
user.set('name', 'Пётр')

// Несколько полей
user.set({
  name: 'Пётр',
  email: 'petr@example.com'
})

// Вложенные поля
user.set('address.city', 'Москва')

instance.save()

Сохраняет документ. Создаёт новый или обновляет существующий.

typescript
save(): Promise<T>
typescript
const user = new User({ _id: null, name: 'Иван' })
await user.save()  // создаёт документ

user.set('name', 'Пётр')
await user.save()  // обновляет документ

instance.create()

Создаёт новый документ.

typescript
create(): Promise<T>

instance.update()

Обновляет существующий документ.

typescript
update(): Promise<T>

Требуется _id

Документ должен иметь _id для обновления.


instance.delete()

Удаляет документ.

typescript
delete(): Promise<boolean>
typescript
await user.delete()

instance.validate()

Валидирует данные по схеме.

typescript
validate(): ValidationResult
typescript
interface ValidationResult {
  ok: boolean
  errors: string[]
  joinErrors: () => string
}
typescript
const result = user.validate()

if (!result.ok) {
  console.log(result.errors)       // ['name is required']
  console.log(result.joinErrors()) // 'name is required'
}

Статические свойства

СвойствоТипОписание
Model.hoststringURL бэкенда
Model.collectionstringНазвание коллекции

Свойства экземпляра

СвойствоТипОписание
instance.idstring | nullID документа
instance.modelDataTДанные модели
instance.schemaSchema | nullСхема валидации

Опубликовано под лицензией ISC.