{"id":27135523,"url":"https://github.com/cakeforkit/artworksdb","last_synced_at":"2026-05-18T09:02:04.095Z","repository":{"id":286321858,"uuid":"959906977","full_name":"CakeForKit/artworksDB","owner":"CakeForKit","description":"Цифровая платформа для учета и управления коллекциями произведений искусства. ППО, курс БД","archived":false,"fork":false,"pushed_at":"2025-09-25T11:55:51.000Z","size":257088,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-25T13:34:34.530Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://git.iu7.bmstu.ru/ped22u691/PPO","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CakeForKit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-03T14:43:24.000Z","updated_at":"2025-09-25T11:51:40.000Z","dependencies_parsed_at":"2025-09-25T13:25:12.880Z","dependency_job_id":"50220351-e445-4de5-9249-60e32f82066d","html_url":"https://github.com/CakeForKit/artworksDB","commit_stats":null,"previous_names":["cakeforkit/artworksdb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CakeForKit/artworksDB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CakeForKit%2FartworksDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CakeForKit%2FartworksDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CakeForKit%2FartworksDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CakeForKit%2FartworksDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CakeForKit","download_url":"https://codeload.github.com/CakeForKit/artworksDB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CakeForKit%2FartworksDB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006610,"owners_count":26084148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","postgresql","rest-api"],"created_at":"2025-04-08T01:48:27.055Z","updated_at":"2026-05-18T09:02:04.087Z","avatar_url":"https://github.com/CakeForKit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## Название проекта;\nЦифровая платформа для учета и управления коллекциями произведений искусства\n\n## Описание идеи проекта;\n\nПлатформа для учета и управления коллекциями произведений искусства, предназначенная для частных коллекционеров и музеев. С возможностями отслеживания местонахождения экспонатов, планирования выставок, продажи билетов.\n\nКлючевые особенности:\n- Единая база данных с детальным каталогом: техника, размеры, автор, текщим статусом (в хранилище, на выставке);\n- Интерактивный сайт для: публичного доступа к каталогу и отслеживания местоположения экспонатов;\n- Закрытый раздел для сотрудников: добавление/редактирование экспонатов, организация выставок.\n\n ## Стек\n\n | Компонент               | Технологии/Инструменты         |\n|-------------------------|--------------------------------|\n| Язык                    | **Go**                             |\n| Контейнеризация         | **Docker, Docker Compose**         |\n| Веб-фреймворк           | **Gin**                            |\n| Построение SQL-запросов | **Squirrel**                       |\n| Аутентификация          | Токены (**PASETO/JWT**, гибкость)  |\n| БД                      | **PostgreSQL** / **ClickHouse** (реализован переход с одной бд на другую через миграции и скрипт для переноса данных)\u003cbr\u003e**Redis** (хранение транзакций(бронирования) покупки билетов) |\n| Миграции БД             | **golang-migrate** |\n| Frontend                | Web MPA (HTML-шаблоны через **Go Templ**) |\n| Тестирование            | **Testify** (модульное), **Testcontainers** (интеграционное) |\n| Документация и тесты    | **Swagger** (генерация через go-swagger) |\n\n## Запуск\n```bash\ncd artworks-deployment/\nmake prep\nmake up\n```\n\n## Тестирование\n```bash\nmake allure\n```\n\n\n## Сайт\n\n[http://localhost:8080/museum/events](http://localhost:8080/museum/events)\n![alt text](img/image.png)\n![alt text](img/image-1.png)\n\n## Документация (Swagger)\n\n[http://localhost:8080/swagger/index.html](http://localhost:8080/swagger/index.html)\n\n![swagger1](img/SwaggerUI_page-0001.jpg)\n![swagger1](img/SwaggerUI_page-0002.jpg)\n![swagger1](img/SwaggerUI_page-0003.jpg)\n\n\n\n\n## 4. Краткий анализ аналогичных решений по минимум 3 критериям (1 таблица);\nАналоги представленны в виде информации на сайте Третьяковской галереи, Пушкинского музея, Лувра.\n\n### Третьяковская галерея\n\nНа сайте Третьяковской галереи можно посмотреть в общем списке информацию об имеющихся в архиве картинах. Для поиска необходимой работы пользователю предоставляются возможности по сортировке и фильтрации картин, по автору, названию, категории и периоду из выпадающего списка. \n\nПользователь может получить информацию о каждой имеющейся в галерее картине: размер, материал, техника, автор, название, год создания, инвентарный номер; и о выставках, которые проходят и будут проходить в самой галерее. Также он может купить билет на одну из этих выставок.\n\n### Пушкинский музей\n\nНа сайте Пушкинского музея можно посмотреть в общем списке информацию о хранящихся в нем экспонатах, главными характеристиками которых можно выделить название, коллекцию, автора, страну, год создания, размер, материал, прежнего владельца, музейный номер. По некоторым из данных характеристик возможно осуществление фильтрации (коллекция, автор, страна, прежний владелец) и сортировки (автор, год создания). Также пользователь может получить информацию о наличии произведения искусства в музее в данный момент. И он может посмотреть перечень выставок проходящих в музее по датам и приобрести билеты на них.\n\n\n### Эрмитаж\n\nНа сайте Эрмитажа не представлен общий список имеющихся произведений искусства, экспонаты разбиты на категории внутри, которых возможен поиск по всех доступным на сайте характеристикам объектов искусства, из них главными можно выделить: название, автор, размер, техника, материал, период создания, инвентарный номер. Сортировка экспонатов по каким-либо параметрам не доступна.\n\nНа сайте пользователь может получить информацию о выставках, которые проходят или будут проходить, как в Эрмитаже, так и в других музеях, в которых участвуют картины из его коллекции. Также пользователь может приобрести билеты на выставки Эрмитажа.\n\n\n### Лувр\n\nНа сайте Лувра пользователь может увидеть список имеющихся произведений искусства и их характеристики. Основным можно выделить название, автор, период создания, инвентарный номер, размер, материал, техника, коллекция, страна, прежний владелец, местоположение объекта на момент обновления базы данных.\n\nПользователь может сортировать экспонаты по названию, автору, дате создания, коллекции, инвентарному номеру и актуальности. Также он может осуществлять фильтрацию по названию, автору, периоду создания, коллекции и месту нахождения.\n\nНа сайте можно увидеть выставки, проходящие в данный момент в музее и купить на них билеты. Информации о предстоящих выставках нет.\n\nДля сравнения описанных выше аналогов хранилищ произведений искусства были выбраны критерии:\n\n1. характеристики произведений искусства представленные на сайте;\n2. параметры сортировки экспонатов;\t\n3. параметры фильтрации экспонатов;\t\n4. наличие информации о местоположении картин;\t\n5. наличие информации о предстоящих выставках;\t\n6. наличие информации о текущих выставках;\n7. возможность приобретения билетов на выставки;\n\n![Сравнение аналогов](img/cmp.png)\n![Сравнение аналогов](img/cmp2.png)\n\n## 5. Краткое обоснование целесообразности и актуальности проекта (1 абзац);\nСоздание системы учета экспонатов находящихся в небольших частных коллекциях и распространения информации об их участии в сторонних выставках. С возможностью подписки на рассылку о новых выставках. \n\n## 6. Краткое описание акторов (ролей);\nБаза данных предназначена для сотрудников музея, администратора, авторизованных и неавторизованных пользователей. \n\nПользователи будут использовать разрабатываемое приложение для поиска экспонатов хранящихся в музее, получения информации о них и покупки билетов. \n\nАвторизированные пользователи будут иметь возможность подписаться на рассылку о новых выставках музея. \n\nСотрудники будут иметь возможность добавлять, редактировать  экспоната и мероприятия, в которых они участвуют, например, выставки или реставрации. \n\nАдминистратор будет отвечать за данные о сотрудниках и удаление информации о выставках и экспонатах из базы данных. \n\n## 7. Use-Case - диаграмма (обратить внимание на UML нотацию, отразить разных акторов пересечение их возможностей в приложении); \n\n![Use-Case](img/user-case-4.png)\n\n## 8. ER-диаграмма сущностей (не путать с диаграммой БД – диаграмма сущность-связь не приземлена на конкретную СУБД и показывает сущности системы, в том числе те, которые не будут персистентно храниться);\n\n\n![ER-диаграмма](img/ER_EN.png)\n\n##  9. Пользовательские сценарии (не менее 3 типовых сценариев, в текстовом виде, расписанных по шагам, для разных акторов);\n\nПользователь: смотрит имеющиеся в коллекции произведения искусства, их местоположение и на основе этого выбирает выставку, которую хочет посетить;\n\nАвторизированный пользователь: то же самое + подписывается на рассылку о новых выставках;\n\nСотрудник: заносит информацию о новых экспонатах, изменяет ее при необходимости и удаляет записи об экспонатах при их продаже, назначает реставрацию экспонатов, заносит информацию о выставках (датах проведения и экспонатах которые в них участвуют);\n\nАдминистратор: руководит информацией о сотрудниках;\n\n## 10. Формализация ключевых бизнес-процессов (либо один основной комплексный бизнес процесс, либо 3-4 декомпозированных, небольших, используя BPMN-нотацию).\n\n![bpmn](img/BPMN.png)\n\n\n ## Верхнеуровневое разбиение на компоненты\n\n На базовом уровне выделяем компонент доступа к данным, компонент бизнес-логики и компонент реализации UI. Отобразить диаграммой компонентов. Подумать про принцип инверсии зависимостей\n\n\u003c!-- ![components](img/components.png) --\u003e\n\n\n ## UML диаграммы классов для двух отдельных компонентов\n Компонента UI -- \nMV*-подобного паттерна (MVC, MTV, MVP, MVVM, MVPVM, MVI и др.).\n\n![uml](img/uml.svg)\n\n\n\n\n\n\n\n\n\n\n  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakeforkit%2Fartworksdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcakeforkit%2Fartworksdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcakeforkit%2Fartworksdb/lists"}