diff --git a/backend/src/graphql/inputs/TransactionInput.ts b/backend/src/graphql/inputs/TransactionInput.ts new file mode 100644 index 000000000..279e09dd6 --- /dev/null +++ b/backend/src/graphql/inputs/TransactionInput.ts @@ -0,0 +1,50 @@ +import { ObjectType, ArgsType, Field, Int, Float } from 'type-graphql' +import { Entity, BaseEntity, Column, Double } from 'typeorm' + +@ArgsType() +export class TransactionInput { + @Field(() => Number) + sessionId: number + + @Field(() => Number) + firstPage: number + + @Field(() => Number) + items: number + + @Field(() => String) + order: string +} + +@ArgsType() +export class TransactionSendArgs { + @Field(() => Number) + sessionId: number + + @Field(() => String) + email: string + + @Field(() => Number) + amount: number + + @Field(() => String) + memo: string +} + +@ArgsType() +export class TransactionCreateArgs { + @Field(() => Number) + sessionId: number + + @Field(() => String) + email: string + + @Field(() => Number) + amount: number + + @Field(() => String) + memo: string + + @Field(() => Date) + targetDate: Date +} diff --git a/backend/src/graphql/models/Transaction.ts b/backend/src/graphql/models/Transaction.ts new file mode 100644 index 000000000..b638e797e --- /dev/null +++ b/backend/src/graphql/models/Transaction.ts @@ -0,0 +1,10 @@ +import { Entity, BaseEntity, Column } from 'typeorm' +import { ObjectType, Field } from 'type-graphql' + +@Entity() +@ObjectType() +export class Transaction extends BaseEntity { + @Field(() => String) + @Column({ length: 191 }) + email: string +} diff --git a/backend/src/graphql/resolvers/CommunityTransactionResolver.ts b/backend/src/graphql/resolvers/CommunityTransactionResolver.ts new file mode 100644 index 000000000..1578f61e2 --- /dev/null +++ b/backend/src/graphql/resolvers/CommunityTransactionResolver.ts @@ -0,0 +1,55 @@ +import { Resolver, Query, /* Mutation, */ Args, Arg } from 'type-graphql' +import CONFIG from '../../config' +import {} from '../models/Transaction' +import { + TransactionCreateArgs, + TransactionInput, + TransactionSendArgs, +} from '../inputs/TransactionInput' +import { apiPost, apiGet } from '../../apis/loginAPI' + +@Resolver() +export class CommunityTransactionResolver { + @Query(() => String) + async balance(@Arg('sessionId') sessionId: number): Promise { + // eslint-disable-next-line no-console + console.log('IN BALANCE: URL: ' + CONFIG.COMMUNITY_API_URL + 'getBalance/' + sessionId) + return apiGet(CONFIG.COMMUNITY_API_URL + 'getBalance/' + sessionId) + } + + @Query(() => String) + async transactions( + @Args() { sessionId, firstPage = 1, items = 5, order = 'DESC' }: TransactionInput, + ): Promise { + return apiGet( + `${CONFIG.COMMUNITY_API_URL}listTransactions/${firstPage}/${items}/${order}/${sessionId}`, + ) + } + + @Query(() => String) + async send(@Args() { sessionId, email, amount, memo }: TransactionSendArgs): Promise { + const payload = { + session_id: sessionId, + auto_sign: true, + email: email, + amount: amount, + memo: memo, + } + return apiPost(CONFIG.COMMUNITY_API_URL + 'sendCoins/', payload) + } + + @Query(() => String) + async create( + @Args() { sessionId, email, amount, memo, targetDate = new Date() }: TransactionCreateArgs, + ): Promise { + const payload = { + sessionId, + email, + amount, + targetDate, + memo, + auto_sign: true, + } + return apiPost(CONFIG.COMMUNITY_API_URL + 'createCoins/', payload) + } +} diff --git a/backend/src/index.ts b/backend/src/index.ts index 0d4bfd3db..b6e19f56d 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -8,6 +8,7 @@ import CONFIG from './config' // TODO move to extern // import { BookResolver } from './graphql/resolvers/BookResolver' import { UserResolver } from './graphql/resolvers/UserResolver' +import { CommunityTransactionResolver } from './graphql/resolvers/CommunityTransactionResolver' // import { GroupResolver } from './graphql/resolvers/GroupResolver' // TODO implement // import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; @@ -15,7 +16,7 @@ import { UserResolver } from './graphql/resolvers/UserResolver' async function main() { // const connection = await createConnection() const schema = await buildSchema({ - resolvers: [/* BookResolver , GroupResolver, */ UserResolver], + resolvers: [/* BookResolver , GroupResolver, */ UserResolver, CommunityTransactionResolver], }) // Graphiql interface