kumabook/stickynotes

View on GitHub
src/models/Page.js

Summary

Maintainability
A
3 hrs
Test Coverage
import uuid from 'uuid/v4';
import Model from './Model';
import idb from '../utils/indexedDB';

const Page = new Model('pages');

Page.createObjectStore = function createObjectStore(db) {
  const objectStore = db.createObjectStore(this.name, { keyPath: 'id' });
  objectStore.createIndex('url', 'url', { unique: true });
  idb.transactionComplete(objectStore);
};

Page.findByUrl = function findByUrl(url, db) {
  const objectStore = this.objectStore(db);
  const index = objectStore.index('url');
  return new Promise((resolve, reject) => {
    const request     = index.get(url);
    request.onerror   = reject;
    request.onsuccess = () => resolve(request.result);
  });
};

Page.findOrCreateBy = function findOrCreateBy(query, db) {
  return Page.findByUrl(query.url, db).then((page) => {
    if (page) {
      return page;
    }
    return Page.create({
      id:    uuid(),
      url:   query.url,
      title: query.title,
    }, db);
  });
};

export default Page;