42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
package entities
|
|
|
|
import (
|
|
"time"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
// Space represents a top-level container for notes and categories
|
|
type Space struct {
|
|
ID bson.ObjectID `bson:"_id,omitempty"`
|
|
Name string `bson:"name"`
|
|
Description string `bson:"description,omitempty"`
|
|
Icon string `bson:"icon,omitempty"`
|
|
OwnerID bson.ObjectID `bson:"owner_id"`
|
|
IsPublic bool `bson:"is_public"`
|
|
CreatedAt time.Time `bson:"created_at"`
|
|
UpdatedAt time.Time `bson:"updated_at"`
|
|
}
|
|
|
|
// Membership represents a user's membership in a space
|
|
type Membership struct {
|
|
ID bson.ObjectID `bson:"_id,omitempty"`
|
|
UserID bson.ObjectID `bson:"user_id"`
|
|
SpaceID bson.ObjectID `bson:"space_id"`
|
|
JoinedAt time.Time `bson:"joined_at"`
|
|
InvitedBy bson.ObjectID `bson:"invited_by,omitempty"`
|
|
InvitedAt *time.Time `bson:"invited_at,omitempty"`
|
|
}
|
|
|
|
// SpaceInvitation represents an invitation to join a space
|
|
type SpaceInvitation struct {
|
|
ID bson.ObjectID `bson:"_id,omitempty"`
|
|
SpaceID bson.ObjectID `bson:"space_id"`
|
|
Email string `bson:"email"`
|
|
Token string `bson:"token"`
|
|
CreatedBy bson.ObjectID `bson:"created_by"`
|
|
CreatedAt time.Time `bson:"created_at"`
|
|
ExpiresAt time.Time `bson:"expires_at"`
|
|
AcceptedAt *time.Time `bson:"accepted_at,omitempty"`
|
|
}
|