Skip to content

Commit 419b29f

Browse files
authored
Merge pull request #109 from alexjamesmalcolm/main
feat: Implement fetchAll for MemberManager
2 parents 7358977 + a8775f5 commit 419b29f

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

src/managers/MemberManager.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { PostMemberRemoveResponse } from 'groupme-api-types'
2-
import type { BaseGroup, Client, Collection } from '..'
3-
import { BaseManager, FormerMember, FormerMemberManager, FormerMemberState, Member } from '..'
1+
import type { APIGroup, PostMemberRemoveResponse } from 'groupme-api-types'
2+
import type { BaseGroup, Client } from '..'
3+
import { BaseManager, Collection, FormerMember, FormerMemberManager, FormerMemberState, Member } from '..'
44

55
interface MemberManagerInterface {
66
add(id: string): Promise<Member>
@@ -19,9 +19,36 @@ export default class MemberManager extends BaseManager<Member, typeof Member> im
1919

2020
fetch(): Promise<Collection<string, Member>>
2121
fetch(id: string): Promise<Member>
22-
public async fetch(id?: string): Promise<Collection<string, Member> | Member> {
22+
public fetch(id?: string): Promise<Collection<string, Member> | Member> {
23+
if (typeof id === 'string') {
24+
return this.fetchId(id)
25+
}
26+
return this.fetchAll()
27+
}
28+
29+
private fetchId(id: string): Promise<Member> {
2330
throw new Error('Method not implemented.')
2431
}
32+
33+
private async fetchAll(): Promise<Collection<string, Member>> {
34+
// The /members endpoint is reserved for admins, so to be safe we just fetch the group instead
35+
const groupResponse = await this.client.rest.api<APIGroup>('GET', `groups/${this.group.id}`)
36+
const batch = new Collection<string, Member>()
37+
38+
groupResponse.members?.forEach(data => {
39+
const user = this.client.users._add({
40+
id: data.user_id,
41+
avatar_url: data.image_url,
42+
name: data.name,
43+
})
44+
45+
const member = this._upsert(new Member(this.client, this.group, user, data))
46+
batch.set(member.memberID, member)
47+
})
48+
49+
return batch
50+
}
51+
2552
add(id: string): Promise<Member>
2653
add(ids: string[]): Promise<Collection<string, Member>>
2754
add(ids: string | string[]): Promise<Member> | Promise<Collection<string, Member>> {

0 commit comments

Comments
 (0)