Как коллекционировать старые компьютеры и не запутаться в них. Часть 2

Да простит меня автор первой части за то, что украл его название, но уж очень близка мне эта тема. Мы — музей Software & Computer Museum столкнулись с той же проблемой каталогизации и учета наших экспонатов. Изучив доступные музейные базы пришли к выводу, что все это как-то тяжело и некатомизируемо, решили писать свое. Интересно, что получилось? Добро пожаловать под кат.

a156ad9dd086faba8d189098653feb56

Я не профессиональный разработчик, поэтому писал на том, с чем был хоть немного знаком — PHP+MySQL. На данный момент проект в разработке уже два года и мы достаточно активно им пользуемся для своих задач, но, к сожалению, он еще сыроват для открытой публикации.

После очередного рефакторинга пришло понимание, что нужно делать модульную структуру. Поэтому я вкратце расскажу про каждый модуль.

Модуль Hardware

Модуль Hardware нужен для учета железных штук и содержит 3 уровня вложенности. Верхний уровень — объект. Например, ZX Spectrum 48. Объект относится к определенной категории (компьютер), выпущен компанией Sinclair и относится к платформе ZX Spectrum (к этой же платформе относится и куча других клонов, которые массово у нас производились). Есть дата релиза, габариты и вес (помогают понять, сколько места ему нужно в экспозиции и как транспортировать). Также для объекта можно добавить произвольные теги.

f17761912d4c4ec3184d4b7306314d6b

Второй уровень вложенности — экспонат. Это уже конкретный физический ZX Spectrum. Он имеет те же свойства, что и его родительский объект (object_id в таблице), но также ряд уникальных свойств: инвентарный номер, внешнее состояние, работоспособность, локацию и свой собственный текстовый коментарий. Например, у нас их два:

dd3b89cf65391e7bc7228d4095cd0415

Третий уровень вложенности — предмет экспоната. Экспонат может состоять из нескольких предметов, например, сам Спектрум, блок питания от него, инструкция, коробка и так далее. Для каждого такого предмета есть категория, состояние, работоспособность, локация и комментарий и фото, по которому легко опознать предмет.

544fcb6ca2881094027da9538d205dd1

Модуль Software

Софтом ситуация оказалась еще сложнее. Конечно, мы добавляем в каталог не весь софт, который есть у нас на винтах и флешках, а лишь тот, к которому есть какие-то оригинальные физические артефакты. Давайте разберем этот модуль на примере игры Pacman.

Верхний уровень — Software. Некое общее описание, например игра Pac-Man разработана Namco для аркадного автомата, геймплей всем понятен и известен. Да, описание на скрине не заполнено.

4076c9f0569c0b526f46bf0fd55e97d8

Но кроме аркады игра издавалась на кучу разных платформ, поэтому добавляется второй уровень вложенности — Release. Релиз связан с Software, но имеет свои особенности: платформу, на которой он был выпущен, свою обложку для этой платформы, дату выхода, носитель и описание. У нас есть Pacman для трех разных платформ, Atari 2600, Atari 5200 и Sega GameGear. При редактировании релиза можно чекбоксом отметить Primary Release и его обложка будет показываться в описании Software.

f01c7ca5a0cb503bb8cc71c7051147b0

Дальше все как и в Hardware, для каждого релиза есть экспонаты и предметы. Например, картриджей с Pacman для Atari 5200 у нас целых 3 штуки, поэтому 3 экспоната, но все 3 карика голые, поэтому в каждом экспонате только 1 предмет — картридж. Достанем инструкцию или коробку, добавим эти предметы к одному из экспонатов.

0909fc6fd0a96de099dde4ba2272b736

Модуль Catalog

Этот модуль позволяет формировать списки по некоторым критериям. Сейчас у нас там производители железа (Vendors), платформы (Platforms) и разработчики ПО (Developers). Да, это не покрывает всех возможных ситуаций, так как что-то могли разрабатывать совместно, для каждого софта была компания-разработчик и издатель, но пока как есть. Для каждой сущности в каталоге есть название и логотип. Пример каталога производителей показан в шапке статьи. Так выглядит каталог платформ:

19704f0353c3a87fe70f00e73de3a613

Для каждой платформы, производителя или разработчика можно посмотреть список экспонатов. Вот, например, ZX Spectrum. Список сортируется по алфавиту и приоритету категории. Категории железа имеют больший приоритет, чем категории софта.

403fe858f56515e7302f3a127a459af1

Рядом с логотипом платформы есть иконка, позволяющая показать экспонаты в виде галереи картинок для более удобного поиска. Аналогичным образом работают каталоги производителей и разработчиков.

5695562a2d32318eaae67f296cab0cd2

Модуль Search

Тут все просто. Это поиск, к сожалению, не полнотекстный, а обычный через MySQL LIKE. Ищет по названиям экспонатов, каталогу и тегам. Сначала показывает элементы каталога (первой строчкой платформа ZX Spectrum), затем экспонаты. Например, по фразе spec найдет следующее:

163d62e0142e5bf4783668786f96ef51

Модуль Calendar

Этот модуль позволяет нам не забыть какие-то важные события из истории ИТ и подготовить тематическую выставку в музее или хотя-бы публикацию в соцсетях. Вы просто добавляете название, дату события, описание и картинку. По этому модулю есть еще куча идей и недоделок. По умолчанию он показывает события на -10 дней назад и на +20 вперед.

50669c8b6dfecc5ecd6074efe0049b9f

Пока это все, что реализовано в текущей версии 0.23.

Планы на ближайшее будущее:

  • подготовить шаблоны для формирования списков по локации, категориям;

  • добавить поиск по описаниям;

  • переработать редактирование описания для объектов железа, ПО и релизов, добавить нормальную поддержку HTML разметки или Rich Textbox;

  • добавить редактор справочников (пока добавление или редактирование локаций, категорий и еще некоторых справочников производится прямо в MySQL-редакторе).

Планы на перспективу:

  • сделать установщик (я эту штуку даже на гитхаб пока выложить не могу, так как без детальной инструкции никто ее не запустит);

  • добавить хоть какой-то импорт. По игрушкам с той же MobyGames;

  • опубликовать и попробовать собрать комьюнити вокруг проекта.

На этом у меня все. Благодарю за внимание.

© Habrahabr.ru