diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-04-20 13:31:43 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-04-20 13:31:43 +0900 |
| commit | 4953842ff1c65fc850c856e11598e9901ff7c6e1 (patch) | |
| tree | f06129067250842ee44a975235a054cc27b3dc44 /src/models | |
| parent | :art: (diff) | |
| download | misskey-4953842ff1c65fc850c856e11598e9901ff7c6e1.tar.gz misskey-4953842ff1c65fc850c856e11598e9901ff7c6e1.tar.bz2 misskey-4953842ff1c65fc850c856e11598e9901ff7c6e1.zip | |
:v:
Diffstat (limited to 'src/models')
| -rw-r--r-- | src/models/favorite.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/models/favorite.ts b/src/models/favorite.ts index 5387b29457..d24833f191 100644 --- a/src/models/favorite.ts +++ b/src/models/favorite.ts @@ -1,5 +1,7 @@ import * as mongo from 'mongodb'; +import deepcopy = require('deepcopy'); import db from '../db/mongodb'; +import { pack as packNote } from './note'; const Favorite = db.get<IFavorite>('favorites'); Favorite.createIndex(['userId', 'noteId'], { unique: true }); @@ -38,3 +40,35 @@ export async function deleteFavorite(favorite: string | mongo.ObjectID | IFavori _id: f._id }); } + +/** + * Pack a favorite for API response + */ +export const pack = ( + favorite: any, + me: any +) => new Promise<any>(async (resolve, reject) => { + let _favorite: any; + + // Populate the favorite if 'favorite' is ID + if (mongo.ObjectID.prototype.isPrototypeOf(favorite)) { + _favorite = await Favorite.findOne({ + _id: favorite + }); + } else if (typeof favorite === 'string') { + _favorite = await Favorite.findOne({ + _id: new mongo.ObjectID(favorite) + }); + } else { + _favorite = deepcopy(favorite); + } + + // Rename _id to id + _favorite.id = _favorite._id; + delete _favorite._id; + + // Populate note + _favorite.note = await packNote(_favorite.noteId, me); + + resolve(_favorite); +}); |