import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { COUNTER } from './../consts';
import { CounterModel } from './Counter';

/**
  * 接口字段接口
*/
@index({ apiId: 1 })
@index({ api: 1 })

export default class Api extends BaseModel {

    @prop({ required: true })
    apiId: number;

    @prop({ required: true })
    api: string;

    @prop({ required: true })
    name: string;

    public static async getApi(api: string, lean = true) {
        let result: ApiType = await ApiModel.findOne({ api }).select('apiId api name').lean(lean);
        return result;
    }

    public static async getAllApi(lean = true) {
        const api: ApiType[] = await ApiModel.find().sort({ apiId: 1 }).lean(lean);
        return api;
    }

    public static async createApi(api: string, name: string, lean = true) {
        const apiId = await CounterModel.getNewCounter(COUNTER.API);
        const result: ApiType = await ApiModel.findOneAndUpdate({ apiId }, { $set: { api, name } }, { upsert: true, new: true }).lean(lean);
        return result;
    }

}

export const ApiModel = getModelForClass(Api);

export interface ApiType extends Pick<DocumentType<Api>, keyof Api> { }
