'use strict';
const ManagerController = require('./manager.js');
/**
 * [文章分类管理控制器]
 * @type {[type]}
 */
module.exports = class ArticlesCategoryController extends ManagerController {
	/**
	 * [useModel 使用模型]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	get useModel() {
		let that = this;
		return that.app.model.ArticlesCategory;
	}
	/**
	 * [createValidate 分类添加验证器]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	get createValidate() {
		let that = this;
		return {
			category_name:that.ctx.rules.name('分类名称').required().notEmpty().trim().maxLength(200),
			category_desc:that.ctx.rules.default('').required(),
			category_image:that.ctx.rules.default('').required(),
			pid:that.ctx.rules.default(0).number(),
			category_sort:that.ctx.rules.default(99).required().number(),
			category_status:that.ctx.rules.default(1).required().number(),
			category_level:that.ctx.rules.default(1).number().extend(async (field,value,row) => {
				if(row.pid > 0) {
					let info = await that.useModel.findOne({where:{category_id:row.pid},attributes:['category_level'],raw:true});
					if(!info) return '上级分类不存在,请检查';
					row[field] = (info.category_level+1);
				}
			}),
			category_recommend:that.ctx.rules.default(0).number(),
			admin_id:that.ctx.rules.default(that.service.manager.ActionAdminUserId()).number(),
			create_time:that.ctx.rules.default(that.app.szjcomo.date('Y-m-d H:i:s')).required()
		};
	}
	/**
	 * [deleteValidate 删除文件分类验证器]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	get deleteValidate() {
		let that = this;
		return {
			category_id:that.ctx.rules.name('文章分类ID').required().number().extend(async (field,value,row) => {
				let info = await that.useModel.findOne({where:{pid:value},attributes:['category_id']});
				if(info) return '当前分类下还有子分类,无法删除';
				let articleInfo = await that.app.model.Articles.findOne({where:{category_id:value},attributes:['category_id']});
				if(articleInfo) return '当前分类下还有文章,无法删除';
			})
		};
	}

	/**
	 * [select 查询文章分类列表]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	async select() {
		let that = this;
		try {
			let result = await that.service.articles.getArticlesCategoryAll({order:[['category_id','asc'],['category_sort','asc']]});
			return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS',result,false));
		} catch(err) {
			return that.ctx.appJson(that.app.szjcomo.appResult(err.message));
		}
	}
	/**
	 * [update 文章分类更新]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	async update() {
		let that = this;
		try {
			let data = await that.ctx.validate(that.pkValidate,await that.ctx.anyParse());
			if(data.hasOwnProperty('pid')) {
				if(data.pid == 0) {
					data.category_level = 1;
				} else {
					let info = await that.useModel.findOne({where:{category_id:data.pid},attributes:['category_level'],raw:true});
					data.category_level = (info.category_level + 1);					
				}
			}
			let updateBean = that.app.comoBean.instance(data,{where:{category_id:data.category_id},fields:Object.keys(data)});
			let result = await that.service.manager.update(updateBean,that.useModel,'文章分类更新失败,请重试');
			return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS',result,false));
		} catch(err) {
			return that.ctx.appJson(that.app.szjcomo.appResult(err.message));
		}
	}
	/**
	 * [delete 删除文章分类]
	 * @author    szjcomo
	 * @date   		2021-01-27
	 * @return {[type]}     [description]
	 */
	async delete() {
		let that = this;
		try {
			let data = await that.ctx.validate(that.deleteValidate,await that.ctx.anyParse());
			let deleteBean = that.app.comoBean.instance(data,{where:{category_id:data.category_id}});
			let result = await that.service.manager.delete(deleteBean,that.useModel,'文章分类删除失败,请重试');
			return that.ctx.appJson(that.app.szjcomo.appResult('SUCCESS',result,false));
		} catch(err) {
			return that.ctx.appJson(that.app.szjcomo.appResult(err.message));
		}
	}
}