shack/src/shelves.js

55 lines
960 B
JavaScript

import knex from './knex';
function curateDatabaseShelf(shelf) {
if (!shelf) {
return null;
}
return {
id: shelf.id,
slug: shelf.slug,
name: shelf.slug,
};
}
async function fetchShelf(shelfId) {
const shelfEntry = await knex('shelves')
.where((builder) => {
const id = Number(shelfId);
if (Number.isNaN(id)) {
builder.where('slug', shelfId);
return;
}
builder.where('id', shelfId);
})
.first();
return curateDatabaseShelf(shelfEntry);
}
async function fetchShelves({ limit = 10 } = {}) {
const shelfEntries = await knex('shelves').limit(limit);
return shelfEntries.map((shelfEntry) => curateDatabaseShelf(shelfEntry));
}
async function createShelf(shelf, user) {
const [shelfEntry] = await knex('shelves')
.insert({
slug: shelf.slug,
founder_id: user.id,
})
.returning('*');
return curateDatabaseShelf(shelfEntry);
}
export {
fetchShelf,
fetchShelves,
createShelf,
curateDatabaseShelf,
};