feat(backend): add unlisted members, private member list, custom members header
This commit is contained in:
parent
ba48ba0eb2
commit
ef9b186e66
14 changed files with 135 additions and 34 deletions
|
@ -26,6 +26,7 @@ type Member struct {
|
|||
Links []string
|
||||
Names []FieldEntry
|
||||
Pronouns []PronounEntry
|
||||
Unlisted bool
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -68,10 +69,15 @@ func (db *DB) UserMember(ctx context.Context, userID xid.ID, memberRef string) (
|
|||
}
|
||||
|
||||
// UserMembers returns all of a user's members, sorted by name.
|
||||
func (db *DB) UserMembers(ctx context.Context, userID xid.ID) (ms []Member, err error) {
|
||||
sql, args, err := sq.Select("*").
|
||||
func (db *DB) UserMembers(ctx context.Context, userID xid.ID, showHidden bool) (ms []Member, err error) {
|
||||
builder := sq.Select("*").
|
||||
From("members").Where("user_id = ?", userID).
|
||||
OrderBy("name", "id").ToSql()
|
||||
OrderBy("name", "id")
|
||||
if !showHidden {
|
||||
builder = builder.Where("unlisted = ?", false)
|
||||
}
|
||||
|
||||
sql, args, err := builder.ToSql()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "building sql")
|
||||
}
|
||||
|
@ -148,6 +154,7 @@ func (db *DB) UpdateMember(
|
|||
ctx context.Context,
|
||||
tx pgx.Tx, id xid.ID,
|
||||
name, displayName, bio *string,
|
||||
unlisted *bool,
|
||||
links *[]string,
|
||||
avatar *string,
|
||||
) (m Member, err error) {
|
||||
|
@ -190,6 +197,9 @@ func (db *DB) UpdateMember(
|
|||
if links != nil {
|
||||
builder = builder.Set("links", *links)
|
||||
}
|
||||
if unlisted != nil {
|
||||
builder = builder.Set("unlisted", *unlisted)
|
||||
}
|
||||
|
||||
if avatar != nil {
|
||||
if *avatar == "" {
|
||||
|
|
|
@ -20,6 +20,7 @@ type User struct {
|
|||
Username string
|
||||
DisplayName *string
|
||||
Bio *string
|
||||
MemberTitle *string
|
||||
|
||||
Avatar *string
|
||||
Links []string
|
||||
|
@ -35,8 +36,9 @@ type User struct {
|
|||
FediverseAppID *int64
|
||||
FediverseInstance *string
|
||||
|
||||
MaxInvites int
|
||||
IsAdmin bool
|
||||
MaxInvites int
|
||||
IsAdmin bool
|
||||
ListPrivate bool
|
||||
|
||||
DeletedAt *time.Time
|
||||
SelfDelete *bool
|
||||
|
@ -317,10 +319,11 @@ func (db *DB) UpdateUser(
|
|||
ctx context.Context,
|
||||
tx pgx.Tx, id xid.ID,
|
||||
displayName, bio *string,
|
||||
memberTitle *string, listPrivate *bool,
|
||||
links *[]string,
|
||||
avatar *string,
|
||||
) (u User, err error) {
|
||||
if displayName == nil && bio == nil && links == nil && avatar == nil {
|
||||
if displayName == nil && bio == nil && links == nil && avatar == nil && memberTitle == nil && listPrivate == nil {
|
||||
sql, args, err := sq.Select("*").From("users").Where("id = ?", id).ToSql()
|
||||
if err != nil {
|
||||
return u, errors.Wrap(err, "building sql")
|
||||
|
@ -349,9 +352,19 @@ func (db *DB) UpdateUser(
|
|||
builder = builder.Set("bio", *bio)
|
||||
}
|
||||
}
|
||||
if memberTitle != nil {
|
||||
if *memberTitle == "" {
|
||||
builder = builder.Set("member_title", nil)
|
||||
} else {
|
||||
builder = builder.Set("member_title", *memberTitle)
|
||||
}
|
||||
}
|
||||
if links != nil {
|
||||
builder = builder.Set("links", *links)
|
||||
}
|
||||
if listPrivate != nil {
|
||||
builder = builder.Set("list_private", *listPrivate)
|
||||
}
|
||||
|
||||
if avatar != nil {
|
||||
if *avatar == "" {
|
||||
|
@ -492,7 +505,7 @@ func (db *DB) CleanUser(ctx context.Context, id xid.ID) error {
|
|||
}
|
||||
}
|
||||
|
||||
members, err := db.UserMembers(ctx, u.ID)
|
||||
members, err := db.UserMembers(ctx, u.ID, true)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "getting members")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue