mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
rework graphql client and endpoint for community public info
This commit is contained in:
parent
f6b0998f4f
commit
a824ff0876
@ -1,44 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
|
||||
import { gql } from 'graphql-request'
|
||||
|
||||
import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient'
|
||||
import { LogError } from '@/server/LogError'
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
export async function requestGetPublicKey(
|
||||
dbCom: DbFederatedCommunity,
|
||||
): Promise<string | undefined> {
|
||||
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
|
||||
endpoint = `${endpoint}${dbCom.apiVersion}/`
|
||||
logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`)
|
||||
|
||||
const graphQLClient = GraphQLGetClient.getInstance(endpoint)
|
||||
logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`)
|
||||
const query = gql`
|
||||
query {
|
||||
getPublicKey {
|
||||
publicKey
|
||||
}
|
||||
}
|
||||
`
|
||||
const variables = {}
|
||||
|
||||
try {
|
||||
const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest(
|
||||
query,
|
||||
variables,
|
||||
)
|
||||
logger.debug(`Response-Data:`, data, errors, extensions, headers, status)
|
||||
if (data) {
|
||||
logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey)
|
||||
logger.info(`requestGetPublicKey processed successfully`)
|
||||
return data.getPublicKey.publicKey
|
||||
}
|
||||
logger.warn(`requestGetPublicKey processed without response data`)
|
||||
} catch (err) {
|
||||
throw new LogError(`Request-Error:`, err)
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@ import { LogError } from '@/server/LogError'
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import { FederationClient, PublicInfo } from '../FederationClient'
|
||||
import { FederationClient, PublicCommunityInfo } from '../FederationClient'
|
||||
|
||||
export class FederationClientImpl implements FederationClient {
|
||||
public async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise<string | undefined> {
|
||||
@ -45,16 +45,18 @@ export class FederationClientImpl implements FederationClient {
|
||||
}
|
||||
}
|
||||
|
||||
public async requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise<PublicInfo | undefined> {
|
||||
public async requestGetPublicCommunityInfo(
|
||||
dbCom: DbFederatedCommunity,
|
||||
): Promise<PublicCommunityInfo | undefined> {
|
||||
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
|
||||
endpoint = `${endpoint}${dbCom.apiVersion}/`
|
||||
logger.info(`requestGetPublicInfo with endpoint='${endpoint}'...`)
|
||||
logger.info(`requestGetPublicCommunityInfo with endpoint='${endpoint}'...`)
|
||||
|
||||
const graphQLClient = GraphQLGetClient.getInstance(endpoint)
|
||||
logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`)
|
||||
const query = gql`
|
||||
query {
|
||||
getPublicInfo {
|
||||
getPublicCommunityInfo {
|
||||
name
|
||||
description
|
||||
createdAt
|
||||
@ -71,8 +73,8 @@ export class FederationClientImpl implements FederationClient {
|
||||
)
|
||||
logger.debug(`Response-Data:`, data, errors, extensions, headers, status)
|
||||
if (data) {
|
||||
logger.debug(`Response-PublicInfo:`, data.getPublicInfo.publicInfo)
|
||||
logger.info(`requestGetPublicInfo processed successfully`)
|
||||
logger.debug(`Response-PublicCommunityInfo:`, data.getPublicInfo.publicInfo)
|
||||
logger.info(`requestGetPublicCommunityInfo processed successfully`)
|
||||
return data.getPublicInfo.publicInfo
|
||||
}
|
||||
logger.warn(`requestGetPublicInfo processed without response data`)
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
|
||||
import { gql } from 'graphql-request'
|
||||
|
||||
import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient'
|
||||
import { LogError } from '@/server/LogError'
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
export async function requestGetPublicKey(
|
||||
dbCom: DbFederatedCommunity,
|
||||
): Promise<string | undefined> {
|
||||
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
|
||||
endpoint = `${endpoint}${dbCom.apiVersion}/`
|
||||
logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`)
|
||||
|
||||
const graphQLClient = GraphQLGetClient.getInstance(endpoint)
|
||||
logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`)
|
||||
const query = gql`
|
||||
query {
|
||||
getPublicKey {
|
||||
publicKey
|
||||
}
|
||||
}
|
||||
`
|
||||
const variables = {}
|
||||
|
||||
try {
|
||||
const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest(
|
||||
query,
|
||||
variables,
|
||||
)
|
||||
logger.debug(`Response-Data:`, data, errors, extensions, headers, status)
|
||||
if (data) {
|
||||
logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey)
|
||||
logger.info(`requestGetPublicKey processed successfully`)
|
||||
return data.getPublicKey.publicKey
|
||||
}
|
||||
logger.warn(`requestGetPublicKey processed without response data`)
|
||||
} catch (err) {
|
||||
throw new LogError(`Request-Error:`, err)
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@ import { LogError } from '@/server/LogError'
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import { FederationClient, PublicInfo } from '../FederationClient'
|
||||
import { FederationClient, PublicCommunityInfo } from '../FederationClient'
|
||||
|
||||
export class FederationClientImpl implements FederationClient {
|
||||
async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise<string | undefined> {
|
||||
@ -45,16 +45,18 @@ export class FederationClientImpl implements FederationClient {
|
||||
}
|
||||
}
|
||||
|
||||
async requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise<PublicInfo | undefined> {
|
||||
async requestGetPublicCommunityInfo(
|
||||
dbCom: DbFederatedCommunity,
|
||||
): Promise<PublicCommunityInfo | undefined> {
|
||||
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
|
||||
endpoint = `${endpoint}${dbCom.apiVersion}/`
|
||||
logger.info(`requestGetPublicInfo with endpoint='${endpoint}'...`)
|
||||
logger.info(`requestGetPublicCommunityInfo with endpoint='${endpoint}'...`)
|
||||
|
||||
const graphQLClient = GraphQLGetClient.getInstance(endpoint)
|
||||
logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`)
|
||||
const query = gql`
|
||||
query {
|
||||
getPublicInfo {
|
||||
getPublicCommunityInfo {
|
||||
name
|
||||
description
|
||||
createdAt
|
||||
@ -71,9 +73,12 @@ export class FederationClientImpl implements FederationClient {
|
||||
)
|
||||
logger.debug(`Response-Data:`, data, errors, extensions, headers, status)
|
||||
if (data) {
|
||||
logger.debug(`Response-PublicInfo:`, data.getPublicInfo.publicInfo)
|
||||
logger.debug(
|
||||
`Response-PublicCommunityInfo:`,
|
||||
data.getPublicCommunityInfo.publicCommunityInfo,
|
||||
)
|
||||
logger.info(`requestGetPublicInfo processed successfully`)
|
||||
return data.getPublicInfo.publicInfo
|
||||
return data.getPublicCommunityInfo.publicCommunityInfo
|
||||
}
|
||||
logger.warn(`requestGetPublicInfo processed without response data`)
|
||||
} catch (err) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
|
||||
|
||||
export type PublicInfo = {
|
||||
export type PublicCommunityInfo = {
|
||||
name: string
|
||||
description: string
|
||||
createdAt: Date
|
||||
@ -9,5 +9,7 @@ export type PublicInfo = {
|
||||
|
||||
export interface FederationClient {
|
||||
requestGetPublicKey(dbCom: DbFederatedCommunity): Promise<string | undefined>
|
||||
requestGetPublicInfo(dbCom: DbFederatedCommunity): Promise<PublicInfo | undefined>
|
||||
requestGetPublicCommunityInfo(
|
||||
dbCom: DbFederatedCommunity,
|
||||
): Promise<PublicCommunityInfo | undefined>
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ import { backendLogger as logger } from '@/server/logger'
|
||||
import { FederationClientImpl as V1_0_FederationClientImpl } from './client/1_0/FederationClientImpl'
|
||||
// eslint-disable-next-line camelcase
|
||||
import { FederationClientImpl as V1_1_FederationClientImpl } from './client/1_1/FederationClientImpl'
|
||||
import { FederationClient, PublicInfo } from './client/FederationClient'
|
||||
import { FederationClient, PublicCommunityInfo } from './client/FederationClient'
|
||||
import { ApiVersionType } from './enum/apiVersionType'
|
||||
|
||||
export function startValidateCommunities(timerInterval: number): void {
|
||||
@ -58,9 +58,9 @@ export async function validateCommunities(): Promise<void> {
|
||||
logger.debug(`Federation: updated dbCom: ${JSON.stringify(dbCom)}`)
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const pubInfo = await getVersionedFederationClient(dbCom.apiVersion).requestGetPublicInfo(
|
||||
dbCom,
|
||||
)
|
||||
const pubInfo = await getVersionedFederationClient(
|
||||
dbCom.apiVersion,
|
||||
).requestGetPublicCommunityInfo(dbCom)
|
||||
logger.debug(`Federation: getPublicInfo pubInfo: ${JSON.stringify(pubInfo)}`)
|
||||
if (pubInfo) {
|
||||
logger.info(`Federation: write foreign community...`)
|
||||
@ -91,7 +91,7 @@ export async function validateCommunities(): Promise<void> {
|
||||
|
||||
async function writeForeignCommunity(
|
||||
dbCom: DbFederatedCommunity,
|
||||
pubInfo: PublicInfo,
|
||||
pubInfo: PublicCommunityInfo,
|
||||
): Promise<void> {
|
||||
if (dbCom && pubInfo) {
|
||||
const foreignCom = DbCommunity.create()
|
||||
|
||||
@ -4,7 +4,7 @@ import { Field, ObjectType } from 'type-graphql'
|
||||
|
||||
@ObjectType()
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export class GetPublicInfoResult {
|
||||
export class GetPublicCommunityInfoResult {
|
||||
constructor(dbCom: DbCommunity) {
|
||||
this.publicKey = dbCom.publicKey.toString('hex')
|
||||
this.name = dbCom.name
|
||||
@ -0,0 +1,18 @@
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import { Query, Resolver } from 'type-graphql'
|
||||
import { federationLogger as logger } from '@/server/logger'
|
||||
import { Community as DbCommunity } from '@entity/Community'
|
||||
import { GetPublicCommunityInfoResult } from '../model/GetPublicCommunityInfoResult'
|
||||
|
||||
@Resolver()
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export class PublicCommunityInfoResolver {
|
||||
@Query(() => GetPublicCommunityInfoResult)
|
||||
async getPublicCommunityInfo(): Promise<GetPublicCommunityInfoResult> {
|
||||
logger.debug(`getPublicCommunityInfo() via apiVersion=1_0 ...`)
|
||||
const homeCom = await DbCommunity.findOneOrFail({ foreign: false })
|
||||
const result = new GetPublicCommunityInfoResult(homeCom)
|
||||
logger.info(`getPublicCommunityInfo()-1_0... return publicInfo=${result}`)
|
||||
return result
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import { Query, Resolver } from 'type-graphql'
|
||||
import { federationLogger as logger } from '@/server/logger'
|
||||
import { Community as DbCommunity } from '@entity/Community'
|
||||
import { GetPublicInfoResult } from '../model/GetPublicInfoResult'
|
||||
|
||||
@Resolver()
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export class PublicInfoResolver {
|
||||
@Query(() => GetPublicInfoResult)
|
||||
async getPublicInfo(): Promise<GetPublicInfoResult> {
|
||||
logger.debug(`getPublicInfo() via apiVersion=1_0 ...`)
|
||||
const homeCom = await DbCommunity.findOneOrFail({ foreign: false })
|
||||
const result = new GetPublicInfoResult(homeCom)
|
||||
logger.info(`getPublicInfo()-1_0... return publicInfo=${result}`)
|
||||
return result
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user