food-records/app/paths.py
Claude c8b9f5048b Учёт закупки и перепродажи булок
Десктопное приложение на PySide6. Вся база — один JSON-документ,
зашифрованный AES-256-GCM под паролем (ключ через scrypt), лежит
в data/vault.fmdb и раз в час уезжает в этот репозиторий.

Основное:
- партии с дедлайном возврата себестоимости пекарне, FIFO-разнос продаж
  по партиям и прогресс покрытия к сроку;
- типы выбытия: розница, другу по себестоимости, съел сам, подарок,
  списание — съеденное вычитается из прибыли, за него платить всё равно;
- долги контрагентов с частичными оплатами;
- номенклатура с историей изменения цен;
- журнал изменений внутри базы: git хранит непрозрачные снимки,
  поэтому настоящая история ведётся здесь.

Синхронизация коммитит только путь базы и схлопывает часовые пуши
в один коммит на день через amend + force-with-lease.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 17:29:53 +03:00

43 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Где лежат данные.
Собранный exe кладётся в корень клона репозитория, а база — в data/ рядом
с ним. При запуске из исходников корнем считается сама папка проекта, поэтому
разработка и собранное приложение работают с одним и тем же файлом.
"""
from __future__ import annotations
import sys
from pathlib import Path
VAULT_NAME = "vault.fmdb"
DATA_DIR_NAME = "data"
def app_root() -> Path:
if getattr(sys, "frozen", False):
return Path(sys.executable).resolve().parent
return Path(__file__).resolve().parent.parent
def data_dir() -> Path:
return app_root() / DATA_DIR_NAME
def vault_path() -> Path:
return data_dir() / VAULT_NAME
def vault_rel_posix() -> str:
"""Путь базы для git — всегда со слешами и относительно корня репозитория."""
return f"{DATA_DIR_NAME}/{VAULT_NAME}"
def backup_path() -> Path:
return data_dir() / f"{VAULT_NAME}.bak"
def remote_copy_path() -> Path:
"""Куда складывается удалённая версия базы при расхождении веток."""
return data_dir() / "vault.remote.fmdb"