shack/src/shelves.js

55 lines
960 B
JavaScript
Raw Normal View History

2023-06-03 21:32:50 +00:00
import knex from './knex';
2023-06-03 21:32:50 +00:00
function curateDatabaseShelf(shelf) {
if (!shelf) {
return null;
}
2023-06-03 21:32:50 +00:00
return {
id: shelf.id,
slug: shelf.slug,
2023-06-11 03:32:02 +00:00
name: shelf.slug,
2023-06-03 21:32:50 +00:00
};
}
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) {
2023-06-25 17:52:00 +00:00
const [shelfEntry] = await knex('shelves')
2023-06-03 21:32:50 +00:00
.insert({
slug: shelf.slug,
founder_id: user.id,
})
.returning('*');
2023-06-03 21:32:50 +00:00
return curateDatabaseShelf(shelfEntry);
}
2023-06-03 21:32:50 +00:00
export {
fetchShelf,
fetchShelves,
createShelf,
2023-06-05 23:30:46 +00:00
curateDatabaseShelf,
};