From f7069dcd18d72b52408a6bd80ad8f14492163e19 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 31 Oct 2018 11:16:13 +0900 Subject: 良い感じに MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/blocking.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/models/blocking.ts') diff --git a/src/models/blocking.ts b/src/models/blocking.ts index 2974b53554..3eace3989a 100644 --- a/src/models/blocking.ts +++ b/src/models/blocking.ts @@ -1,7 +1,12 @@ import * as mongo from 'mongodb'; import db from '../db/mongodb'; +import isObjectId from '../misc/is-objectid'; +const deepcopy = require('deepcopy'); +import { pack as packUser } from './user'; const Blocking = db.get('blocking'); +Blocking.createIndex('blockerId'); +Blocking.createIndex('blockeeId'); Blocking.createIndex(['blockerId', 'blockeeId'], { unique: true }); export default Blocking; @@ -11,3 +16,39 @@ export type IBlocking = { blockeeId: mongo.ObjectID; blockerId: mongo.ObjectID; }; + +export const packMany = async ( + blockings: (string | mongo.ObjectID | IBlocking)[], + me?: string | mongo.ObjectID | IUser +) => { + return (await Promise.all(blockings.map(x => pack(x, me)))).filter(x => x != null); +}; + +export const pack = ( + blocking: any, + me?: any +) => new Promise(async (resolve, reject) => { + let _blocking: any; + + // Populate the blocking if 'blocking' is ID + if (isObjectId(blocking)) { + _blocking = await Blocking.findOne({ + _id: blocking + }); + } else if (typeof blocking === 'string') { + _blocking = await Blocking.findOne({ + _id: new mongo.ObjectID(blocking) + }); + } else { + _blocking = deepcopy(blocking); + } + + // Rename _id to id + _blocking.id = _blocking._id; + delete _blocking._id; + + // Populate blockee + _blocking.blockee = await packUser(_blocking.blockeeId, me); + + resolve(_blocking); +}); -- cgit v1.2.3-freya