Skip to content

waitingsong/egg-kmore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

334 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kmore for midway framework.

Version License Conventional Commits

Installation

npm install egg-kmore knex

# Then add one of the following:
npm install pg
npm install mssql
npm install oracle
npm install sqlite3

Configuration

Enable Plugin

Edit ${app_root}/src/config/plugin.ts:

import { EggPlugin } from 'midway'

export default {
  kmore: {
    enable: true,
    package: 'egg-kmore',
  },
} as EggPlugin

Add Configurations

/* location: ${app_root}/src/config/config.${env}.ts */

import { EggKmoreConfig, genTbListFromType, ClientOpts } from 'egg-kmore'
import { TbListModel } from '../app/user/user.model'

const master: ClientOpts = {
  knexConfig: {
    client: 'pg',
    connection: {
      host: 'localhost',
      user: 'postgres',
      password: '',
      database: 'db_ci_test',
    },
    acquireConnectionTimeout: 10000,
  },
  tables: genTbListFromType<TbListModel>(),
}

// app: default true
export const kmore: EggKmoreConfig = {
  client: master,
}


/* location: ../app/user/user.model.ts */
export interface TbListModel {
  tb_user: User
  tb_user_detail: UserDetail
}

/**
 * user info
 */
export interface UserInfo extends User, UserDetail {
}

export interface User {
  uid: number
  user_name: string
}
export interface UserDetail {
  uid: number
  phone: string
  email: string
}

export interface GetUserOpts {
  uid: number
}

Usage

/* location: ../app/user/user.service.ts */

import { provide, plugin } from 'midway'
import { DbModel } from 'egg-kmore'
import { GetUserOpts, UserInfo, User, TbListModel } from './user.model'

@provide()
export class UserService {

  constructor(
    @plugin('kmore') private readonly db: DbModel<TbListModel>,
  ) { }

  /**
   * Read user info
   */
  public async getUser(options: GetUserOpts): Promise<UserInfo> {
    const { rb, tables: t } = this.db

    const row: UserInfo = await rb.tb_user()
      .innerJoin(
        t.tb_user_detail,
        `${t.tb_user}.uid`,
        `${t.tb_user_detail}.uid`,
      )
      .select('*')
      .where(`${t.tb_user}.uid`, options.uid)
      .then(rows => rows[0])

    return row
  }

  /**
   * Read user_name
   */
  public async getUserName(options: GetUserOpts): Promise<User['user_name']> {
    const { rb } = this.db

    const name = await rb.tb_user()
      .select('user_name')
      .where('uid', options.uid)
      .then(rows => rows[0] ? rows[0].user_name : '')

    return name
  }

}

Generating source files pre build

The files generated automatically under typescript environment for debug or test

cd ${app_root}
kmore gen --path ./src

// then you could build the project
npm run build

License

MIT

Languages

Packages

No packages published