mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-24 12:02:48 +00:00
70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
import mongoose from 'mongoose';
|
|
import { nanoid } from 'nanoid';
|
|
import _ from 'lodash';
|
|
import zlib from 'zlib';
|
|
|
|
|
|
const HomebrewSchema = mongoose.Schema({
|
|
shareId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } },
|
|
editId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } },
|
|
googleId : { type: String },
|
|
title : { type: String, default: '' },
|
|
text : { type: String, default: '' },
|
|
textBin : { type: Buffer },
|
|
pageCount : { type: Number, default: 1 },
|
|
|
|
description : { type: String, default: '' },
|
|
tags : [String],
|
|
systems : [String],
|
|
lang : { type: String, default: 'en' },
|
|
renderer : { type: String, default: '' },
|
|
authors : [String],
|
|
invitedAuthors : [String],
|
|
published : { type: Boolean, default: false },
|
|
thumbnail : { type: String, default: '' },
|
|
|
|
createdAt : { type: Date, default: Date.now },
|
|
updatedAt : { type: Date, default: Date.now },
|
|
lastViewed : { type: Date, default: Date.now },
|
|
views : { type: Number, default: 0 },
|
|
version : { type: Number, default: 1 }
|
|
}, { versionKey: false });
|
|
|
|
HomebrewSchema.statics.increaseView = async function(query) {
|
|
const brew = await Homebrew.findOne(query).exec();
|
|
brew.lastViewed = new Date();
|
|
brew.views = brew.views + 1;
|
|
await brew.save()
|
|
.catch((err)=>{
|
|
return err;
|
|
});
|
|
return brew;
|
|
};
|
|
|
|
HomebrewSchema.statics.get = async function(query, fields=null){
|
|
const brew = await Homebrew.findOne(query, fields).orFail()
|
|
.catch((error)=>{throw 'Can not find brew';});
|
|
if(!_.isNil(brew.textBin)) { // Uncompress zipped text field
|
|
const unzipped = zlib.inflateRawSync(brew.textBin);
|
|
brew.text = unzipped.toString();
|
|
}
|
|
return brew;
|
|
};
|
|
|
|
HomebrewSchema.statics.getByUser = async function(username, allowAccess=false, fields=null, filter=null){
|
|
const query = { authors: username, published: true, ...filter };
|
|
if(allowAccess){
|
|
delete query.published;
|
|
}
|
|
const brews = await Homebrew.find(query, fields).lean().exec() //lean() converts results to JSObjects
|
|
.catch((error)=>{throw 'Can not find brews';});
|
|
return brews;
|
|
};
|
|
|
|
const Homebrew = mongoose.model('Homebrew', HomebrewSchema);
|
|
|
|
export {
|
|
HomebrewSchema as schema,
|
|
Homebrew as model
|
|
};
|