npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

entrance-task-2new

v1.0.0

Published

>Напишите библиотеку, предоставляющую API для работы с расписанием лекций из первого задания.

Downloads

11

Readme

Школа разработки интерфейсов 2017

Вступительное задание №2

Напишите библиотеку, предоставляющую API для работы с расписанием лекций из первого задания.

Решение представляет собой сервер, построенный на базе фреймворка Express. Сервер предоставляет REST API. При проектировании API руководствовалась рекомендациями из стратьи на habrahabr.

Хранение данных производится при помощи MongoDB. Взаимодействие с MongoDB осуществляется при помощи mongoose.

Тестирование производится при помощи Mocha и chai. При написании тестов руководствовалась статьёй на ScotchIO и документацией chai.

Для разработки пользовательского интерфейса использованы React + Redux. При разработке руководствовалась серией статей из блога thegreatcodeadventure.

Структура API

В проекте выделено 3 основных сущности: лекция, школа, аудитория. Схемы для них можно найти в директории /models.

Для оперирования данными предоставляютя следующие запросы:

  • [GET] /v1/lectures/school/:id- возвращает все лекции для данной школы. В параметрах запроса можно передать from и to (даты начала и окнончания поиска) в формате гггг-мм-дд
  • [GET] /v1/lectures/classroom/:id - возвращает все лекции для данной аудитории. В параметрах запроса можно передать from и to (даты начала и окнончания поиска) в формате гггг-мм-дд
  • [GET] /v1/lectures - возвращает данные всех лекций
  • [GET] /v1/lectures/:id - возвращает данные лекции по id
  • [POST] /v1/lectures - служит для создания новой лекции. В параметрах ожидаются следующие данные:
    • name - название лекции
    • date - дата, ожидается в формате: гггг-мм-дд чч-мм
    • classroom - id (для создания лекции необходимо предварительно создать аудиторию и передать её id)
    • schools[] - id[] (для создания лекции необходимо предварительно создать по крайней мере одну школу и передать её id)
    • teacher - фамилия преподавателя
  • [PUT] /v1/lectures/:id - служит для редактирования данных школы. В параметрах ожидаются одни из слудующих данных:
    • name - название лекции
    • date - дата, ожидается в формате: гггг-мм-дд чч-мм
    • classroom - id (для создания лекции необходимо предварительно создать аудиторию и передать её id)
    • schools[] - id[] (для создания лекции необходимо предварительно создать по крайней мере одну школу и передать её id)
    • teacher - фамилия преподавателя
  • [DELETE] /v1/lectures/:id - служит для удаления лекции по id
  • [GET] /v1/classrooms - возвращает данные всех аудитории
  • [GET] /v1/classrooms/:id - возвращает данные аудитории по id
  • [POST] /v1/classrooms - служит для создания новой аудитории. В параметрах ожидаются следующие данные: name - название аудитории location - местоположение аудитории volume - число посадочных мест в аудитории
  • [PUT] /v1/classrooms/:id - служит для редактирования данных аудитории. В параметрах ожидаются одни из следующих данных: name - название аудитории location - местоположение аудитории volume - число посадочных мест в аудитории
  • [DELETE] /v1/classrooms/:id - служит для удаления аудитории по id
  • [GET] /v1/schools - возвращает данные всех школ
  • [GET] /v1/schools/:id - возвращает данные школы по id
  • [POST] /v1/schools - служит для добавления школы. В параметрах ожидаются следующие данные: name - название школы students - число учащихся
  • [PUT] /v1/schools/:id - служит для редактирования данных школы по id. В параметрах ожидаются одни из следующих данных: name - название школы students - число учащихся
  • [DELETE] /v1/schools/:id - служит для удаления школы по id

Для корректной работы сервера необходимо установить последнюю версию NodeJS и MongoBD. Запустить сервер можно при помощи команды npm start из основной директории проекта. Сервер запустится по адресу 9090. Для конфигурации следует использовать файлы, находящиеся в директории /config.

Структура проекта

Серверная часть:

  • /config - конфигурационные файлы. Здесь можно указать порт для запуска сервера и базу данных.
  • /controllers - в директории находится "мозг" сервера. В файл 'crudHelper.js' вынесены переиспользуемые функции.
  • /models - модели сущностей БД.
  • /routes - пути и обработчики для них вынесены в отдельный файл.
  • /test - тесты для сервера (разделены по сущностям для более удобного ориентирования)
  • server.js - непосредственно файл сервера.

Директории веб-интерфейса:

  • /public - директория содержит статические ресурсы и скомпилированный js код ('bundle.js')
  • /src - директория содержит исходный код веб-интерфейса

Веб-интерфейс

Для доступа к веб-интерфейсу необходимо обратиться по пути /. В веб-интерфейсе доступно 4 страницы:

  • indexPage - на странице отображаются перечни лекций, школ и удиторий. На данной странице либо посмотреть данные лекций, школ или аудиторий, либо добавить новые.
  • lecturePage - на странице отображаются данные лекции, а так же можно редактировать лекцию или удалить её.
  • classroomPage - на странице отображаются данные аудитории, а так же можно редактировать адуиторию или удалить её.
  • schoolPage - на странице отображаются данные школы, а так же можно редактировать школу или удалить её.