35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const mongoosePaginate = require('mongoose-paginate-v2');
|
|
const s3Storage = require('../plugins/s3Storage');
|
|
|
|
function pdfUri(uri) {
|
|
if (!uri) return null;
|
|
if (uri.startsWith('http://') || uri.startsWith('https://')) return uri;
|
|
const fileName = uri.startsWith('/') ? uri.split('/').pop() : uri;
|
|
return s3Storage.getPublicUrl(`uploads/pdf/${fileName}`);
|
|
}
|
|
|
|
function slideUrl(slide) {
|
|
if (!slide) return null;
|
|
if (slide.startsWith('http://') || slide.startsWith('https://')) return slide;
|
|
const imageName = slide.startsWith('/') ? slide.split('/').pop() : slide;
|
|
const key = imageName.endsWith('.jpeg')
|
|
? `uploads/books/${imageName}`
|
|
: `uploads/books/${imageName}.jpeg`;
|
|
return s3Storage.getPublicUrl(key);
|
|
}
|
|
|
|
const BookSchema = mongoose.Schema({
|
|
title: String,
|
|
uri: { type: String, get: pdfUri, default: null },
|
|
slides: {
|
|
default: [],
|
|
type: [String],
|
|
get: (slides) => (slides || []).map(slideUrl),
|
|
}
|
|
});
|
|
|
|
BookSchema.plugin(mongoosePaginate);
|
|
|
|
module.exports = mongoose.model('Book', BookSchema);
|