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

61 lines
3.4 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 characterTagRepositoryPromise = import('./character-tag-repository').then((m) => m.characterTagRepository);
const interactionTagRepositoryPromise = import('./interaction-tag-repository').then((m) => m.interactionTagRepository);
const workCharacterNameRepositoryPromise = import('./work-character-name-repository').then(
(m) => m.workCharacterNameRepository,
);
const workRepositoryPromise = import('./work-repository').then((m) => m.workRepository);
const worldCharacterRepositoryPromise = import('./world-character-repository').then((m) => m.worldCharacterRepository);
export const workCharacterRepository: MultiNamedEntityRepositoryInterface<
WorkCharacterSerializedInterface,
WorkCharacterNameSerializedInterface
> = new MultiNamedEntityRepository(
(id) => entityApi.readWorkCharacter(id),
(partial) => entityApi.createWorkCharacter(partial),
(id, partial) => entityApi.updateWorkCharacter(id, partial),
(id) => entityApi.deleteWorkCharacter(id),
{
nameCanonical: (updatePartial, key, updated, original): void => {
fillUpdatePartialPrimitive(updated, original, key, updatePartial);
},
names: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
works: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
characterTags: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
interactWith: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
interactedBy: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
worldCharacters: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
},
{
names: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, workCharacterNameRepositoryPromise, updated, original),
works: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, workRepositoryPromise, updated, original),
characterTags: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, characterTagRepositoryPromise, updated, original),
interactWith: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, interactionTagRepositoryPromise, updated, original),
interactedBy: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, interactionTagRepositoryPromise, updated, original),
worldCharacters: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, worldCharacterRepositoryPromise, updated, original),
},
workCharacterNameRepositoryPromise,
);