mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-27 04:17:51 -07:00
wip
This commit is contained in:
parent
44a4d1e4a0
commit
c2f1021223
2 changed files with 60 additions and 9 deletions
|
@ -4,22 +4,43 @@ import User, { ILocalUser, IUser } from '../../../../models/user';
|
|||
import DriveFile from '../../../../models/drive-file';
|
||||
import create from '../../../../services/note/create';
|
||||
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
|
||||
*/
|
||||
module.exports = (params: any, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => {
|
||||
// Get 'visibility' parameter
|
||||
const [visibility = 'public', visibilityErr] = $.str.optional().or(['public', 'home', 'followers', 'specified', 'private']).get(params.visibility);
|
||||
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');
|
||||
const [ps, psErr] = getParams(meta, params);
|
||||
if (psErr) return rej(psErr);
|
||||
|
||||
let visibleUsers: IUser[] = [];
|
||||
if (visibleUserIds !== undefined) {
|
||||
visibleUsers = await Promise.all(visibleUserIds.map(id => User.findOne({
|
||||
if (ps.visibleUserIds !== undefined) {
|
||||
visibleUsers = await Promise.all(ps.visibleUserIds.map(id => User.findOne({
|
||||
_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 a new issue