Files
ERitors-Scribe-Desktop/electron/ipc/series.ipc.ts
natreex cec5830360 Introduce series management functionality and repository updates
- Added `series-world.repo.ts` to handle database operations related to series worlds and their elements.
- Implemented `series-sync.repo.ts` for managing synchronization between books and series.
- Expanded `spell.ipc.ts` data models to include `seriesSpellId` for spell synchronization.
- Refactored `insertSpellTag` method in `spelltag.repo.ts` for improved error handling and logic clarity.
2026-01-26 19:57:56 -05:00

118 lines
4.2 KiB
TypeScript

import { ipcMain } from 'electron';
import { createHandler } from '../database/LocalSystem.js';
import Series, { BooksOrderPost, SeriesDetailProps, SeriesListItemProps, SeriesBookProps } from '../database/models/Series.js';
interface CreateSeriesData {
name: string;
description?: string;
bookIds?: string[];
}
interface UpdateSeriesData {
seriesId: string;
name: string;
description?: string;
}
interface DeleteSeriesData {
seriesId: string;
}
interface GetSeriesDetailData {
seriesId: string;
}
interface AddBookToSeriesData {
seriesId: string;
bookId: string;
order?: number;
}
interface RemoveBookFromSeriesData {
seriesId: string;
bookId: string;
}
interface UpdateBooksOrderData {
seriesId: string;
booksOrder: BooksOrderPost[];
}
interface GetSeriesForBookData {
bookId: string;
}
interface GetSeriesBooksData {
seriesId: string;
}
// GET /series/list - Get all series
ipcMain.handle('db:series:list', createHandler<void, SeriesListItemProps[]>(
async function(userId: string, _body: void, lang: 'fr' | 'en'): Promise<SeriesListItemProps[]> {
return await Series.getSeriesList(userId, lang);
}
));
// GET /series/detail - Get series detail
ipcMain.handle('db:series:detail', createHandler<GetSeriesDetailData, SeriesDetailProps>(
async function(userId: string, data: GetSeriesDetailData, lang: 'fr' | 'en'): Promise<SeriesDetailProps> {
return await Series.getSeriesDetail(userId, data.seriesId, lang);
}
));
// POST /series/add - Create new series
ipcMain.handle('db:series:create', createHandler<CreateSeriesData, string>(
async function(userId: string, data: CreateSeriesData, lang: 'fr' | 'en'): Promise<string> {
return await Series.createSeries(userId, data.name, data.description || '', lang, data.bookIds);
}
));
// PUT /series/update - Update series
ipcMain.handle('db:series:update', createHandler<UpdateSeriesData, boolean>(
async function(userId: string, data: UpdateSeriesData, lang: 'fr' | 'en'): Promise<boolean> {
return await Series.updateSeries(userId, data.seriesId, data.name, data.description || '', lang);
}
));
// DELETE /series/delete - Delete series
ipcMain.handle('db:series:delete', createHandler<DeleteSeriesData, boolean>(
async function(userId: string, data: DeleteSeriesData, lang: 'fr' | 'en'): Promise<boolean> {
return await Series.deleteSeries(userId, data.seriesId, lang);
}
));
// GET /series/book/list - Get books in series
ipcMain.handle('db:series:books', createHandler<GetSeriesBooksData, SeriesBookProps[]>(
async function(userId: string, data: GetSeriesBooksData, lang: 'fr' | 'en'): Promise<SeriesBookProps[]> {
return await Series.getSeriesBooks(userId, data.seriesId, lang);
}
));
// POST /series/book/add - Add book to series
ipcMain.handle('db:series:book:add', createHandler<AddBookToSeriesData, boolean>(
async function(userId: string, data: AddBookToSeriesData, lang: 'fr' | 'en'): Promise<boolean> {
return await Series.addBookToSeries(userId, data.seriesId, data.bookId, data.order ?? 1, lang);
}
));
// DELETE /series/book/remove - Remove book from series
ipcMain.handle('db:series:book:remove', createHandler<RemoveBookFromSeriesData, boolean>(
async function(userId: string, data: RemoveBookFromSeriesData, lang: 'fr' | 'en'): Promise<boolean> {
return await Series.removeBookFromSeries(userId, data.seriesId, data.bookId, lang);
}
));
// PUT /series/book/reorder - Reorder books in series
ipcMain.handle('db:series:book:reorder', createHandler<UpdateBooksOrderData, boolean>(
async function(userId: string, data: UpdateBooksOrderData, lang: 'fr' | 'en'): Promise<boolean> {
return await Series.updateBooksOrder(userId, data.seriesId, data.booksOrder, lang);
}
));
// GET /series/for-book - Get series ID for a book
ipcMain.handle('db:series:forBook', createHandler<GetSeriesForBookData, string | null>(
function(_userId: string, data: GetSeriesForBookData, _lang: 'fr' | 'en'): string | null {
return Series.getSeriesIdForBook(data.bookId);
}
));