summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/users/relation.ts
blob: 18ec5d44b3f051edfdecfbf53548386590ec8eaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import $ from 'cafy';
import define from '../../define';
import { ID } from '@/misc/cafy-id';
import { Users } from '../../../../models';

export const meta = {
	tags: ['users'],

	requireCredential: true as const,

	params: {
		userId: {
			validator: $.either($.type(ID), $.arr($.type(ID)).unique()),
		}
	},

	res: {
		oneOf: [
			{
				type: 'object' as const,
				optional: false as const, nullable: false as const,
				properties: {
					id: {
						type: 'string' as const,
						optional: false as const, nullable: false as const,
						format: 'id'
					},
					isFollowing: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					hasPendingFollowRequestFromYou: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					hasPendingFollowRequestToYou: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					isFollowed: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					isBlocking: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					isBlocked: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					},
					isMuted: {
						type: 'boolean' as const,
						optional: false as const, nullable: false as const
					}
				}
			},
			{
				type: 'array' as const,
				optional: false as const, nullable: false as const,
				items: {
					type: 'object' as const,
					optional: false as const, nullable: false as const,
					properties: {
						id: {
							type: 'string' as const,
							optional: false as const, nullable: false as const,
							format: 'id'
						},
						isFollowing: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						hasPendingFollowRequestFromYou: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						hasPendingFollowRequestToYou: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						isFollowed: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						isBlocking: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						isBlocked: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						},
						isMuted: {
							type: 'boolean' as const,
							optional: false as const, nullable: false as const
						}
					}
				}
			}
		]
	}
};

export default define(meta, async (ps, me) => {
	const ids = Array.isArray(ps.userId) ? ps.userId : [ps.userId];

	const relations = await Promise.all(ids.map(id => Users.getRelation(me.id, id)));

	return Array.isArray(ps.userId) ? relations : relations[0];
});