Skip to content

Commit

Permalink
feat: add ApiService
Browse files Browse the repository at this point in the history
  • Loading branch information
SimpleCodeCX committed Nov 11, 2019
1 parent 2c6d60d commit 05fbb17
Show file tree
Hide file tree
Showing 28 changed files with 693 additions and 58 deletions.
34 changes: 34 additions & 0 deletions src/app/core/bll/common/handleData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
export function getCount(dbData: any) {
if (dbData === '') {
return '';
}
return parseInt(dbData[0]['count'], 10);
}

export function getFirstRow(dbData: any) {
if (dbData === '') {
return '';
}
return dbData[0];
}

export function getFoundRowsNum(dbData: any) {
if (dbData === '') {
return '';
}
return dbData[0]['num'];
}

// 数据库增删改的操作结果
export function getCUDResult(result: any) {
return {
fieldCount: result['fieldCount'],
affectedRows: result['affectedRows'],
insertId: result['insertId'],
serverStatus: result['serverStatus'],
warningCount: result['warningCount'],
message: result['message'],
protocol41: result['protocol41'],
changedRows: result['changedRows']
};
}
2 changes: 2 additions & 0 deletions src/app/core/bll/common/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import * as handleData from './handleData';
export { handleData };
23 changes: 20 additions & 3 deletions src/app/core/bll/v1/user_bll.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,39 @@
import { userDal } from '@dal/v1';
import { UserResModel, UserDbModel } from '@model/v1';
import { handleData } from '../common';

/**
* bll 层主要对 dal 层进行调用,并且格式化数据,并被 controller 层调用
*/

export async function insert(dbModel?: UserDbModel) {
const result = await userDal.insert(dbModel);
return handleData.getCUDResult(result);
}

export async function getUserList(dbModel?: UserDbModel, search?: string, pageNo?: number, pageSize?: number) {
const userList: Array<UserDbModel> = await userDal.getUserList(dbModel, search, pageNo, pageSize);
return formatDbList(userList);
}

export async function getByName(userName) {
const users: Array<UserDbModel> = await userDal.getByName(userName);
return formatDb(users[0]);
export async function getUserListCount(dbModel?: UserDbModel, search?: string) {
const result = await userDal.getUserListCount(dbModel, search);
return result[0]['count'];
}

export async function updateById(userId: number, dbModel: UserDbModel) {
const result = await userDal.updateById(userId, dbModel);
return handleData.getCUDResult(result);
}

export async function deleteById(userId: number) {
const result = await userDal.deleteById(userId);
return handleData.getCUDResult(result);
}

export function formatDb(db: UserDbModel): UserResModel {
const user: UserResModel = {
userId: db.user_id,
userName: db.user_name,
age: db.age,
hobby: db.hobby
Expand Down
163 changes: 151 additions & 12 deletions src/app/core/controller/v1/user_controller.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,175 @@
import { userBll } from '@bll/v1';
import { UserGetQueryReqModel, UserDbModel } from '@model/v1';
import { apiServerInstance } from '../../../services';
import { common } from '@lib';
import {
UserDbModel,
UserGetQueryReqModel,
UserPostJsonReqModel,
UserDeletePathReqModel,
UserByNameGetPathReqModel,
UserResModel,
UserDeleteResModel,
UserPutJsonReqModel,
UserUpdateResModel
} from '@model/v1';

/**
* controller 这一层用来存放每个 接口 的相关逻辑
*/

/**
* 添加用户
*/
export async function postUser(ctx) {
// 获取客户端参数
const param: UserPostJsonReqModel = {
user_name: ctx.request.body.user_name,
age: common.strToNumber(ctx.request.body.age),
hobby: ctx.request.body.hobby
};

// 验证参数
const params = [param.user_name];
if (common.checkParamsIsNullOrError(params)) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100150 });
return;
}

// 判断该用户名是否已经存在
const users = await userBll.getUserList({ user_name: param.user_name });
if (users.length > 0) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100002 });
return;
}

// 将数据插入数据库
const model: UserDbModel = param;
const insertResult = await userBll.insert(model);

// 响应数据
model.user_id = insertResult.insertId;
const resModel: UserResModel = userBll.formatDb(model);
ctx.body = apiServerInstance.normalResponse.format<UserResModel>({ data: resModel });
}

/**
* 获取用户列表
*/
export async function getUserList(ctx) {
// 获取客户端参数
const query = ctx.request.query;
const reqParam: UserGetQueryReqModel = {
const param: UserGetQueryReqModel = {
user_name: query.user_name,
age: query.age ? parseInt(query.age, 10) : null,
page_no: query.page_no ? parseInt(query.page_no, 10) : null,
page_size: query.page_size ? parseInt(query.page_size, 10) : null,
age: common.strToNumber(query.age),
page_no: common.strToNumber(query.page_no),
page_size: common.strToNumber(query.page_size),
search: query.search // 关键词模糊查询
};

// pick model
const dbModel: UserDbModel = {
user_name: reqParam.user_name,
age: reqParam.age,
user_name: param.user_name,
age: param.age,
};
const userList = await userBll.getUserList(dbModel, reqParam.search, reqParam.page_no, reqParam.page_size);
ctx.body = userList;

// 获取数据
const userList = await userBll.getUserList(dbModel, param.search, param.page_no, param.page_size);
const totalCount = await userBll.getUserListCount(dbModel, param.search);

// 响应数据
ctx.body = apiServerInstance.normalResponse.format<Array<UserResModel>>({
data: userList, pageNo: param.page_no, pageSize: param.page_size, totalCount
});
}

/**
* 根据用户名获取某一个用户
*/
export async function getByName(ctx) {
const userName = ctx.params.user_name;
const user = await userBll.getByName(userName);
ctx.body = user;
// 获取客户端参数
const param: UserByNameGetPathReqModel = {
user_name: ctx.params.user_name
};

// 验证参数
const params = [param.user_name];
if (common.checkParamsIsNullOrError(params)) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100150 });
return;
}

// 查询数据
const users = await userBll.getUserList({ user_name: param.user_name });

// 响应数据
ctx.body = apiServerInstance.normalResponse.format<UserResModel>({
data: users[0]
});
}

export async function putUser(ctx) {
// 获取客户端参数
const userId = common.strToNumber(ctx.params.user_id);
const param: UserPutJsonReqModel = {
user_name: ctx.request.body.user_name,
age: common.strToNumber(ctx.request.body.age),
hobby: ctx.request.body.hobby
};

// 验证参数
const params = [userId];
if (common.checkParamsIsNullOrError(params)) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100150 });
return;
}

if (common.checkObjIsAllNull(param)) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100150 });
return;
}

// 判断该用户名是否已经存在
const users = await userBll.getUserList({ user_name: param.user_name });
if (users.length > 0) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100002 });
return;
}

// 更新用户信息
const model: UserDbModel = param;
await userBll.updateById(userId, model);

// 响应
ctx.body = apiServerInstance.normalResponse.format<UserUpdateResModel>({
data: { isUpdateSuccess: true }
});
}

/**
* 删除某一个用户
*/
export async function deleteById(ctx) {
// 获取客户端参数
const param: UserDeletePathReqModel = {
user_id: ctx.params.user_id
};

// 验证参数
const params = [param.user_id];
if (common.checkParamsIsNullOrError(params)) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100150 });
return;
}

// 删除用户
const result = await userBll.deleteById(param.user_id);
if (result.affectedRows < 1) {
ctx.body = apiServerInstance.errorResponse.format({ error_no: 100103 });
return;
}

// 响应
ctx.body = apiServerInstance.normalResponse.format<UserDeleteResModel>({
data: { isDeleteSuccess: true }
});
}
4 changes: 3 additions & 1 deletion src/app/core/dal/common/dalHelper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { apiServerInstance } from '../../../services/apiServiceInstance';

/**
* [
* {
Expand Down Expand Up @@ -147,7 +149,7 @@ export function updateByModel(obj) {
}
});
if (updateSql.length === 0) {
throw new Error('update error');
apiServerInstance.throwApiErrorResponse(100151);
}
return {
sql: updateSql.join(','),
Expand Down
4 changes: 2 additions & 2 deletions src/app/core/dal/common/dbHelper.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as mysql from 'mysql';
import dbConnectionString from './mariadb.conf';
import { apiServerInstance } from '../../../services/apiServiceInstance';
import { normal } from '../../../lib/logger';

const logger = normal();
Expand Down Expand Up @@ -42,8 +43,7 @@ async function callExeScript(sqlType, sql, params) {
try {
result = await exeScript(sqlType, sql, params);
} catch (err) {
logger.error(err);
throw new Error(err);
apiServerInstance.throwApiErrorResponse(100100);
}
return result;
}
Expand Down
38 changes: 35 additions & 3 deletions src/app/core/dal/v1/user_dal.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
import { dbHelper, sqlHelper, dalHelper } from '../common';
import { UserDbModel } from '@model/v1';

export async function insert(dbModel: UserDbModel) {
const insertModel = dalHelper.insertByModel(dbModel);
const modelSql = insertModel.sql;
const modelParams = insertModel.params && Array.isArray(insertModel.params) ? insertModel.params : [];
const sql = `insert into user ${modelSql}`;
const sqlParams = [...modelParams];
return dbHelper.insert(sql, sqlParams);
}

export async function getUserList(dbModel?: UserDbModel,
search?: string, pageNo?: number, pageSize?: number): Promise<Array<UserDbModel>> {
const sqlWhere = getCommonWhere(dbModel, search);
Expand All @@ -13,12 +22,35 @@ export async function getUserList(dbModel?: UserDbModel,
return dbHelper.query(sqlWithPaging, sqlParams);
}

export async function getByName(userName): Promise<Array<UserDbModel>> {
const sql = 'SELECT * FROM user where user_name=?';
const sqlParams = [userName];
export async function getUserListCount(dbModel?: UserDbModel, search?: string) {
const sqlWhere = getCommonWhere(dbModel, search);
const whereSql = sqlWhere.whereSql;
const whereParams = sqlWhere.whereParams;

const sql = `SELECT count(*) as count FROM user ${whereSql} `;
const sqlParams = [...whereParams];
return dbHelper.query(sql, sqlParams);
}

export async function updateById(userId: number, dbModel?: UserDbModel) {
const updateModel = dalHelper.updateByModel(dbModel);
const modelSql = updateModel.sql;
const modelParams = updateModel.params && Array.isArray(updateModel.params) ? updateModel.params : [];
const sql = `update user
set ${modelSql}
where user_id=?`;

const sqlParams = [...modelParams, userId];
return dbHelper.update(sql, sqlParams);
}

// 删除某个用户
export async function deleteById(userId: number) {
const sqlStr = 'DELETE FROM user WHERE user_id = ?';
const sqlParams = [userId];
return dbHelper.delete(sqlStr, sqlParams);
}

function createSearchWhereSql(search: string, tbName?: string) {
tbName = tbName ? `${tbName}.` : '';
// 关键词查询 where
Expand Down
3 changes: 3 additions & 0 deletions src/app/core/model/v1/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
export * from './request';
export * from './response';

export * from './user.db.model';
export * from './user.req.model';
export * from './user.res.model';
5 changes: 5 additions & 0 deletions src/app/core/model/v1/request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

export interface PagingParam {
page_no?: number; // 页码
page_size?: number; // 页大小
}
Loading

0 comments on commit 05fbb17

Please sign in to comment.