Giter Site home page Giter Site logo

entrance-task-2new's Introduction

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

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

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

Установите библиотеку при помощи команды npm i entrance-task-2new или склонируйте репозиторий на github. Запустите сервис при помощи команды npm start из директории проекта.

Решение представляет собой сервер, построенный на базе фреймворка 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 - на странице отображаются данные школы, а так же можно редактировать школу или удалить её.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.