wip
This commit is contained in:
parent
c6ea5419ff
commit
d53d45f797
@ -4,22 +4,43 @@ import User, { ILocalUser, IUser } from '../../../../models/user';
|
|||||||
import DriveFile from '../../../../models/drive-file';
|
import DriveFile from '../../../../models/drive-file';
|
||||||
import create from '../../../../services/note/create';
|
import create from '../../../../services/note/create';
|
||||||
import { IApp } from '../../../../models/app';
|
import { IApp } from '../../../../models/app';
|
||||||
|
import getParams from '../../get-params';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
params: {
|
||||||
|
visibility: {
|
||||||
|
def: $.str.optional().or(['public', 'home', 'followers', 'specified', 'private']),
|
||||||
|
default: 'public',
|
||||||
|
desc: {
|
||||||
|
ja: '投稿の公開範囲'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
visibleUserIds: {
|
||||||
|
def: $.arr($.type(ID)).optional().unique().min(1),
|
||||||
|
desc: {
|
||||||
|
ja: '(投稿の公開範囲が specified の場合)投稿を閲覧できるユーザー'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
def: $.str.optional().nullable().pipe(isValidText),
|
||||||
|
default: null,
|
||||||
|
desc: {
|
||||||
|
ja: '投稿内容'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a note
|
* Create a note
|
||||||
*/
|
*/
|
||||||
module.exports = (params: any, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => {
|
module.exports = (params: any, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => {
|
||||||
// Get 'visibility' parameter
|
const [ps, psErr] = getParams(meta, params);
|
||||||
const [visibility = 'public', visibilityErr] = $.str.optional().or(['public', 'home', 'followers', 'specified', 'private']).get(params.visibility);
|
if (psErr) return rej(psErr);
|
||||||
if (visibilityErr) return rej('invalid visibility');
|
|
||||||
|
|
||||||
// Get 'visibleUserIds' parameter
|
|
||||||
const [visibleUserIds, visibleUserIdsErr] = $.arr($.type(ID)).optional().unique().min(1).get(params.visibleUserIds);
|
|
||||||
if (visibleUserIdsErr) return rej('invalid visibleUserIds');
|
|
||||||
|
|
||||||
let visibleUsers: IUser[] = [];
|
let visibleUsers: IUser[] = [];
|
||||||
if (visibleUserIds !== undefined) {
|
if (ps.visibleUserIds !== undefined) {
|
||||||
visibleUsers = await Promise.all(visibleUserIds.map(id => User.findOne({
|
visibleUsers = await Promise.all(ps.visibleUserIds.map(id => User.findOne({
|
||||||
_id: id
|
_id: id
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
30
src/server/api/get-params.ts
Normal file
30
src/server/api/get-params.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { Query } from 'cafy';
|
||||||
|
|
||||||
|
type Defs = {
|
||||||
|
params: {[key: string]: {
|
||||||
|
def: Query<any>;
|
||||||
|
default?: any;
|
||||||
|
}}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function <T extends Defs>(defs: T, params: any): [{
|
||||||
|
[P in keyof T['params']]: ReturnType<T['params'][P]['def']['get']>[0];
|
||||||
|
}, Error] {
|
||||||
|
const x: any = {};
|
||||||
|
let err: Error = null;
|
||||||
|
Object.keys(defs.params).some(k => {
|
||||||
|
const [v, e] = defs.params[k].def.get(params[k]);
|
||||||
|
if (e) {
|
||||||
|
err = e;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
if (v === undefined && defs.params[k].default) {
|
||||||
|
x[k] = defs.params[k].default;
|
||||||
|
} else {
|
||||||
|
x[k] = v;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return [x, err];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user