Skip to content

Instantly share code, notes, and snippets.

@xanf
Created March 28, 2016 08:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save xanf/cf5d8be12137fadbc4ef to your computer and use it in GitHub Desktop.
Save xanf/cf5d8be12137fadbc4ef to your computer and use it in GitHub Desktop.

4.3 Simple CRUD

Реализуйте базовый класс Collection, со следующей логикой:

  • У объекта Collection должно быть поле url в котором хранится адрес для получения коллекции ( к примеру http://jsonplaceholder.typicode.com/todos)
  • У объекта Collection должен быть метод list(callback), который осуществляет GET запрос на URL, указанный в поле url и принимает на вход callback. После завершения запроса необходимо вызвать callback с массивом экземпляров Collection вторым аргументом. Первым аргументом является ошибка, возникшая при загрузке
  • Collection должен иметь конструктор, принимающий на вход один параметр - объект и копирующий все его поля в this
  • У экземпляра Collection должен быть метод save(cb), работающий по следующей логике:
    • если у экземпляра Collection нет id - то необходимо выполнить POST запрос на url. Содержимое запроса - все поля текущего экземпляра Collection. В ответе необходимо получить id и сохранить его в экземпляр Collection
    • если у экземпляра Collection есть id - то необходимо выполнить PATCH запрос на ${url}/${id}. В запрос необходимо включить только измененные поля экземпляра Collection с момента последнего вызова save
    • cb вызывается после того, как сохранение было успешно завершено. Единственный параметр cb - ошибка, возникшая при сохранении или null
  • У объекта Collection должен быть метод get(id, callback), который осуществляет GET запрос на URL, ${url}/${id}. После завершения запроса необходимо вызвать callback с экземпляром Collection первым аргументом. Первым аргументом является ошибка, возникшая при загрузке

Реализовать следующую логику приложения:

  • Реализовать класс User унаследованный от Collection. Класс User должен иметь методы list и get аналогичные Collection, но возвращающий экземпляры класса User
  • Класс User должен иметь поле url http://jsonplaceholder.typicode.com/users
  • При сохранении пользователя необходимо проверить следующие утверждения:
    • у пользователя выставлены поля name, username и email
    • у пользователя email является корректным адресом электронной почты
  • Реализовать класс User унаследованный от Collection. Класс User должен иметь методы list и get аналогичные Collection, но возвращающий экземпляры класса User
  • Класс User должен иметь поле url http://jsonplaceholder.typicode.com/users
  • При сохранении пользователя необходимо проверить следующие утверждения:
    • у пользователя выставлены поля name, username и email
    • у пользователя email является корректным адресом электронной почты
  • Реализовать класс Album унаследованный от Collection. Класс Album должен иметь методы list и get аналогичные Collection, но возвращающий экземпляры класса Album
  • Класс Album должен иметь поле url http://jsonplaceholder.typicode.com/albums
  • При сохранении альбома необходимо проверить следующие утверждения:
    • у альбомы выставлены поля userId, title
  • Реализовать класс Photo унаследованный от Collection. Класс Photo должен иметь методы list и get аналогичные Collection, но возвращающий экземпляры класса Photo
  • Класс Photo должен иметь поле url http://jsonplaceholder.typicode.com/photos
  • Экземпляры класса User должен иметь метод getAlbums(cb), который возвращает массив Album, принадлежащих пользователю
  • Экземпляры класса Album должен иметь метод getPhotos(cb), который возвращает массив Photo, принадлежащих альбому
  • Реализовать следующую логику на странице:
    • При загрузке отображается список имен пользователей
    • При клике по имени пользователя отображается список его альбомов
    • При клике по имени альбома отображается список фото в нем (используйте thumbnailUrl)
    • При клике по фото, оно открывается полноразмерно в новом окне
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment