db/specs/models_heroledger/main/group.v
2025-08-05 11:00:20 +02:00

52 lines
1.8 KiB
V

module group
import freeflowuniverse.herolib.hero.models.core
// Group represents a collaborative or access-controlled unit within the system
@[heap]
pub struct Group {
core.Base
pub mut:
name string // Human-readable name of the group @[index]
description string // Detailed explanation of the group's purpose
dnsrecords []u32 // DNSRecord IDs associated with this group (if any)
administrators []u32 // User IDs with admin rights over the group
config GroupConfig // Configuration settings for group behavior
status GroupStatus // Current operational state
visibility Visibility // Who can see this group
created u64 // Unix timestamp when the group was created
updated u64 // Unix timestamp when the group was last updated
}
@[heap]
pub struct UserGroupMembership {
core.Base
pub mut:
user_id u32 @[index] // Reference to the user entity
group_ids []u32 @[index] // Reference to the group entity
}
// GroupConfig holds rules that govern group membership and behavior
pub struct GroupConfig {
pub mut:
max_members u32 // Maximum number of users allowed
allow_guests bool // Whether guest users (unregistered or read-only) can access
auto_approve bool // Whether member join requests are auto-approved
require_invite bool // Whether joining the group requires an explicit invitation
}
// GroupStatus defines the lifecycle of a group
pub enum GroupStatus {
active
inactive
suspended
archived
}
// Visibility controls who can discover or view the group
pub enum Visibility {
public // Anyone can see and request to join
private // Only invited users can see the group
unlisted // Not visible in search; only accessible by direct link or DNS
}