37 lines
919 B
Go
37 lines
919 B
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// ChannelMember represents a user's membership in a channel.
|
|
type ChannelMember struct {
|
|
Base
|
|
|
|
ChannelID string `json:"channelId"`
|
|
UserID string `json:"userId"`
|
|
Modes string `json:"modes"`
|
|
JoinedAt time.Time `json:"joinedAt"`
|
|
Nick string `json:"nick"` // denormalized from users table
|
|
}
|
|
|
|
// User returns the full User for this membership.
|
|
func (cm *ChannelMember) User(ctx context.Context) (*User, error) {
|
|
if ul := cm.GetUserLookup(); ul != nil {
|
|
return ul.GetUserByID(ctx, cm.UserID)
|
|
}
|
|
|
|
return nil, fmt.Errorf("user lookup not available")
|
|
}
|
|
|
|
// Channel returns the full Channel for this membership.
|
|
func (cm *ChannelMember) Channel(ctx context.Context) (*Channel, error) {
|
|
if cl := cm.GetChannelLookup(); cl != nil {
|
|
return cl.GetChannelByID(ctx, cm.ChannelID)
|
|
}
|
|
|
|
return nil, fmt.Errorf("channel lookup not available")
|
|
}
|