Misskey: Avoid `delete` syntax when pack models

Created on 1 Feb 2019  ·  6Comments  ·  Source: syuilo/misskey

Summary

4045 のような消し忘れが危ない。

⚙️Server 💚Refactor 🔒Security

All 6 comments

Related #4018

例えばこんな感じ。

import * as mongo from 'mongodb';
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import isObjectId from '../misc/is-objectid';
import { pack as packUser } from './user';

const AbuseUserReport = db.get<IAbuseUserReport>('abuseUserReports');
AbuseUserReport.createIndex('userId');
AbuseUserReport.createIndex('reporterId');
AbuseUserReport.createIndex(['userId', 'reporterId'], { unique: true });
export default AbuseUserReport;

export interface IAbuseUserReport {
    _id: mongo.ObjectID;
    createdAt: Date;
    userId: mongo.ObjectID;
    reporterId: mongo.ObjectID;
    comment: string;
}

type ReportType = string | mongo.ObjectID | IAbuseUserReport;

export const find = async (report: ReportType) =>
    isObjectId(report) ? await AbuseUserReport.findOne({ _id: report }) :
    typeof report === 'string' && mongo.ObjectID.isValid(report) ? await AbuseUserReport.findOne({ _id: new mongo.ObjectID(report) }) :
    report as IAbuseUserReport;

export const packMany = (reports: ReportType[]) =>
    Promise.all(reports.map(pack));

export const pack = async (report: ReportType) => {
    const source = await find(report);

    return {
        id: source._id,
        reporter: await packUser(source.reporterId, null, { detail: true }),
        user: await packUser(source.userId, null, { detail: true })
    };
};

(どこら辺が例えばなのかわからない…)
id: source._id, みたいに個々の必要な値ごとに設定するという意味ならそんな感じでいいとは思います

直接関係ないですが
import { pack as packUser } from './user';みたいに別名でインポートしたくないので

最初から
` export const packUser export const packAbuseUserReport
みたいに定義したい気がする

id: source._id, みたいに個々の必要な値ごとに設定するという意味ならそんな感じでいいとは思います

その通りです。

実質 Duplicate of #4018

Was this page helpful?
0 / 5 - 0 ratings

Related issues

tamaina picture tamaina  ·  3Comments

tamaina picture tamaina  ·  3Comments

AyaMorisawa picture AyaMorisawa  ·  3Comments

syuilo picture syuilo  ·  3Comments

marek-lach picture marek-lach  ·  3Comments