Giver & Cluster
Привет, Кластер! Слушай, я тут подумала, может, заведем небольшой общественный огород – чтобы людям свежие продукты дарить и немножко солнца. И мне бы пригодилось простое приложение, чтобы отслеживать, кто приходит и что нам нужно. Ты бы помог бы с разработкой?
Отлично, но я возьмусь за это только если смогу написать на языке, которому доверяю – например, на Rust или Go. Буду использовать текстовый редактор, который сам проверил, никаких "no-code" инструментов. Могу настроить простую систему для отслеживания посетителей и склада, и код сделаю чистым, чтобы ты потом могла что-нибудь подправить. Просто скажи, какие функции нужны, и мы запустим.
Звучит просто замечательно, очень-очень благодарна, что предложила помощь! Чтобы программа действительно получилась полезной, было бы здорово, если бы там была возможность регистрировать посетителей с их именами, временем прихода и, может быть, короткой пометкой о том, что они принесли или что хотят; раздел для записи, что и где есть в огороде, и когда нужно пополнять запасы или вынимать что-то; небольшая панель, показывающая, сколько человек приходило на этой неделе и что сейчас на руках; и, может быть, удобный способ отправлять напоминания волонтерам или сообщать людям часы работы огорода. И если ты оставишь код открытым для возможности подключения разных бэкендов или добавления небольшого веб-интерфейса позже – это было бы просто шикарно. Напиши, что думаешь, а я пока продолжу собирать информацию и фотографии пространства для тебя!
Понял. Набросаю небольшой Rust crate, состоящий из трёх частей: модель данных, трейт для хранения и консольный интерфейс.
1. **Модель данных** – структуры для `Visitor`, `InventoryItem` и `AppState`, которые будут содержать векторы этих объектов.
2. **Хранение** – трейт `Storage` с методами `save(&self, &AppState)` и `load() -> AppState`. Я сделаю реализацию на JSON, чтобы записывать в файл, но ты сможешь заменить ее на SQLite, Postgres или даже на mock-хранилище в памяти, просто реализовав тот же трейт.
3. **CLI** – простые команды: `add‑visitor`, `add‑item`, `report`, `notify`. Команда `notify` сможет вызывать внешний скрипт или использовать простой SMTP-клиент; ты сможешь заменить эту часть позже, если захочешь веб-интерфейс.
Отчет будет в виде простой текстовой таблицы при запуске команды `report`. Для подсчета посетителей по неделям я добавлю поле `DateTime` и буду фильтровать список.
Если ты скажешь, какие поля нужны для посетителей и предметов, я доработаю структуры. Код будет под лицензией MIT, так что ты сможешь свободно форкать и переписывать часть хранения. Никаких сложных фреймворков, только std, serde и небольшой парсер командной строки. Скажи, могу ли я начать писать каркас?
Звучит очень мило — спасибо! Для формы гостя мне бы хотелось имя, телефон (необязательно), время прибытия и короткое поле для примечаний. Для позиции в инвентаре — только название, количество, единица измерения и необязательное примечание о том, когда нужно пополнить запасы. Очень интересно посмотреть, как это всё оживет, и я с удовольствием поделюсь дополнительными деталями по ходу дела. Давайте сделаем всё просто и уютно!