Skip to content

Commit

Permalink
refactor: [M3-8130] - Query Key Factory for Databases (#10503)
Browse files Browse the repository at this point in the history
* initial refactor

* clean up

* update api-v4 types

* add changesets

* rename `lists` to `databases` in factory

---------

Co-authored-by: Banks Nussman <banks@nussman.us>
  • Loading branch information
bnussman-akamai and bnussman authored May 30, 2024
1 parent df42a4a commit 7a5f3b7
Show file tree
Hide file tree
Showing 27 changed files with 335 additions and 306 deletions.
5 changes: 5 additions & 0 deletions packages/api-v4/.changeset/pr-10503-added-1716386367795.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/api-v4": Added
---

`members` to `DatabaseInstance` and `Database` types ([#10503](https://github.com/linode/manager/pull/10503))
5 changes: 5 additions & 0 deletions packages/api-v4/.changeset/pr-10503-changed-1716386563929.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/api-v4": Changed
---

Update return type of `updateDatabase` to be `Database` ([#10503](https://github.com/linode/manager/pull/10503))
3 changes: 1 addition & 2 deletions packages/api-v4/src/databases/databases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
Engine,
SSLFields,
UpdateDatabasePayload,
UpdateDatabaseResponse,
} from './types';

/**
Expand Down Expand Up @@ -153,7 +152,7 @@ export const updateDatabase = (
databaseID: number,
data: UpdateDatabasePayload
) =>
Request<UpdateDatabaseResponse>(
Request<Database>(
setURL(
`${API_ROOT}/databases/${encodeURIComponent(
engine
Expand Down
15 changes: 10 additions & 5 deletions packages/api-v4/src/databases/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ export interface SSLFields {
ca_certificate: string;
}

type MemberType = 'primary' | 'failover';

// DatabaseInstance is the interface for the shape of data returned by the /databases/instances endpoint.
export interface DatabaseInstance {
id: number;
Expand All @@ -75,6 +77,10 @@ export interface DatabaseInstance {
created: string;
instance_uri: string;
hosts: DatabaseHosts;
/**
* A key/value object where the key is an IP address and the value is a member type.
*/
members: Record<string, MemberType>;
}

export type ClusterSize = 1 | 3;
Expand Down Expand Up @@ -139,6 +145,10 @@ export interface BaseDatabase {
* It may not be defined.
*/
used_disk_size_gb?: number;
/**
* A key/value object where the key is an IP address and the value is a member type.
*/
members: Record<string, MemberType>;
}

export interface MySQLDatabase extends BaseDatabase {
Expand Down Expand Up @@ -182,8 +192,3 @@ export interface UpdateDatabasePayload {
updates?: UpdatesSchedule;
type?: string;
}

export interface UpdateDatabaseResponse {
label: string;
allow_list: string[];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/manager": Tech Stories
---

Query Key Factory for Databases ([#10503](https://github.com/linode/manager/pull/10503))
6 changes: 6 additions & 0 deletions packages/manager/src/factories/databases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@ export const databaseInstanceFactory = Factory.Sync.makeFactory<DatabaseInstance
id: Factory.each((i) => i),
instance_uri: '',
label: Factory.each((i) => `database-${i}`),
members: {
'2.2.2.2': 'primary',
},
region: 'us-east',
status: Factory.each(() => pickRandom(possibleStatuses)),
type: databaseTypeFactory.build().id,
Expand All @@ -178,6 +181,9 @@ export const databaseFactory = Factory.Sync.makeFactory<Database>({
},
id: Factory.each((i) => i),
label: Factory.each((i) => `database-${i}`),
members: {
'2.2.2.2': 'primary',
},
port: 3306,
region: 'us-east',
ssl_connection: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import {
useCreateDatabaseMutation,
useDatabaseEnginesQuery,
useDatabaseTypesQuery,
} from 'src/queries/databases';
} from 'src/queries/databases/databases';
import { useRegionsQuery } from 'src/queries/regions/regions';
import { formatStorageUnits } from 'src/utilities/formatStorageUnits';
import { handleAPIErrors } from 'src/utilities/formikErrorUtils';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
import { Typography } from 'src/components/Typography';
import { useDatabaseMutation } from 'src/queries/databases';
import { useDatabaseMutation } from 'src/queries/databases/databases';
import { ExtendedIP, stringToExtendedIP } from 'src/utilities/ipUtils';

import AddAccessControlDrawer from './AddAccessControlDrawer';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { useOrder } from 'src/hooks/useOrder';
import {
useDatabaseBackupsQuery,
useDatabaseQuery,
} from 'src/queries/databases';
} from 'src/queries/databases/databases';

import RestoreFromBackupDialog from './RestoreFromBackupDialog';
import { BackupTableRow } from './DatabaseBackupTableRow';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { DialogProps } from 'src/components/Dialog/Dialog';
import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useRestoreFromBackupMutation } from 'src/queries/databases';
import { useRestoreFromBackupMutation } from 'src/queries/databases/databases';
import { useProfile } from 'src/queries/profile';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { formatDate } from 'src/utilities/formatDate';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToCo
import { Typography } from 'src/components/Typography';
import { PlanSelectionType } from 'src/features/components/PlansPanel/types';
import { typeLabelDetails } from 'src/features/Linodes/presentation';
import { useDatabaseTypesQuery } from 'src/queries/databases';
import { useDatabaseMutation } from 'src/queries/databases';
import { useDatabaseTypesQuery } from 'src/queries/databases/databases';
import { useDatabaseMutation } from 'src/queries/databases/databases';
import { formatStorageUnits } from 'src/utilities/formatStorageUnits';

import {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { Box } from 'src/components/Box';
import { CircleProgress } from 'src/components/CircleProgress';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { useDatabaseTypesQuery } from 'src/queries/databases';
import { useDatabaseTypesQuery } from 'src/queries/databases/databases';
import { useInProgressEvents } from 'src/queries/events/events';
import { useRegionsQuery } from 'src/queries/regions/regions';
import { formatStorageUnits } from 'src/utilities/formatStorageUnits';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { useHistory } from 'react-router-dom';
import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useDeleteDatabaseMutation } from 'src/queries/databases';
import { useDeleteDatabaseMutation } from 'src/queries/databases/databases';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';

interface Props {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useDatabaseCredentialsMutation } from 'src/queries/databases';
import { useDatabaseCredentialsMutation } from 'src/queries/databases/databases';

interface Props {
databaseEngine: Engine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { Typography } from 'src/components/Typography';
import { FormControl } from 'src/components/FormControl';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { RadioGroup } from 'src/components/RadioGroup';
import { useDatabaseMutation } from 'src/queries/databases';
import { useDatabaseMutation } from 'src/queries/databases/databases';

// import { updateDatabaseSchema } from '@linode/validation/src/databases.schema';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { makeStyles } from 'tss-react/mui';
import { Box } from 'src/components/Box';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
import { useDatabaseTypesQuery } from 'src/queries/databases';
import { useDatabaseTypesQuery } from 'src/queries/databases/databases';
import { useInProgressEvents } from 'src/queries/events/events';
import { useRegionsQuery } from 'src/queries/regions/regions';
import { formatStorageUnits } from 'src/utilities/formatStorageUnits';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
import { DB_ROOT_USERNAME } from 'src/constants';
import { useDatabaseCredentialsQuery } from 'src/queries/databases';
import { useDatabaseCredentialsQuery } from 'src/queries/databases/databases';
import { downloadFile } from 'src/utilities/downloadFile';
import { getErrorStringOrDefault } from 'src/utilities/errorUtils';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
useDatabaseMutation,
useDatabaseQuery,
useDatabaseTypesQuery,
} from 'src/queries/databases';
} from 'src/queries/databases/databases';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';

const DatabaseSummary = React.lazy(() => import('./DatabaseSummary'));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { TableRow } from 'src/components/TableRow';
import { TableSortCell } from 'src/components/TableSortCell';
import { useOrder } from 'src/hooks/useOrder';
import { usePagination } from 'src/hooks/usePagination';
import { useDatabasesQuery } from 'src/queries/databases';
import { useDatabasesQuery } from 'src/queries/databases/databases';
import { useInProgressEvents } from 'src/queries/events/events';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { DatabaseEmptyState } from './DatabaseEmptyState';
Expand Down
2 changes: 1 addition & 1 deletion packages/manager/src/features/Databases/utilities.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useAccount } from 'src/queries/account/account';
import { useDatabaseEnginesQuery } from 'src/queries/databases';
import { useDatabaseEnginesQuery } from 'src/queries/databases/databases';

/**
* A hook to determine if Databases should be visible to the user.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { EntityForTicketDetails } from 'src/components/SupportLink/SupportLink';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useAccount } from 'src/queries/account/account';
import { useAllDatabasesQuery } from 'src/queries/databases';
import { useAllDatabasesQuery } from 'src/queries/databases/databases';
import { useAllDomainsQuery } from 'src/queries/domains';
import { useAllFirewallsQuery } from 'src/queries/firewalls';
import { useAllKubernetesClustersQuery } from 'src/queries/kubernetes';
Expand Down
2 changes: 1 addition & 1 deletion packages/manager/src/hooks/useEventHandlers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useQueryClient } from '@tanstack/react-query';

import { oauthClientsEventHandler } from 'src/queries/account/oauth';
import { databaseEventsHandler } from 'src/queries/databases';
import { databaseEventsHandler } from 'src/queries/databases/events';
import { domainEventsHandler } from 'src/queries/domains';
import { firewallEventsHandler } from 'src/queries/firewalls';
import { imageEventsHandler } from 'src/queries/images';
Expand Down
Loading

0 comments on commit 7a5f3b7

Please sign in to comment.