diff --git a/electron/ipc/book.ipc.ts b/electron/ipc/book.ipc.ts index 882e145..532689d 100644 --- a/electron/ipc/book.ipc.ts +++ b/electron/ipc/book.ipc.ts @@ -3,29 +3,6 @@ import { createHandler } from '../database/LocalSystem.js'; import Book from '../database/models/Book.js'; import type { BookProps, GuideLine, GuideLineAI, Act, Issue, WorldProps } from '../database/models/Book.js'; -// ============================================================ -// 1. GET /books - Get all books -// ============================================================ -ipcMain.handle('db:book:books', createHandler( - async function(userId: string, _body: void, lang: 'fr' | 'en'):Promise { - return await Book.getBooks(userId, lang); - } - ) -); - -// ============================================================ -// 2. GET /book/:id - Get single book -// ============================================================ -ipcMain.handle('db:book:bookBasicInformation', createHandler( - async function(userId: string, bookId: string, lang: 'fr' | 'en'):Promise { - return await Book.getBook(bookId, userId); - } - ) -); - -// ============================================================ -// 3. POST /book/basic-information - Update book basic info -// ============================================================ interface UpdateBookBasicData { title: string; subTitle: string; @@ -35,41 +12,6 @@ interface UpdateBookBasicData { bookId: string; } -ipcMain.handle( - 'db:book:updateBasicInformation', - createHandler( - function(userId: string, data: UpdateBookBasicData, lang: 'fr' | 'en') { - return Book.updateBookBasicInformation( - userId, - data.title, - data.subTitle, - data.summary, - data.publicationDate, - data.wordCount, - data.bookId, - lang - ); - } - ) -); -// Frontend: invoke('db:book:updateBasicInformation', data) - -// ============================================================ -// 4. GET /book/guide-line - Get guideline -// ============================================================ -ipcMain.handle( - 'db:book:guideline:get', - createHandler( - async function(userId: string, bookId: string, lang: 'fr' | 'en') { - return await Book.getGuideLine(userId, bookId, lang); - } - ) -); -// Frontend: invoke('db:book:guideline:get', bookId) - -// ============================================================ -// 5. POST /book/guide-line - Update guideline -// ============================================================ interface UpdateGuideLineData { bookId: string; tone: string | null; @@ -84,9 +26,94 @@ interface UpdateGuideLineData { intendedAudience: string | null; } +interface StoryData { + acts: Act[]; + issues: Issue[]; +} + +interface CreateBookData { + title: string; + subTitle: string | null; + summary: string | null; + type: string; + serieId: number | null; + desiredReleaseDate: string | null; + desiredWordCount: number | null; +} + +interface AddIncidentData { + bookId: string; + name: string; +} + +interface AddPlotPointData { + bookId: string; + name: string; + incidentId: string; +} + +interface AddIssueData { + bookId: string; + name: string; +} + +interface AddWorldData { + bookId: string; + worldName: string; +} + +interface AddWorldElementData { + worldId: string; + elementName: string; + elementType: number; +} + +interface SetAIGuideLineData { + bookId: string; + narrativeType: number; + dialogueType: number; + globalResume: string; + atmosphere: string; + verbeTense: number; + langue: number; + themes: string; +} + +// GET /books - Get all books +ipcMain.handle('db:book:books', createHandler( + async function(userId: string, _body: void, lang: 'fr' | 'en'):Promise { + return await Book.getBooks(userId, lang); + } + ) +); + +// GET /book/:id - Get single book +ipcMain.handle('db:book:bookBasicInformation', createHandler( + async function(userId: string, bookId: string, lang: 'fr' | 'en'):Promise { + return await Book.getBook(bookId, userId); + } + ) +); + +// POST /book/basic-information - Update book basic info +ipcMain.handle('db:book:updateBasicInformation', createHandler( + function(userId: string, data: UpdateBookBasicData, lang: 'fr' | 'en') { + return Book.updateBookBasicInformation(userId, data.title, data.subTitle, data.summary, data.publicationDate, data.wordCount, data.bookId, lang); + } + ) +); + +// GET /book/guide-line - Get guideline ipcMain.handle( - 'db:book:guideline:update', - createHandler( + 'db:book:guideline:get', + createHandler(async function(userId: string, bookId: string, lang: 'fr' | 'en') { + return await Book.getGuideLine(userId, bookId, lang); + } + ) +); + +// POST /book/guide-line - Update guideline +ipcMain.handle('db:book:guideline:update', createHandler( async function(userId: string, data: UpdateGuideLineData, lang: 'fr' | 'en') { return await Book.updateGuideLine( userId, @@ -106,22 +133,12 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:guideline:update', data) -// ============================================================ -// 6. GET /book/story - Get story data (acts + issues) -// ============================================================ -interface StoryData { - acts: Act[]; - issues: Issue[]; -} - -ipcMain.handle( - 'db:book:story:get', - createHandler( - async function(userId: string, bookId: string, lang: 'fr' | 'en') { - const acts = await Book.getActsData(userId, bookId, lang); - const issues = await Book.getIssuesFromBook(userId, bookId, lang); +// GET /book/story - Get story data (acts + issues) +ipcMain.handle('db:book:story:get', createHandler( + async function(userId: string, bookId: string, lang: 'fr' | 'en'):Promise { + const acts:Act[] = await Book.getActsData(userId, bookId, lang); + const issues:Issue[] = await Book.getIssuesFromBook(userId, bookId, lang); return { acts, issues @@ -129,44 +146,9 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:story:get', bookId) -// ============================================================ -// 7. POST /book/story - Update story -// TODO: Implement updateStory in Book.ts -// ============================================================ -// interface StoryUpdateData { -// bookId: string; -// acts: Act[]; -// mainChapters: ChapterProps[]; -// } -// -// ipcMain.handle( -// 'db:book:story:update', -// createHandler( -// function(userId: string, data: StoryUpdateData, lang: 'fr' | 'en') { -// return Book.updateStory(userId, data.bookId, data.acts, data.mainChapters, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:story:update', data) - -// ============================================================ -// 8. POST /book/add - Create new book -// ============================================================ -interface CreateBookData { - title: string; - subTitle: string | null; - summary: string | null; - type: string; - serieId: number | null; - desiredReleaseDate: string | null; - desiredWordCount: number | null; -} - -ipcMain.handle( - 'db:book:create', - createHandler( +// POST /book/add - Create new book +ipcMain.handle('db:book:create', createHandler( function(userId: string, data: CreateBookData, lang: 'fr' | 'en') { return Book.addBook( null, @@ -183,35 +165,9 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:create', data) -// ============================================================ -// 9. POST /book/cover - Update book cover -// TODO: Implement updateBookCover in Book.ts -// ============================================================ -// interface UpdateCoverData { -// bookId: string; -// coverImageName: string; -// } -// -// ipcMain.handle( -// 'db:book:cover:update', -// createHandler( -// function(userId: string, data: UpdateCoverData, lang: 'fr' | 'en') { -// return Book.updateBookCover(userId, data.bookId, data.coverImageName, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:cover:update', { bookId, coverImageName }) - -// ============================================================ -// 10. POST /book/incident/new - Add incident -// ============================================================ -interface AddIncidentData { - bookId: string; - name: string; -} +// POST /book/incident/new - Add incident ipcMain.handle( 'db:book:incident:add', createHandler( @@ -220,38 +176,22 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:incident:add', { bookId, name }) -// ============================================================ -// 11. DELETE /book/incident/remove - Remove incident -// ============================================================ +// DELETE /book/incident/remove - Remove incident interface RemoveIncidentData { bookId: string; incidentId: string; } -ipcMain.handle( - 'db:book:incident:remove', - createHandler( +ipcMain.handle('db:book:incident:remove', createHandler( function(userId: string, data: RemoveIncidentData, lang: 'fr' | 'en') { return Book.removeIncident(userId, data.bookId, data.incidentId, lang); } ) ); -// Frontend: invoke('db:book:incident:remove', { bookId, incidentId }) -// ============================================================ -// 12. POST /book/plot/new - Add plot point -// ============================================================ -interface AddPlotPointData { - bookId: string; - name: string; - incidentId: string; -} - -ipcMain.handle( - 'db:book:plot:add', - createHandler( +// POST /book/plot/new - Add plot point +ipcMain.handle('db:book:plot:add', createHandler( function(userId: string, data: AddPlotPointData, lang: 'fr' | 'en') { return Book.addNewPlotPoint( userId, @@ -263,11 +203,8 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:plot:add', { bookId, name, incidentId }) -// ============================================================ -// 13. DELETE /book/plot/remove - Remove plot point -// ============================================================ +// DELETE /book/plot/remove - Remove plot point ipcMain.handle( 'db:book:plot:remove', createHandler( @@ -276,82 +213,41 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:plot:remove', plotPointId) -// ============================================================ -// 14. POST /book/issue/add - Add issue -// ============================================================ -interface AddIssueData { - bookId: string; - name: string; -} - -ipcMain.handle( - 'db:book:issue:add', - createHandler( +// POST /book/issue/add - Add issue +ipcMain.handle('db:book:issue:add', createHandler( function(userId: string, data: AddIssueData, lang: 'fr' | 'en') { return Book.addNewIssue(userId, data.bookId, data.name, lang); } ) ); -// Frontend: invoke('db:book:issue:add', { bookId, name }) -// ============================================================ -// 15. DELETE /book/issue/remove - Remove issue -// ============================================================ -ipcMain.handle( - 'db:book:issue:remove', - createHandler( +// DELETE /book/issue/remove - Remove issue +ipcMain.handle('db:book:issue:remove', createHandler( function(userId: string, issueId: string, lang: 'fr' | 'en') { return Book.removeIssue(userId, issueId, lang); } ) ); -// Frontend: invoke('db:book:issue:remove', issueId) -// ============================================================ -// 16. GET /book/worlds - Get worlds for book -// ============================================================ -ipcMain.handle( - 'db:book:worlds:get', - createHandler( +// GET /book/worlds - Get worlds for book +ipcMain.handle('db:book:worlds:get', createHandler( function(userId: string, bookId: string, lang: 'fr' | 'en') { return Book.getWorlds(userId, bookId, lang); } ) ); -// Frontend: invoke('db:book:worlds:get', bookId) -// ============================================================ -// 17. POST /book/world/add - Add world -// ============================================================ -interface AddWorldData { - bookId: string; - worldName: string; -} - -ipcMain.handle( - 'db:book:world:add', - createHandler( +// POST /book/world/add - Add world +ipcMain.handle('db:book:world:add', createHandler( function(userId: string, data: AddWorldData, lang: 'fr' | 'en') { return Book.addNewWorld(userId, data.bookId, data.worldName, lang); } ) ); -// Frontend: invoke('db:book:world:add', { bookId, worldName }) -// ============================================================ -// 18. POST /book/world/element/add - Add element to world -// ============================================================ -interface AddWorldElementData { - worldId: string; - elementName: string; - elementType: number; -} - -ipcMain.handle( - 'db:book:world:element:add', - createHandler( +// POST /book/world/element/add - Add element to world +ipcMain.handle('db:book:world:element:add', createHandler( function(userId: string, data: AddWorldElementData, lang: 'fr' | 'en') { return Book.addNewElementToWorld( userId, @@ -363,92 +259,32 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:world:element:add', { worldId, elementName, elementType }) - -// ============================================================ -// 19. DELETE /book/world/element/delete - Remove element from world -// ============================================================ -ipcMain.handle( - 'db:book:world:element:remove', - createHandler( +// DELETE /book/world/element/delete - Remove element from world +ipcMain.handle('db:book:world:element:remove', createHandler( function(userId: string, elementId: string, lang: 'fr' | 'en') { return Book.removeElementFromWorld(userId, elementId, lang); } ) ); -// Frontend: invoke('db:book:world:element:remove', elementId) -// ============================================================ -// 20. PUT /book/world/update - Update world -// TODO: Implement updateWorld in Book.ts -// ============================================================ -// ipcMain.handle( -// 'db:book:world:update', -// createHandler( -// function(userId: string, world: WorldProps, lang: 'fr' | 'en') { -// return Book.updateWorld(userId, world, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:world:update', worldData) - -// ============================================================ -// 21. DELETE /book/cover/delete - Delete book cover -// TODO: Implement deleteCoverPicture in Book.ts -// ============================================================ -// ipcMain.handle( -// 'db:book:cover:delete', -// createHandler( -// function(userId: string, bookId: string, lang: 'fr' | 'en') { -// return Book.deleteCoverPicture(userId, bookId, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:cover:delete', bookId) - -// ============================================================ -// 22. DELETE /book/delete - Delete book -// ============================================================ -ipcMain.handle( - 'db:book:delete', - createHandler( +// DELETE /book/delete - Delete book +ipcMain.handle('db:book:delete', createHandler( function(userId: string, bookId: string, lang: 'fr' | 'en') { return Book.removeBook(userId, bookId, lang); } ) ); -// Frontend: invoke('db:book:delete', bookId) -// ============================================================ -// 23. GET /book/ai/guideline - Get AI guideline -// ============================================================ -ipcMain.handle( - 'db:book:guideline:ai:get', - createHandler( +// GET /book/ai/guideline - Get AI guideline +ipcMain.handle('db:book:guideline:ai:get', createHandler( function(userId: string, bookId: string, lang: 'fr' | 'en') { return Book.getGuideLineAI(bookId, userId, lang); } ) ); -// Frontend: invoke('db:book:guideline:ai:get', bookId) -// ============================================================ -// 24. POST /book/ai/guideline (set) - Set AI guideline -// ============================================================ -interface SetAIGuideLineData { - bookId: string; - narrativeType: number; - dialogueType: number; - globalResume: string; - atmosphere: string; - verbeTense: number; - langue: number; - themes: string; -} - -ipcMain.handle( - 'db:book:guideline:ai:set', - createHandler( +// POST /book/ai/guideline (set) - Set AI guideline +ipcMain.handle('db:book:guideline:ai:set', createHandler( function(userId: string, data: SetAIGuideLineData, lang: 'fr' | 'en') { return Book.setAIGuideLine( data.bookId, @@ -465,69 +301,3 @@ ipcMain.handle( } ) ); -// Frontend: invoke('db:book:guideline:ai:set', data) - -// ============================================================ -// 25. GET /book/transform/epub - Export to EPUB -// TODO: Implement transformToEpub in Book.ts -// ============================================================ -// ipcMain.handle( -// 'db:book:export:epub', -// createHandler( -// function(userId: string, bookId: string, lang: 'fr' | 'en') { -// return Book.transformToEpub(userId, bookId, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:export:epub', bookId) - -// ============================================================ -// 26. GET /book/transform/pdf - Export to PDF -// TODO: Implement transformToPDF in Book.ts -// ============================================================ -// ipcMain.handle( -// 'db:book:export:pdf', -// createHandler( -// function(userId: string, bookId: string, lang: 'fr' | 'en') { -// return Book.transformToPDF(userId, bookId, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:export:pdf', bookId) - -// ============================================================ -// 27. GET /book/transform/docx - Export to DOCX -// TODO: Implement transformToDOCX in Book.ts -// ============================================================ -// ipcMain.handle( -// 'db:book:export:docx', -// createHandler( -// function(userId: string, bookId: string, lang: 'fr' | 'en') { -// return Book.transformToDOCX(userId, bookId, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:export:docx', bookId) - -// ============================================================ -// 28. GET /book/tags - Get tags from book -// TODO: Implement getTagsFromBook in Book.ts -// ============================================================ -// interface BookTags { -// characters: Tag[]; -// locations: Tag[]; -// objects: Tag[]; -// worldElements: Tag[]; -// } -// -// ipcMain.handle( -// 'db:book:tags:get', -// createHandler( -// function(userId: string, bookId: string, lang: 'fr' | 'en') { -// return Book.getTagsFromBook(userId, bookId, lang); -// } -// ) -// ); -// // Frontend: invoke('db:book:tags:get', bookId) - -console.log('[IPC] Book handlers registered');