# Migration Guide: New File Structure ## Overview The codebase has been reorganized to improve clarity, maintainability, and separation of concerns. This guide shows how to update your imports. ## New Structure Summary ``` src/ ├── core/ # Domain models & constants (formerly in logic/) ├── database/ # Data persistence (formerly in backend/) ├── services/ # External APIs (from backend/ and logic/) ├── parsers/ # File parsing (formerly in logic/) ├── documents/ # Document generation (formerly in utils/) ├── background/ # Threading tasks (formerly in backend/) ├── admin/ # Admin commands (formerly in backend/) ├── shared/ # Cross-cutting concerns (logging, config) ├── utils/ # Pure utilities ├── ui/ # UI components (unchanged) └── errors/ # Custom exceptions (unchanged) ``` ## Import Changes ### Core Domain Models **OLD:** ```python from src.logic import BookData, Prof, Semester, Apparat from src.logic.dataclass import BookData, Prof from src.logic.semester import Semester from src.logic.constants import APP_NRS, SEMAP_MEDIA_ACCOUNTS ``` **NEW:** ```python from src.core.models import BookData, Prof, Semester, Apparat, ApparatData from src.core import BookData, Prof, Semester # Can use shorthand from src.core.semester import Semester from src.core.constants import APP_NRS, SEMAP_MEDIA_ACCOUNTS ``` ### Database **OLD:** ```python from src.backend import Database from src.backend.database import Database from src.backend.db import CREATE_TABLE_MEDIA ``` **NEW:** ```python from src.database import Database from src.database.connection import Database # If you need specific module from src.database.schemas import CREATE_TABLE_MEDIA ``` ### External Services & APIs **OLD:** ```python from src.backend.catalogue import Catalogue from src.backend.webadis import get_book_medianr from src.logic.SRU import SWB from src.logic.lehmannsapi import LehmannsClient from src.logic.zotero import ZoteroController from src.logic.webrequest import BibTextTransformer, WebRequest ``` **NEW:** ```python from src.services import Catalogue, SWB, LehmannsClient, ZoteroController from src.services.catalogue import Catalogue from src.services.webadis import get_book_medianr from src.services.sru import SWB from src.services.lehmanns import LehmannsClient from src.services.zotero import ZoteroController from src.services.webrequest import BibTextTransformer, WebRequest ``` ### Parsers **OLD:** ```python from src.logic import csv_to_list, word_to_semap from src.logic.csvparser import csv_to_list from src.logic.wordparser import word_to_semap from src.logic.pdfparser import pdf_to_text from src.logic.xmlparser import xml_to_dict ``` **NEW:** ```python from src.parsers import csv_to_list, word_to_semap # Lazy loading from src.parsers.csv_parser import csv_to_list from src.parsers.word_parser import word_to_semap from src.parsers.pdf_parser import pdf_to_text from src.parsers.xml_parser import xml_to_dict ``` ### Document Generation **OLD:** ```python from src.utils.richtext import create_document, create_pdf ``` **NEW:** ```python from src.documents import create_document, create_pdf from src.documents.generators import create_document, create_pdf ``` ### Background Tasks **OLD:** ```python from src.backend import AutoAdder, AvailChecker, BookGrabber from src.backend.threads_autoadder import AutoAdder from src.backend.threads_availchecker import AvailChecker from src.backend.thread_bookgrabber import BookGrabber from src.backend.thread_neweditions import NewEditionCheckerThread ``` **NEW:** ```python from src.background import AutoAdder, AvailChecker, BookGrabber, NewEditionCheckerThread from src.background.autoadder import AutoAdder from src.background.availability_checker import AvailChecker from src.background.book_grabber import BookGrabber from src.background.new_editions import NewEditionCheckerThread ``` ### Admin Commands **OLD:** ```python from src.backend import AdminCommands from src.backend.admin_console import AdminCommands ``` **NEW:** ```python from src.admin import AdminCommands from src.admin.commands import AdminCommands ``` ### Configuration & Logging **OLD:** ```python from src.backend.settings import Settings from src.logic.settings import Settings from src.shared.logging import log # This stays the same ``` **NEW:** ```python from src.shared import Settings, load_config, log from src.shared.config import Settings, load_config from src.shared.logging import log ``` ## File Renames | Old Path | New Path | |----------|----------| | `logic/dataclass.py` | `core/models.py` | | `logic/SRU.py` | `services/sru.py` | | `logic/lehmannsapi.py` | `services/lehmanns.py` | | `backend/database.py` | `database/connection.py` | | `backend/db.py` | `database/schemas.py` | | `backend/threads_autoadder.py` | `background/autoadder.py` | | `backend/threads_availchecker.py` | `background/availability_checker.py` | | `backend/thread_bookgrabber.py` | `background/book_grabber.py` | | `backend/thread_neweditions.py` | `background/new_editions.py` | | `backend/admin_console.py` | `admin/commands.py` | | `utils/richtext.py` | `documents/generators.py` | | `logic/csvparser.py` | `parsers/csv_parser.py` | | `logic/pdfparser.py` | `parsers/pdf_parser.py` | | `logic/wordparser.py` | `parsers/word_parser.py` | | `logic/xmlparser.py` | `parsers/xml_parser.py` | ## Quick Migration Checklist 1. ✅ Update all `from src.backend import Database` → `from src.database import Database` 2. ✅ Update all `from src.logic import BookData` → `from src.core.models import BookData` 3. ✅ Update all `from src.backend.catalogue` → `from src.services.catalogue` 4. ✅ Update all `from src.logic.SRU` → `from src.services.sru` 5. ✅ Update all `from src.backend.admin_console` → `from src.admin` 6. ✅ Update threading imports from `src.backend.thread*` → `src.background.*` ## Benefits - **Clearer architecture**: Each folder has a specific, well-defined purpose - **Better dependency flow**: core → database/services → background → ui - **Reduced duplication**: Merged 3 duplicate files (pickles.py, settings.py) - **Easier navigation**: Intuitive folder names ("services" vs "logic") - **Scalability**: Clear extension points for new features ## Backwards Compatibility The old `backend/` and `logic/` folders still exist with original files. They will be removed in a future cleanup phase after thorough testing. ## Questions? If you encounter import errors: 1. Check this guide for the new import path 2. Search for the class/function name in the new structure 3. Most moves follow the pattern: external APIs → `services/`, data models → `core/`, threads → `background/` ## Status ✅ **Migration Complete** - Application successfully starts and runs with new structure!