Migrate metadata once instead of when reading a value
This commit is contained in:
@@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { METADATA_MIGRATIONS, VALID_APP_METADATA_KEYS } from '@/modules/metadata/Metadata.constants.ts';
|
import { METADATA_MIGRATIONS, VALID_APP_METADATA_KEYS } from '@/modules/metadata/Metadata.constants.ts';
|
||||||
import { applyMetadataMigrations } from '@/modules/metadata/services/MetadataMigrations.ts';
|
|
||||||
import { convertToGqlMeta, convertValueFromMetadata } from '@/modules/metadata/services/MetadataConverter.ts';
|
import { convertToGqlMeta, convertValueFromMetadata } from '@/modules/metadata/services/MetadataConverter.ts';
|
||||||
import {
|
import {
|
||||||
AllowedMetadataValueTypes,
|
AllowedMetadataValueTypes,
|
||||||
@@ -36,16 +35,14 @@ import { ChapterIdInfo } from '@/modules/chapter/services/Chapters.ts';
|
|||||||
import { CategoryIdInfo } from '@/modules/category/Category.types.ts';
|
import { CategoryIdInfo } from '@/modules/category/Category.types.ts';
|
||||||
import { SourceType } from '@/lib/graphql/generated/graphql.ts';
|
import { SourceType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { doesMetadataKeyExistIn, extractOriginalKey, getMetadataKey } from '@/modules/metadata/Metadata.utils.ts';
|
import { doesMetadataKeyExistIn, extractOriginalKey, getMetadataKey } from '@/modules/metadata/Metadata.utils.ts';
|
||||||
|
import { applyMetadataMigrations } from '@/modules/metadata/services/MetadataMigrations.ts';
|
||||||
|
|
||||||
const getMetadataValueFrom = <Key extends AppMetadataKeys, Value extends AllowedMetadataValueTypes>(
|
const getMetadataValueFrom = <Key extends AppMetadataKeys, Value extends AllowedMetadataValueTypes>(
|
||||||
{ meta }: MetadataHolder,
|
metadata: Metadata | undefined,
|
||||||
key: Key,
|
key: Key,
|
||||||
defaultValue?: Value,
|
defaultValue?: Value,
|
||||||
prefixes?: string[],
|
prefixes?: string[],
|
||||||
): Value | undefined => {
|
): Value | undefined => {
|
||||||
const requiresMigration = Number(meta?.migration) !== METADATA_MIGRATIONS.length;
|
|
||||||
const metadata = requiresMigration ? applyMetadataMigrations(meta) : meta;
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
metadata === undefined ||
|
metadata === undefined ||
|
||||||
!doesMetadataKeyExistIn(metadata, key, prefixes) ||
|
!doesMetadataKeyExistIn(metadata, key, prefixes) ||
|
||||||
@@ -199,12 +196,14 @@ export function getMetadataFrom<METADATA extends Partial<Metadata<AppMetadataKey
|
|||||||
): METADATA {
|
): METADATA {
|
||||||
const wasMigrated =
|
const wasMigrated =
|
||||||
!!metadataHolder?.meta &&
|
!!metadataHolder?.meta &&
|
||||||
Number(getMetadataValueFrom(metadataHolder, 'migration', 0)) !== METADATA_MIGRATIONS.length;
|
Number(getMetadataValueFrom(metadataHolder.meta, 'migration', 0)) !== METADATA_MIGRATIONS.length;
|
||||||
|
|
||||||
|
const migratedMetadata = applyMetadataMigrations(metadataHolder.meta);
|
||||||
const appMetadata = {} as METADATA;
|
const appMetadata = {} as METADATA;
|
||||||
|
|
||||||
Object.entries(metadataWithDefaultValues).forEach(([key, defaultValue]) => {
|
Object.entries(metadataWithDefaultValues).forEach(([key, defaultValue]) => {
|
||||||
appMetadata[key as AppMetadataKeys] = getMetadataValueFrom(
|
appMetadata[key as AppMetadataKeys] = getMetadataValueFrom(
|
||||||
metadataHolder,
|
migratedMetadata,
|
||||||
key as AppMetadataKeys,
|
key as AppMetadataKeys,
|
||||||
defaultValue,
|
defaultValue,
|
||||||
prefixes,
|
prefixes,
|
||||||
|
|||||||
Reference in New Issue
Block a user