/* tslint:disable */
/* eslint-disable */
/**
 * Indexea OpenAPI
 * 这是 Indexea 搜索服务平台的 OpenAPI，用于描述平台的所有接口信息，你可以通过这个页面来了解和在线验证平台的所有接口信息。  ### Errors  本 API 使用标准的 HTTP 状态码来指示操作成功或者失败，如果失败将会在 body 中以 JSON 格式提供详细的错误信息，如下所示：  ``` {   \"error\": 404,   \"message\": \"page not found\" } ``` 
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: indexea.com@gmail.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  RecommendBean,
} from '../models';
import {
    RecommendBeanFromJSON,
    RecommendBeanToJSON,
} from '../models';

export interface RecommendClickRequest {
    ident: string;
    actionId: string;
    docId: string;
    xToken?: string;
    userid?: string;
}

export interface RecommendCreateRequest {
    app: string;
    recommendBean: RecommendBean;
}

export interface RecommendDeleteRequest {
    app: string;
    id: number;
}

export interface RecommendDetailRequest {
    ident: string;
    xToken?: string;
}

export interface RecommendFetchRequest {
    ident: string;
    xToken?: string;
    userid?: string;
    condition?: { [key: string]: string; };
    from?: number;
    size?: number;
}

export interface RecommendListRequest {
    app: string;
}

export interface RecommendUpdateRequest {
    app: string;
    recommendBean: RecommendBean;
}

/**
 * 
 */
export class RecommendApi extends runtime.BaseAPI {

    /**
     * 该接口主要用于记录用户对推荐结果的点击行为
     * 推荐结果点击行为收集
     */
    async recommendClickRaw(requestParameters: RecommendClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.ident === null || requestParameters.ident === undefined) {
            throw new runtime.RequiredError('ident','Required parameter requestParameters.ident was null or undefined when calling recommendClick.');
        }

        if (requestParameters.actionId === null || requestParameters.actionId === undefined) {
            throw new runtime.RequiredError('actionId','Required parameter requestParameters.actionId was null or undefined when calling recommendClick.');
        }

        if (requestParameters.docId === null || requestParameters.docId === undefined) {
            throw new runtime.RequiredError('docId','Required parameter requestParameters.docId was null or undefined when calling recommendClick.');
        }

        const queryParameters: any = {};

        if (requestParameters.actionId !== undefined) {
            queryParameters['action_id'] = requestParameters.actionId;
        }

        if (requestParameters.docId !== undefined) {
            queryParameters['doc_id'] = requestParameters.docId;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/recommend/{ident}/click`.replace(`{${"ident"}}`, encodeURIComponent(String(requestParameters.ident))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 该接口主要用于记录用户对推荐结果的点击行为
     * 推荐结果点击行为收集
     */
    async recommendClick(requestParameters: RecommendClickRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.recommendClickRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 创建新的推荐
     */
    async recommendCreateRaw(requestParameters: RecommendCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<RecommendBean>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling recommendCreate.');
        }

        if (requestParameters.recommendBean === null || requestParameters.recommendBean === undefined) {
            throw new runtime.RequiredError('recommendBean','Required parameter requestParameters.recommendBean was null or undefined when calling recommendCreate.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/recommends/{app}`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: RecommendBeanToJSON(requestParameters.recommendBean),
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => RecommendBeanFromJSON(jsonValue));
    }

    /**
     * 创建新的推荐
     */
    async recommendCreate(requestParameters: RecommendCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<RecommendBean> {
        const response = await this.recommendCreateRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 删除推荐
     */
    async recommendDeleteRaw(requestParameters: RecommendDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling recommendDelete.');
        }

        if (requestParameters.id === null || requestParameters.id === undefined) {
            throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling recommendDelete.');
        }

        const queryParameters: any = {};

        if (requestParameters.id !== undefined) {
            queryParameters['id'] = requestParameters.id;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/recommends/{app}`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 删除推荐
     */
    async recommendDelete(requestParameters: RecommendDeleteRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.recommendDeleteRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取推荐的记录列表
     */
    async recommendDetailRaw(requestParameters: RecommendDetailRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<RecommendBean>> {
        if (requestParameters.ident === null || requestParameters.ident === undefined) {
            throw new runtime.RequiredError('ident','Required parameter requestParameters.ident was null or undefined when calling recommendDetail.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        const response = await this.request({
            path: `/recommend/{ident}`.replace(`{${"ident"}}`, encodeURIComponent(String(requestParameters.ident))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => RecommendBeanFromJSON(jsonValue));
    }

    /**
     * 获取推荐的记录列表
     */
    async recommendDetail(requestParameters: RecommendDetailRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<RecommendBean> {
        const response = await this.recommendDetailRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取推荐的记录列表
     */
    async recommendFetchRaw(requestParameters: RecommendFetchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters.ident === null || requestParameters.ident === undefined) {
            throw new runtime.RequiredError('ident','Required parameter requestParameters.ident was null or undefined when calling recommendFetch.');
        }

        const queryParameters: any = {};

        if (requestParameters.condition !== undefined) {
            queryParameters['condition'] = requestParameters.condition;
        }

        if (requestParameters.from !== undefined) {
            queryParameters['from'] = requestParameters.from;
        }

        if (requestParameters.size !== undefined) {
            queryParameters['size'] = requestParameters.size;
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (requestParameters.xToken !== undefined && requestParameters.xToken !== null) {
            headerParameters['x-token'] = String(requestParameters.xToken);
        }

        if (requestParameters.userid !== undefined && requestParameters.userid !== null) {
            headerParameters['userid'] = String(requestParameters.userid);
        }

        const response = await this.request({
            path: `/recommend/{ident}`.replace(`{${"ident"}}`, encodeURIComponent(String(requestParameters.ident))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * 获取推荐的记录列表
     */
    async recommendFetch(requestParameters: RecommendFetchRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.recommendFetchRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 获取已定义的推荐列表
     */
    async recommendListRaw(requestParameters: RecommendListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<RecommendBean>>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling recommendList.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/recommends/{app}`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(RecommendBeanFromJSON));
    }

    /**
     * 获取已定义的推荐列表
     */
    async recommendList(requestParameters: RecommendListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<RecommendBean>> {
        const response = await this.recommendListRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * 更新推荐信息
     */
    async recommendUpdateRaw(requestParameters: RecommendUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<boolean>> {
        if (requestParameters.app === null || requestParameters.app === undefined) {
            throw new runtime.RequiredError('app','Required parameter requestParameters.app was null or undefined when calling recommendUpdate.');
        }

        if (requestParameters.recommendBean === null || requestParameters.recommendBean === undefined) {
            throw new runtime.RequiredError('recommendBean','Required parameter requestParameters.recommendBean was null or undefined when calling recommendUpdate.');
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("TokenAuth", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/recommends/{app}`.replace(`{${"app"}}`, encodeURIComponent(String(requestParameters.app))),
            method: 'PUT',
            headers: headerParameters,
            query: queryParameters,
            body: RecommendBeanToJSON(requestParameters.recommendBean),
        }, initOverrides);

        return new runtime.TextApiResponse(response) as any;
    }

    /**
     * 更新推荐信息
     */
    async recommendUpdate(requestParameters: RecommendUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<boolean> {
        const response = await this.recommendUpdateRaw(requestParameters, initOverrides);
        return await response.value();
    }

}
