diff --git a/src/server-extension/model/event.model.ts b/src/server-extension/model/event.model.ts new file mode 100644 index 00000000..c9ecfa70 --- /dev/null +++ b/src/server-extension/model/event.model.ts @@ -0,0 +1,17 @@ +import { Field, ObjectType } from 'type-graphql'; + +@ObjectType() +export class EventEntity { + @Field(() => Date, { nullable: false }) + date!: Date + + @Field(() => BigInt, { nullable: true, defaultValue: 0n }) + max!: bigint + + @Field(() => Number, { nullable: true, defaultValue: 0 }) + count!: number + + constructor(props: Partial) { + Object.assign(this, props); +} +} \ No newline at end of file diff --git a/src/server-extension/query/event.ts b/src/server-extension/query/event.ts new file mode 100644 index 00000000..d55a2d67 --- /dev/null +++ b/src/server-extension/query/event.ts @@ -0,0 +1,6 @@ +export const buyEvent = `SELECT + COUNT(e.*) as count, + COALESCE(MAX(e.meta::bigint), 0) as max + FROM event e + LEFT JOIN nft_entity ne on ne.id = e.nft_id + WHERE e.interaction = 'BUY' AND ne.collection_id = $1;` \ No newline at end of file diff --git a/src/server-extension/resolvers/collectionEvent.ts b/src/server-extension/resolvers/collectionEvent.ts new file mode 100644 index 00000000..94007b60 --- /dev/null +++ b/src/server-extension/resolvers/collectionEvent.ts @@ -0,0 +1,27 @@ +import { Arg, Query, Resolver } from 'type-graphql' +import type { EntityManager } from 'typeorm' +import { Event } from '../../model/generated' +import { EventEntity } from '../model/event.model' +import { buyEvent } from '../query/event' + + +@Resolver() +export class CollectionEventResolver { + constructor(private tx: () => Promise) {} + + @Query(() => [EventEntity]) + async collectionBuyEventStatsById( + @Arg('id', { nullable: false }) id: string, + ): Promise { + const result: EventEntity[] = await this.genericEventQuery(buyEvent, id) + return result + } + + async genericEventQuery(query: string, id: string): Promise { + const manager = await this.tx() + const repository = manager.getRepository(Event) + + const result: EventEntity[] = await repository.query(query, [id]) + return result + } +} diff --git a/src/server-extension/resolvers/index.ts b/src/server-extension/resolvers/index.ts index 3e5f6cee..bced20fc 100644 --- a/src/server-extension/resolvers/index.ts +++ b/src/server-extension/resolvers/index.ts @@ -4,6 +4,7 @@ import { CountResolver } from './count' import { SeriesResolver } from './series' import { SpotlightResolver } from './spotlight' import { CollectionChartResolver } from './collectionChart' +import { CollectionEventResolver } from './collectionEvent' @ObjectType() export class Hello { @@ -33,4 +34,5 @@ export { CountResolver, SeriesResolver, SpotlightResolver, + CollectionEventResolver, }