From 9e74dda9f281e587c15884274ba8d0f512543b99 Mon Sep 17 00:00:00 2001 From: KoKo Date: Sun, 15 May 2022 13:22:06 +0800 Subject: [PATCH 1/3] feat: init passion-feed model --- src/server-extension/model/passion.model.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/server-extension/model/passion.model.ts diff --git a/src/server-extension/model/passion.model.ts b/src/server-extension/model/passion.model.ts new file mode 100644 index 00000000..efad7902 --- /dev/null +++ b/src/server-extension/model/passion.model.ts @@ -0,0 +1,11 @@ +import { Field, ObjectType } from 'type-graphql'; + +@ObjectType() +export class PassionFeedEntity { + @Field(() => String) + id!: string + + constructor(props: Partial) { + Object.assign(this, props); + } +} \ No newline at end of file From 7613a084f055877a85575bffa98b78fd3df20e77 Mon Sep 17 00:00:00 2001 From: KoKo Date: Sun, 15 May 2022 13:22:44 +0800 Subject: [PATCH 2/3] feat: feat: resolver for passion feed --- src/server-extension/resolvers/index.ts | 2 ++ src/server-extension/resolvers/passionFeed.ts | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/server-extension/resolvers/passionFeed.ts diff --git a/src/server-extension/resolvers/index.ts b/src/server-extension/resolvers/index.ts index bced20fc..e32db8a9 100644 --- a/src/server-extension/resolvers/index.ts +++ b/src/server-extension/resolvers/index.ts @@ -5,6 +5,7 @@ import { SeriesResolver } from './series' import { SpotlightResolver } from './spotlight' import { CollectionChartResolver } from './collectionChart' import { CollectionEventResolver } from './collectionEvent' +import { PassionFeedResolver } from "./passionFeed"; @ObjectType() export class Hello { @@ -35,4 +36,5 @@ export { SeriesResolver, SpotlightResolver, CollectionEventResolver, + PassionFeedResolver, } diff --git a/src/server-extension/resolvers/passionFeed.ts b/src/server-extension/resolvers/passionFeed.ts new file mode 100644 index 00000000..e54a4e36 --- /dev/null +++ b/src/server-extension/resolvers/passionFeed.ts @@ -0,0 +1,26 @@ +import { Arg, Field, ObjectType, Query, Resolver, FieldResolver, Root } from 'type-graphql' +import type { EntityManager } from 'typeorm' +import { NFTEntity } from '../../model/generated' +import { PassionFeedEntity } from '../model/passion.model' + + +const passionQuery = `SELECT DISTINCT ne.issuer as id +FROM nft_entity ne +WHERE ne.current_owner = $1 +AND ne.current_owner != ne.issuer` + +@Resolver() +export class PassionFeedResolver { + constructor(private tx: () => Promise) { } + + @Query(() => [PassionFeedEntity]) + async passionFeed( + @Arg('account', { nullable: false, }) account: string + ): Promise<[PassionFeedEntity]> { + const manager = await this.tx() + const result = await manager.getRepository(NFTEntity) + .query(passionQuery, [account]) + + return result + } +} \ No newline at end of file From ea725250b9332bf8f64f2834e58a43dbdbe3ae54 Mon Sep 17 00:00:00 2001 From: KoKo Date: Sun, 15 May 2022 16:39:52 +0800 Subject: [PATCH 3/3] refactor: move query and use makeQuery --- src/server-extension/query/nft.ts | 4 ++++ src/server-extension/resolvers/passionFeed.ts | 12 +++--------- 2 files changed, 7 insertions(+), 9 deletions(-) create mode 100644 src/server-extension/query/nft.ts diff --git a/src/server-extension/query/nft.ts b/src/server-extension/query/nft.ts new file mode 100644 index 00000000..94e0eaf8 --- /dev/null +++ b/src/server-extension/query/nft.ts @@ -0,0 +1,4 @@ +export const passionQuery = `SELECT DISTINCT ne.issuer as id +FROM nft_entity ne +WHERE ne.current_owner = $1 +AND ne.current_owner != ne.issuer` \ No newline at end of file diff --git a/src/server-extension/resolvers/passionFeed.ts b/src/server-extension/resolvers/passionFeed.ts index e54a4e36..a41deba7 100644 --- a/src/server-extension/resolvers/passionFeed.ts +++ b/src/server-extension/resolvers/passionFeed.ts @@ -2,12 +2,8 @@ import { Arg, Field, ObjectType, Query, Resolver, FieldResolver, Root } from 'ty import type { EntityManager } from 'typeorm' import { NFTEntity } from '../../model/generated' import { PassionFeedEntity } from '../model/passion.model' - - -const passionQuery = `SELECT DISTINCT ne.issuer as id -FROM nft_entity ne -WHERE ne.current_owner = $1 -AND ne.current_owner != ne.issuer` +import { passionQuery } from "../query/nft"; +import { makeQuery } from "../utils"; @Resolver() export class PassionFeedResolver { @@ -17,9 +13,7 @@ export class PassionFeedResolver { async passionFeed( @Arg('account', { nullable: false, }) account: string ): Promise<[PassionFeedEntity]> { - const manager = await this.tx() - const result = await manager.getRepository(NFTEntity) - .query(passionQuery, [account]) + const result: [PassionFeedEntity] = await makeQuery(this.tx, NFTEntity, passionQuery, [account]) return result }