RenaiApp/src/renderer/store/repositories/entities/world-character-repository.ts

54 lines
2.9 KiB
TypeScript

import { entityApi } from '../../../services/api';
import { MultiNamedEntityRepository, MultiNamedEntityRepositoryInterface } from '../multi-named-entity-repository';
import { fillUpdatePartialArray, fillUpdatePartialPrimitive } from '../util/fill-update-partial';
import { updateMultiRelatedRepository } from '../util/update-related';
const workCharacterRepositoryPromise = import('./work-character-repository').then((m) => m.workCharacterRepository);
const worldCharacterNameRepositoryPromise = import('./world-character-name-repository').then(
(m) => m.worldCharacterNameRepository,
);
const worldRepositoryPromise = import('./world-repository').then((m) => m.worldRepository);
export const worldCharacterRepository: MultiNamedEntityRepositoryInterface<
WorldCharacterSerializedInterface,
WorldCharacterNameSerializedInterface
> = new MultiNamedEntityRepository(
(id) => entityApi.readWorldCharacter(id),
(partial) => entityApi.createWorldCharacter(partial),
(id, partial) => entityApi.updateWorldCharacter(id, partial),
(id) => entityApi.deleteWorldCharacter(id),
{
nameCanonical: (updatePartial, key, updated, original): void => {
fillUpdatePartialPrimitive(updated, original, key, updatePartial);
},
names: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
worlds: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
workCharacters: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
parents: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
children: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
},
{
names: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, worldCharacterNameRepositoryPromise, updated, original),
worlds: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, worldRepositoryPromise, updated, original),
workCharacters: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, workCharacterRepositoryPromise, updated, original),
parents: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, Promise.resolve(worldCharacterRepository), updated, original),
children: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, Promise.resolve(worldCharacterRepository), updated, original),
},
worldCharacterNameRepositoryPromise,
);