15

Готовый телефонный справочник на NODE.JS с админкой

Всем здравствуйте. Начну с истории.

Устроился я на работу техником(в тех отдел), через какое-то время ковыряться с компами поднадоело и поговорив с начальником мне предложили заняться разработкой. Опыт верстки и программирования на php был. Первой задачей была "сделать телефонный справочник", погуглив я не нашел готовых решений, тогда начальник предложил WordPress. Ну не долго думая поставил на наш сервер WP, начал пробовать сделать и понял, что все как-то не так.

Во-первых не нравилось то, что слишком много доп функций в админке, много лишнего.

Во-вторых вп подключает в шаблон то, что мне не нужно, а переверстывать желание небыло.

В-третьих скорость работы, нужно было быстро выдавать информацию, записей в бд больше 3к и почему-то WP справлялся с этим крайне долго.

Начав искать новые варианты я наткнулся на node.js, и подумал "а почему бы не написать все самому". К тому же идея управлять бекэндом и фронтом при помощи одного языка мне очень нравилась.

Сказано - сделано, начал учить и сразу писать. Было много трудностей, куча камней и т.д, к тому же начальник уже стучал по голове со словами "ну когда уже". Ну пришлось "поговнокодить" т.к это изрядно ускоряло процесс.

В общем справочник был сдан, была куча правок, куча переделок но все готово и работает. Только вот "говнокод" не давал мне спать по ночам, я просыпался в поту думая о том, что можно было все сделать не идеально но гораздо лучше.

В общем, я созрел и решил сделать еще один справочник, по функционалу проще но все еще удобный для юзера. Справочник я запланировал выложить в общий доступ.

Для чего?

Во-первых это опыт.

Во-вторых я люблю заниматься подобным.

В-третьих мне хочется услышать критику и исправить его недостатки т.к сам я ввиду отсутствия опыта просто их могу не заметить.

В-четвертых хочется помочь людям которым тоже понадобиться такая штука.

Тут присутствую 2 группы кнопок

1) Left(main)

2)Center(second)

Для удобства понимания на данный момент используется в качестве кнопок branch(отделение) и floor(Этаж), но в целом можно задать все что угодно.

Зайдя на страницу справочника у вас будет показана левая группа, после выбора отделения, в центре появится вторая группа с этажами которые находятся внутри отделения. После выбора этажа вам дадут номера телефонов которые находятся в выбранном отделение, на выбранном этаже.

Так же есть поиск в 2 режимах. Поиск по все базе вне зависимости от выбранного отделения, и поиск внутри выбранного отделения.

Предельно простой функционал для пользователя.

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


Если кто-то будет пользоваться этим справочником то доступ

Адресс админки: домен/panel/admin

login: 'admin',

password: 'wwqe1rws'

Меняется в файле passport.js



Тут перед нами разворачивается 2 кнопки.

Первая - просто добавление кнопок и людей.

Вторая более запутанная для настройки связей и удаления записей.

Первым делом на кнопки Edit вас встретит поиск, при помощи него вы ищите человека с которым хотите делать манипуляции.

Вторая кнопка Assign all. В ней вы настраиваете связи групп кнопок. Т.е в данном случае какие этажи должны быть в отделениях.  Тут же и удаляется эта связь.

Следующая кнопка Edit button, тут вы переименовываете кнопки.

Теперь заглянем в кнопку Edit у конкретной записи. Тут можно отредактировать данные либо удалить запись.

Последняя кнопка assign, она предназначена для  того, что бы настроить связи у записи.

Для начала обратим внимание на поле link main - тут вы указываете какому отделению принадлежит этот контакт, таких полей 2. В Одном вы можете порвать связь, во втором вы добавляете новую.

В поле link main data вы указываете этаж у связки записей "отделение-контакт". В поле link second вы можете порвать эту связь.

Т.е последовательность добавления такая

На вкладке add добавляем кнопки и записи, идем в edit, жмем Assign all и настраиваем этажи для отделений. Затем ищем запись, жмем assign у нужной и присваиваем ее к отделению, затем указываем на каком этаже внутри этого отделения нужно выводить запись.

Админка получилась запутанная но все же все достаточно просто.

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

В общем я открыт для критики и советам

Код справочника https://github.com/ura2rist/Open-Phone-Book

Так же если есть какие-то вопросы или т.п то можно написать в телегу @urifcof там я тоже сразу окажу поддержку)

Web-технологии

533 поста5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

1
Автор поста оценил этот комментарий

Сервер не нужно писать. Нужно приложить filename.example с примером или в инструкции написать.


Немного код ревью (без обид, только факты):

https://github.com/ura2rist/Open-Phone-Book/blob/master/mode... что тут за непонятные переменные "m_l" и подобные?


Хранить логин пароль к базе в гите... Нужо брать их из конфига


"main", "data" это названия таблиц? Давайте названиями таблиц осмысленные названия.

И на каждую таблицу должен быть свой файл (класс) модели.


Как развернуть базу данных с нужными таблицами?


Роуты действительно ужасны. В роутах не должно быть столько логики, она должна быть в котроллерах. Изучите MVC, чтобы более лучше понять как лучше сделать


Возьмите Vue.js вместо jquery, будет намного удобнее и приятнее работать с ним.

Бутстрап подключите из npm, а не из cdn. CDN хорошо для публичных сайтов, для внутри-корпоративных сайтов плохо


https://github.com/ura2rist/Open-Phone-Book/blob/master/view... Здесь год указать не 2020, а кодом чтобы генерировался сам, не будете же вы заходить каждый год и менять.


И добавить инструкцию по развертке приложения было бы отлично

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за советы, учту)

0
Автор поста оценил этот комментарий
Так же как и везде помогает, перестаёшь писать код лестницей и пишешь линейно :)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

спасибо за совет, учту его

0
Автор поста оценил этот комментарий
Да читать такие лестница проминов это дикий ад же. Давно async await же есть в js
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Есть но как он тут поможет не особо понимаю, но спасибо за совет, изучу этот вопрос и выкачу обновление в будущем)

показать ответы
0
Автор поста оценил этот комментарий
Если оно маленькое и такое чтобы было не сложно развернуть, то может было бы проще в контейнеры все это упаковать?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

в какие контейнеры?

показать ответы
1
Автор поста оценил этот комментарий
Просимы в админских роутах читать сплошное блаженство :) и кстати выпилили бы айпишник вашей продакшен базы(это же продакшен у вас в моделях упомянут?) из сорцов:)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А что не так с промисами?

Нет смысла выпиливать, тестовый сервер, удалю сегодня-завтра

показать ответы
0
DELETED
Автор поста оценил этот комментарий
Чем только не занимаются! Лицензия MS Outlook в масштабах любой приличной компании не так уж и дорога.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Зачем для справочника использовать информационного менеджерами с функциями почтового клиента? Зачем платить? По этой же причине я отказался от того же вп, куча ненужных кнопок и т.д, ток Outlook еще и платный.

В целом понятное дело - альтернатив куча, по факту на любой CMS такое сделать можно.

0
Автор поста оценил этот комментарий
Хорошая весч. Знать бы как юзать)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ставишь ноду и юзаешь)

0
Автор поста оценил этот комментарий

Я в программировании не очень. Скажите, как именно это работает? В браузере? Если вкратце, то что необходимо установить, что бы эта тема завелась? Спасибо!

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да работает через браузер. Для работы потребуется node.js и mysql, это если коротко. Если нужно подробней то можешь в лс или телегу вопросы задавать, подскажу

показать ответы