mirror of
https://github.com/logto-io/logto.git
synced 2024-12-16 20:26:19 -05:00
fix(core): get cf id before insert (#3934)
This commit is contained in:
parent
a1ea4c388f
commit
b53258ba56
4 changed files with 26 additions and 26 deletions
|
@ -30,8 +30,9 @@ const { MockQueries } = await import('#src/test-utils/tenant.js');
|
|||
const { createDomainLibrary } = await import('./domain.js');
|
||||
|
||||
const updateDomainById = jest.fn(async (_, data) => data);
|
||||
const { syncDomainStatus, addDomainToCloudflare } = createDomainLibrary(
|
||||
new MockQueries({ domains: { updateDomainById } })
|
||||
const insertDomain = jest.fn(async (data) => data);
|
||||
const { syncDomainStatus, addDomain } = createDomainLibrary(
|
||||
new MockQueries({ domains: { updateDomainById, insertDomain } })
|
||||
);
|
||||
|
||||
const fallbackOrigin = 'fake_origin';
|
||||
|
@ -51,9 +52,9 @@ afterAll(() => {
|
|||
|
||||
describe('addDomainToCloudflare()', () => {
|
||||
it('should call createCustomHostname and return cloudflare data', async () => {
|
||||
const response = await addDomainToCloudflare(mockDomain);
|
||||
const response = await addDomain(mockDomain.domain);
|
||||
expect(createCustomHostname).toBeCalledTimes(1);
|
||||
expect(updateDomainById).toBeCalledTimes(1);
|
||||
expect(insertDomain).toBeCalledTimes(1);
|
||||
expect(response.cloudflareData).toMatchObject(mockCloudflareData);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,6 +4,7 @@ import {
|
|||
type DomainDnsRecords,
|
||||
DomainStatus,
|
||||
} from '@logto/schemas';
|
||||
import { generateStandardId } from '@logto/shared';
|
||||
import { conditional } from '@silverhand/essentials';
|
||||
|
||||
import type Queries from '#src/tenants/Queries.js';
|
||||
|
@ -26,7 +27,7 @@ const getDomainStatusFromCloudflareData = (data: CloudflareData): DomainStatus =
|
|||
|
||||
export const createDomainLibrary = (queries: Queries) => {
|
||||
const {
|
||||
domains: { updateDomainById },
|
||||
domains: { updateDomainById, insertDomain },
|
||||
} = queries;
|
||||
|
||||
const syncDomainStatusFromCloudflareData = async (
|
||||
|
@ -87,23 +88,22 @@ export const createDomainLibrary = (queries: Queries) => {
|
|||
);
|
||||
};
|
||||
|
||||
const addDomainToCloudflare = async (domain: Domain): Promise<Domain> => {
|
||||
const addDomain = async (hostname: string): Promise<Domain> => {
|
||||
const { hostnameProviderConfig } = SystemContext.shared;
|
||||
assertThat(hostnameProviderConfig, 'domain.not_configured');
|
||||
|
||||
const cloudflareData = await createCustomHostname(hostnameProviderConfig, domain.domain);
|
||||
return syncDomainStatusFromCloudflareData(
|
||||
{
|
||||
...domain,
|
||||
cloudflareData,
|
||||
},
|
||||
const cloudflareData = await createCustomHostname(hostnameProviderConfig, hostname);
|
||||
|
||||
return insertDomain({
|
||||
domain: hostname,
|
||||
id: generateStandardId(),
|
||||
cloudflareData,
|
||||
hostnameProviderConfig.fallbackOrigin
|
||||
);
|
||||
status: DomainStatus.PendingVerification,
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
syncDomainStatus,
|
||||
addDomainToCloudflare,
|
||||
addDomain,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -24,12 +24,17 @@ const domains = {
|
|||
};
|
||||
|
||||
const syncDomainStatus = jest.fn(async (domain: Domain): Promise<Domain> => domain);
|
||||
const addDomainToCloudflare = jest.fn(async (domain: Domain): Promise<Domain> => domain);
|
||||
const addDomain = jest.fn(
|
||||
async (domain: string): Promise<Domain> => ({
|
||||
...mockDomain,
|
||||
domain,
|
||||
})
|
||||
);
|
||||
|
||||
const mockLibraries = {
|
||||
domains: {
|
||||
syncDomainStatus,
|
||||
addDomainToCloudflare,
|
||||
addDomain,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { Domains, domainResponseGuard, domainSelectFields } from '@logto/schemas';
|
||||
import { generateStandardId } from '@logto/shared';
|
||||
import { pick } from '@silverhand/essentials';
|
||||
import { z } from 'zod';
|
||||
|
||||
|
@ -13,10 +12,10 @@ export default function domainRoutes<T extends AuthedRouter>(
|
|||
...[router, { queries, libraries }]: RouterInitArgs<T>
|
||||
) {
|
||||
const {
|
||||
domains: { findAllDomains, findDomainById, insertDomain, deleteDomainById },
|
||||
domains: { findAllDomains, findDomainById, deleteDomainById },
|
||||
} = queries;
|
||||
const {
|
||||
domains: { syncDomainStatus, addDomainToCloudflare },
|
||||
domains: { syncDomainStatus, addDomain },
|
||||
} = libraries;
|
||||
|
||||
router.get(
|
||||
|
@ -70,12 +69,7 @@ export default function domainRoutes<T extends AuthedRouter>(
|
|||
})
|
||||
);
|
||||
|
||||
const syncedDomain = await addDomainToCloudflare(
|
||||
await insertDomain({
|
||||
...ctx.guard.body,
|
||||
id: generateStandardId(),
|
||||
})
|
||||
);
|
||||
const syncedDomain = await addDomain(ctx.guard.body.domain);
|
||||
|
||||
ctx.status = 201;
|
||||
ctx.body = pick(syncedDomain, ...domainSelectFields);
|
||||
|
|
Loading…
Reference in a new issue