Sharkey/src/server/api/endpoints/users/groups/joined.ts

41 lines
933 B
TypeScript
Raw Normal View History

2019-05-18 20:36:33 +09:00
import define from '../../../define';
import { UserGroups, UserGroupJoinings } from '../../../../../models';
2019-05-19 20:41:23 +09:00
import { Not, In } from 'typeorm';
2019-05-18 20:36:33 +09:00
export const meta = {
desc: {
'ja-JP': '自分の所属するユーザーグループ一覧を取得します。'
},
tags: ['groups', 'account'],
requireCredential: true,
kind: 'read:user-groups',
res: {
2019-06-27 18:04:09 +09:00
type: 'array' as const,
optional: false as const, nullable: false as const,
2019-05-18 20:36:33 +09:00
items: {
2019-06-27 18:04:09 +09:00
type: 'object' as const,
optional: false as const, nullable: false as const,
2019-05-18 20:36:33 +09:00
ref: 'UserGroup',
}
},
};
export default define(meta, async (ps, me) => {
2019-05-19 20:41:23 +09:00
const ownedGroups = await UserGroups.find({
userId: me.id,
});
2019-05-18 20:36:33 +09:00
const joinings = await UserGroupJoinings.find({
userId: me.id,
2019-05-19 23:29:28 +09:00
...(ownedGroups.length > 0 ? {
userGroupId: Not(In(ownedGroups.map(x => x.id)))
} : {})
2019-05-18 20:36:33 +09:00
});
return await Promise.all(joinings.map(x => UserGroups.pack(x.userGroupId)));
});