Return canPost and canSeeMembers and topics and description in type group

This commit is contained in:
Hongbo Wu 2022-12-12 22:57:58 +08:00
parent 54ceeb326a
commit f5650acb69
3 changed files with 57 additions and 14 deletions

View file

@ -32,4 +32,16 @@ export class Group {
@OneToMany(() => GroupMembership, (groupMembership) => groupMembership.group)
members!: GroupMembership[]
@Column('text', { nullable: true })
description?: string | null
@Column('text', { nullable: true })
topics?: string | null
@Column('boolean', { default: false })
onlyAdminCanPost!: boolean
@Column('boolean', { default: false })
onlyAdminCanSeeMembers!: boolean
}

View file

@ -71,6 +71,10 @@ export const createGroupResolver = authorized<
name: input.name,
maxMembers: input.maxMembers,
expiresInDays: input.expiresInDays,
description: input.description,
topics: input.topics,
onlyAdminCanPost: input.onlyAdminCanPost,
onlyAdminCanSeeMembers: input.onlyAdminCanSeeMembers,
})
analytics.track({
@ -94,6 +98,10 @@ export const createGroupResolver = authorized<
inviteUrl,
admins: [user],
members: [user],
canSeeMembers: true,
canPost: true,
description: group.description,
topics: group.topics?.split(','),
},
}
} catch (error) {

View file

@ -17,6 +17,10 @@ export const createGroup = async (input: {
name: string
maxMembers?: number | null
expiresInDays?: number | null
description?: string | null
topics?: string[] | null
onlyAdminCanPost?: boolean | null
onlyAdminCanSeeMembers?: boolean | null
}): Promise<[Group, Invite]> => {
const [group, invite] = await AppDataSource.transaction<[Group, Invite]>(
async (t) => {
@ -32,6 +36,10 @@ export const createGroup = async (input: {
const group = await t.getRepository(Group).save({
name: input.name,
createdBy: input.admin,
description: input.description,
topics: input.topics?.join(','),
onlyAdminCanPost: input.onlyAdminCanPost ?? false,
onlyAdminCanSeeMembers: input.onlyAdminCanSeeMembers ?? false,
})
const code = nanoid(8)
@ -71,13 +79,17 @@ export const getRecommendationGroups = async (
return groupMembers.map((gm) => {
const admins: GraphqlUser[] = []
const members: GraphqlUser[] = []
gm.group.members.forEach((m) => {
const user = userDataToUser(m.user)
if (m.isAdmin) {
admins.push(user)
}
members.push(user)
})
const canSeeMembers = gm.group.onlyAdminCanSeeMembers ? gm.isAdmin : true
if (canSeeMembers) {
// Return all members
gm.group.members.forEach((m) => {
const user = userDataToUser(m.user)
if (m.isAdmin) {
admins.push(user)
}
members.push(user)
})
}
return {
id: gm.group.id,
@ -87,6 +99,10 @@ export const getRecommendationGroups = async (
inviteUrl: getInviteUrl(gm.invite),
admins,
members,
topics: gm.group.topics?.split(','),
description: gm.group.description,
canPost: gm.group.onlyAdminCanPost ? gm.isAdmin : true,
canSeeMembers,
}
})
}
@ -135,19 +151,26 @@ having count(*) < $4`,
})
const admins: GraphqlUser[] = []
const members: GraphqlUser[] = []
group.members.forEach((m) => {
const user = userDataToUser(m.user)
if (m.isAdmin) {
admins.push(user)
}
members.push(user)
})
if (!group.onlyAdminCanSeeMembers) {
// Return all members
group.members.forEach((m) => {
const user = userDataToUser(m.user)
if (m.isAdmin) {
admins.push(user)
}
members.push(user)
})
}
return {
...group,
inviteUrl: getInviteUrl(invite),
admins,
members,
topics: group.topics?.split(','),
description: group.description,
canPost: !group.onlyAdminCanPost,
canSeeMembers: !group.onlyAdminCanSeeMembers,
}
}