diff --git a/packages/backend/src/database.ts b/packages/backend/src/database.ts index 6499b0e1..d91f2ec4 100644 --- a/packages/backend/src/database.ts +++ b/packages/backend/src/database.ts @@ -24,6 +24,7 @@ import { Domain } from './entity/Domain'; import { getEntities, loadAndSaveData } from './utils'; import { UserOrganization } from './entity/UserOrganization'; import { Deployer } from './entity/Deployer'; +import { DNSRecordAttributes } from './types'; const ORGANIZATION_DATA_PATH = '../test/fixtures/organizations.json'; @@ -602,6 +603,28 @@ export class Database { return domains; } + async getLatestDNSDataByProjectId( + projectId: string, + ): Promise { + const deploymentRepository = this.dataSource.getRepository(Deployment); + + const deployment = await deploymentRepository.findOne({ + where: { + project: { + id: projectId + }, + }, order: { + createdAt: "DESC", + }, + }); + + if (deployment === null) { + throw new Error(`Error finding DNS data for project with id ${projectId}`); + } + + return deployment.dnsRecordData; + } + async addDeployer(data: DeepPartial): Promise { const deployerRepository = this.dataSource.getRepository(Deployer); const newDomain = await deployerRepository.save(data); diff --git a/packages/backend/src/resolvers.ts b/packages/backend/src/resolvers.ts index e20b7e0c..e21a9d70 100644 --- a/packages/backend/src/resolvers.ts +++ b/packages/backend/src/resolvers.ts @@ -95,6 +95,13 @@ export const createResolvers = async (service: Service): Promise => { ) => { return service.verifyTx(txHash, amount, senderAddress); }, + + getLatestDNSDataByProjectId: async ( + _: any, + { projectId }: { projectId: string }, + ) => { + return service.getLatestDNSDataByProjectId(projectId); + }, }, // TODO: Return error in GQL response diff --git a/packages/backend/src/schema.gql b/packages/backend/src/schema.gql index ff51098a..cf4db3b4 100644 --- a/packages/backend/src/schema.gql +++ b/packages/backend/src/schema.gql @@ -249,6 +249,14 @@ type Auction { bids: [Bid!]! } +type DNSRecordAttributes { + name: string; + value: string; + request: string; + resourceType: string; + version: string; +} + input AuctionParams { maxPrice: String, numProviders: Int, @@ -265,6 +273,7 @@ type Query { projectMembers(projectId: String!): [ProjectMember!] searchProjects(searchText: String!): [Project!] getAuctionData(auctionId: String!): Auction! + getLatestDNSDataByProjectId(projectId: String!): DNSRecordAttributes domains(projectId: String!, filter: FilterDomainsInput): [Domain] deployers: [Deployer] address: String! diff --git a/packages/backend/src/service.ts b/packages/backend/src/service.ts index 80e49874..d59052d6 100644 --- a/packages/backend/src/service.ts +++ b/packages/backend/src/service.ts @@ -447,6 +447,11 @@ export class Service { return dbDeployments; } + async getLatestDNSDataByProjectId(projectId: string): Promise { + const dbDeployments = await this.db.getLatestDNSDataByProjectId(projectId); + return dbDeployments; + } + async getEnvironmentVariablesByProjectId( projectId: string, ): Promise { diff --git a/packages/gql-client/src/client.ts b/packages/gql-client/src/client.ts index c915dde9..1c84a14a 100644 --- a/packages/gql-client/src/client.ts +++ b/packages/gql-client/src/client.ts @@ -453,4 +453,15 @@ export class GQLClient { return data.verifyTx; } + + async getLatestDNSDataByProjectId(projectId: string): Promise { + const { data } = await this.client.query({ + query: queries.getLatestDNSDataByProjectId, + variables: { + projectId, + }, + }); + + return data.dnsRecordData; + } } diff --git a/packages/gql-client/src/queries.ts b/packages/gql-client/src/queries.ts index 48760dbd..d982b276 100644 --- a/packages/gql-client/src/queries.ts +++ b/packages/gql-client/src/queries.ts @@ -343,3 +343,15 @@ query ($txHash: String!, $amount: String!, $senderAddress: String!) { verifyTx(txHash: $txHash, amount: $amount, senderAddress: $senderAddress) } `; + +export const getLatestDNSDataByProjectId = gql` +query($projectId: String!) { + dnsRecordData(projectId: $projectId) { + name + value + request + resourceType + version + } +} +`; diff --git a/packages/gql-client/src/types.ts b/packages/gql-client/src/types.ts index 3c690fc6..c6715af5 100644 --- a/packages/gql-client/src/types.ts +++ b/packages/gql-client/src/types.ts @@ -376,3 +376,11 @@ export type AuctionParams = { maxPrice: string; numProviders: number; }; + +export type DNSRecordAttributes = { + name: string; + value: string; + request: string; + resourceType: string; + version: string; +}