2023-03-30 18:04:43 +02:00

72 lines
2.4 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-graphql'
import Paginated from '@arg/Paginated'
import { Order } from '@enum/Order'
import { GdtEntryList } from '@model/GdtEntryList'
import { apiGet, apiPost } from '@/apis/HttpRequest'
import { RIGHTS } from '@/auth/RIGHTS'
import CONFIG from '@/config'
import { Context, getUser } from '@/server/context'
import LogError from '@/server/LogError'
@Resolver()
export class GdtResolver {
@Authorized([RIGHTS.LIST_GDT_ENTRIES])
@Query(() => GdtEntryList)
async listGDTEntries(
@Args()
{ currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated,
@Ctx() context: Context,
): Promise<GdtEntryList> {
const userEntity = getUser(context)
try {
const resultGDT = await apiGet(
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`${CONFIG.GDT_API_URL}/GdtEntries/listPerEmailApi/${userEntity.emailContact.email}/${currentPage}/${pageSize}/${order}`,
)
if (!resultGDT.success) {
throw new LogError(resultGDT.data)
}
return new GdtEntryList(resultGDT.data)
} catch (err) {
throw new LogError('GDT Server is not reachable')
}
}
@Authorized([RIGHTS.GDT_BALANCE])
@Query(() => Float, { nullable: true })
async gdtBalance(@Ctx() context: Context): Promise<number | null> {
const user = getUser(context)
try {
const resultGDTSum = await apiPost(`${CONFIG.GDT_API_URL}/GdtEntries/sumPerEmailApi`, {
email: user.emailContact.email,
})
if (!resultGDTSum.success) {
throw new LogError('Call not successful')
}
return Number(resultGDTSum.data.sum) || 0
} catch (err) {
// eslint-disable-next-line no-console
console.log('Could not query GDT Server')
return null
}
}
@Authorized([RIGHTS.EXIST_PID])
@Query(() => Int)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async existPid(@Arg('pid', () => Int) pid: number): Promise<number> {
// load user
const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${pid}`)
if (!resultPID.success) {
throw new LogError(resultPID.data)
}
return resultPID.data.pid
}
}