Skip to content

Repository files navigation

memory

Репозиторий для хранения любимых фильмов, книг, сериалов и других категорий. Данные — это обычные markdown-файлы с YAML-frontmatter, поэтому они читаются человеком, удобно диффятся в git и открываются в Obsidian.

Структура

entities/<category>/<slug>.md   # записи (одна запись = один файл)
templates/movies.md             # шаблоны новых записей (для Templater в Obsidian)
templates/books.md
templates/series.md
templates/games.md
templates/anime.md
templates/manga.md
schemas/<category>.schema.json  # JSON Schema: какие поля допустимы в категории
users.yaml                     # пользователи: id и имена
scripts/validate.py             # проверка всех записей

Как добавить запись

  1. Скопируй шаблон из templates/<category>.md в entities/<category>/.
  2. Заполни title, по желанию added_by (id пользователя из users.yaml), tags и другие поля.
  3. Коммит будет отклонён, если запись не пройдёт проверку.

Пример записи (entities/movies/brat.md):

---
title: "Брат"
added_by: "55444a90-f4aa-4d33-a126-39222fe82d42"
tags: [драма, криминал, россия]
---

Пользователи

users.yaml — единый список людей, которые могут быть указаны в added_by. У каждого пользователя есть id (UUID) и name; в записях ссылаются только на id:

users:
  - id: "55444a90-f4aa-4d33-a126-39222fe82d42"
    name: "Максим"

Добавился новый человек → заведи ему id в users.yaml. Имена и id не должны повторяться.

Категории и их поля

Категория Обязательные поля Опциональные поля
movies title tags, parts
books title author, tags, parts
series title tags
games title platform, tags, parts
anime title tags, parts
manga title tags, parts
  • title — непустая строка.
  • tags — опциональный массив уникальных строк вида [a-zа-яё0-9-]+ (например драма, криминал, 90-е).
  • parts — опциональный массив названий частей: позволяет хранить цикл (например все книги «Гарри Поттера») в одной записи. Если поле есть — массив должен быть непустым и без повторов.
  • added_by — опциональное поле во всех категориях: id пользователя из users.yaml (не имя). Значение должно существовать в списке пользователей.
  • Запрещены любые поля, не указанные в схеме категории (приводит к ошибке).
  • Внутри категории названия не должны повторяться.

Новая категория

Чтобы завести категорию recipes, нужно создать три вещи:

  1. entities/recipes/ — директория с записями.
  2. schemas/recipes.schema.json — JSON Schema для frontmatter (примеры в schemas/).
  3. templates/recipes.md — шаблон записи.

Категории без своей схемы валидируются по дефолтной (обязателен только title).

Случайная запись

scripts/random-picker.py возвращает случайную запись (например, чтобы выбрать, что посмотреть или почитать):

python scripts/random-picker.py movies      # случайная запись из категории movies
python scripts/random-picker.py games -n 3  # 3 записи без повторов
  • Категория обязательна: без неё команда завершится ошибкой с подсказкой.
  • Неизвестная категория и -n, превышающий число записей, дают ошибку с подсказкой.

Проверки

Локально перед коммитом (нужно установить зависимости):

pip install -r requirements-dev.txt
pre-commit install
pre-commit run --all-files   # или просто git commit — хук сработает сам

В CI (GitHub Actions) та же проверка запускается на каждый push и pull request.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages