Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 3x 3x 3x 2x 2x 3x 3x 3x 3x 2x | const { MongoClient, ObjectId } = require('mongodb');
const { ObjectID, Binary } = require('mongodb');
const { retryPromise } = require('../util/promise-util');
const fs = require('fs').promises;
class Db {
constructor(mongodbUrl) {
this.mongodbUrl = mongodbUrl;
}
async connect() {
this.client = await retryPromise(
() => MongoClient.connect(this.mongodbUrl),
3000,
10
);
this.db = this.client.db();
this.images = this.db.collection('images');
return this;
}
async disconnect() {
await this.client.close();
}
/**
* @param {{
* image: string,
* name: stirng,
* format: string,
* formatPriority: number,
* profile: {width: number, height: number, name: string}
* }} records
*/
async add(records) {
const id = ObjectID();
for (let record of records) {
const buffer = await fs.readFile(record.image);
await this.images.insertOne({
id,
name: record.name,
data: Binary(buffer),
created: new Date(),
format: record.format,
formatPriority: record.formatPriority,
width: record.profile.width,
height: record.profile.height,
profile: record.profile.name,
size: 35958
});
}
return id;
}
/**
*
* @param {{
* id: string,
* profile: string,
* formats: [string]
* }} query
*/
async find(query) {
const q = {
$or: [{ id: query.id }, { name: query.id }],
format: { $in: query.formats }
}
if (query.profile) q.profile = query.profile
const sort = {
width: -1,
heigh: -1,
formatPriority: 1
}
return (await this.images.find(q).limit(1).sort(sort).toArray())[0]
}
}
module.exports = Db |