Files
core/packages/api-client/controllers/aggregate.ts
Innei b22666694a chore: lint
Signed-off-by: Innei <tukon479@gmail.com>
2023-06-10 16:36:14 +08:00

71 lines
1.7 KiB
TypeScript

import type { IRequestAdapter } from '~/interfaces/adapter'
import type { IController } from '~/interfaces/controller'
import type { SortOrder } from '~/interfaces/options'
import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request'
import type {
AggregateRoot,
AggregateStat,
AggregateTop,
TimelineData,
TimelineType,
} from '~/models/aggregate'
import type { HTTPClient } from '../core'
import { sortOrderToNumber } from '~/utils'
import { autoBind } from '~/utils/auto-bind'
declare module '../core/client' {
interface HTTPClient<
T extends IRequestAdapter = IRequestAdapter,
ResponseWrapper = unknown,
> {
aggregate: AggregateController<ResponseWrapper>
}
}
export class AggregateController<ResponseWrapper> implements IController {
base = 'aggregate'
name = 'aggregate'
constructor(private client: HTTPClient) {
autoBind(this)
}
public get proxy(): IRequestHandler<ResponseWrapper> {
return this.client.proxy(this.base)
}
/**
* 获取聚合数据
*/
getAggregateData(): RequestProxyResult<AggregateRoot, ResponseWrapper> {
return this.proxy.get<AggregateRoot>()
}
/**
* 获取最新发布的内容
*/
getTop(size = 5) {
return this.proxy.top.get<AggregateTop>({ params: { size } })
}
getTimeline(options?: {
sort?: SortOrder
type?: TimelineType
year?: number
}) {
const { sort, type, year } = options || {}
return this.proxy.timeline.get<{ data: TimelineData }>({
params: {
sort: sort && sortOrderToNumber(sort),
type,
year,
},
})
}
/**
* 获取聚合数据统计
*/
getStat() {
return this.proxy.stat.get<AggregateStat>()
}
}