Skip to content

模型

模型可以定义数据由哪些字段及类型值组成,然后通过何种数据源去访问数据。

定义模型

创建一个基本服务,需要使用类和Model模型类装饰器。Model装饰器会将类定义为模型类。我们创建一个股票数据的模型,文件名为gpsj.model.ts,路径:src/worker/domains/ag/gpsj/gpsj.model.ts,示例代码:

typescript
import { BaseModel, Model } from '@istock/iswork';

@Model('gpsj')
export class GpsjModel extends BaseModel {
  name!: string;
  code!: string;
  price!: number;
}

然后在src/worker/datasource-register.ts中注册使用数据源,为了简单演示,我们将使用memoryDB内存数据源。示例代码:

typescript
import { DataSource } from '@istock/iswork';
// ...
import { GpsjModel } from '@domains/ag/gpsj/gpsj.model'; 
// ...
export const memoryDataSourceModels = [
  // ...
  GpsjModel, 
  // ...
];

export const inintDataSource = async () => {
  // ...
  const memoryDataSource = new DataSource<'memoryDB'>({
    name: 'memoryDB',
    type: 'memoryDB',
    dbName: 'istock',
    entities: memoryDataSourceModels,
  });
  await memoryDataSource.initialize();
};

gpsj.service.ts中使用,示例代码:

typescript
import { Injectable } from '@istock/iswork'; 
import { Injectable, type TModelData } from '@istock/iswork'; 
import { GpsjModel } from './gpsj.model'; 
@Injectable()
export class GpsjService {
  async queryStock(code: string) {
    return { name: '股票名称', code, price: 888 }; 
    return await GpsjModel.query<TModelData<GpsjModel>>({

      filter: { field: 'code', operator: 'eq', value: code }, 
    }); 
  }
}

模型方法

详细请查看@istock/iswork文档

数据源

目前模型支持indexedDBfetchmemoryDB三种数据源,详细使用如src/worker/datasource-register.ts文件下代码:

typescript
// indexedDB
const indexedDataSource = new DataSource<'indexedDB'>({
  name: 'indexedDB',
  type: 'indexedDB',
  entities: indexedDataSourceModels,
  dbName: 'istock',
  version: 7,
});
await indexedDataSource.initialize();
// fetch
const fetchDataSource = new DataSource<'fetch'>({
  name: 'fetch',
  type: 'fetch',
  entities: fetchDataSourceModels,
  prefixUrl: import.meta.env.VITE_ISTOCK_API ?? '/api',
});
await fetchDataSource.initialize();
// memoryDB
const memoryDataSource = new DataSource<'memoryDB'>({
  name: 'memoryDB',
  type: 'memoryDB',
  dbName: 'istock',
  entities: memoryDataSourceModels,
});
await memoryDataSource.initialize();

indexedDB数据源接受TDataSourceIndexedDBOptions类型参数,fetch数据源接受TDataSourceFetchOptions类型参数,memoryDB数据源接受TDataSourceMemoryDBOptions类型参数,相关参数介绍:

typescript
import type { TModelType, TFetchWrapOptions } from '../types';

export type TDataSourceType = 'indexedDB' | 'fetch' | 'memoryDB';

export type TDataSourceCommonOptions = {
  name: string; // 数据源名
  type: TDataSourceType; // 数据源类型
  entities: TModelType[]; // 数据源模型
  dbName?: string; // 数据库名
  version?: number | string; // 数据源版本
};

export type TDataSourceIndexedDBOptions = {
  dbName: string;
  version: number;
} & TDataSourceCommonOptions;

export type TDataSourceFetchOptions = TFetchWrapOptions & TDataSourceCommonOptions;

export type TDataSourceMemoryDBOptions = {
  dbName: string;
} & TDataSourceCommonOptions;

export type TDataSourceAllOptions = {
  indexedDB: TDataSourceIndexedDBOptions;
  fetch: TDataSourceFetchOptions;
  memoryDB: TDataSourceMemoryDBOptions;
};

装饰器

Model

Model装饰器会将类定义为模型类。它接受TDecoratorModelOptions类型参数或者name模型名+TDecoratorModelOptions类型参数,具体参数介绍如下:

typescript
export type TDecoratorModelOptions = {
  name?: string; // 模型名
};

Column和PrimaryColumn

ColumnPrimaryColumn是针对模型字段使用的装饰器,主要用来定义字段的一些配置信息方便在创建数据库表时使用,所有它一般是在indexedDB数据源的模型上使用。 Column接受TDecoratorColumnOptions类型参数,PrimaryColumn接受TDecoratorPrimaryColumnOptions类型参数。具体使用及参数介绍如下:

typescript
import { BaseModel, Column, Index, Model, PrimaryColumn } from '@istock/iswork';

@Model('kzzsd_result')
export class KzzsdResultModel extends BaseModel {
  @Index() // 定义索引
  @PrimaryColumn() // 定义主键
  id!: string;

  // 转债代码
  @Index()
  @Column() // 普通列
  bond_id!: string;

  // 时间
  @Column()
  updateDate!: Date;

  @Column()
  rowStatus!: number;
}
typescript
export type TDecoratorColumnOptions = {
  name?: string; // 字段名
  type?: string; // 数据类型
  primary?: boolean; // 是否是主键
  unique?: boolean; // 是否数据唯一
  autoIncrement?: boolean; // 是否自增
};
export type TDecoratorPrimaryColumnOptions = TDecoratorColumnOptions;

Index

Index是针对indexedDB数据源的模型字段使用的装饰器,它的作用是用来定义该字段需要创建索引。它可以不接受参数或接受indexName索引名为参数。

免责声明:本站所有信息、数据、软件仅供学习研究,都不构成投资建议,本站不承担由此导致的任何责任。