github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/design/slack-ts/slack.ts (about)

     1  /*****************************************
     2  
     3    Slack workspace
     4    
     5  */
     6  
     7  workspace Organization{ // CDoc<Organization>, Workspace descirptor
     8    collections: [Channels]
     9  }
    10  
    11  collection Channels {
    12    channel: ref(Channel)
    13  }
    14  
    15  /******************************************
    16  
    17    Channel workspace
    18    
    19  */
    20  
    21  tag slack("all about slack")
    22  
    23  tag message("all about message")
    24  
    25  workspace Channel{
    26    parent: ref(Organization)
    27    collections: [MessageReaction, ChannelMessage, ThreadMessage]
    28  }
    29  
    30  struct Message {
    31    text: string
    32    typed: TimeStampMs
    33  }
    34  
    35  collection MessageReaction {
    36    message: ref (ChannelMessage | ThreadMessage)
    37    kind: ReactionKind
    38    time: TimeStampMs
    39    unique(Message, sys.Creator, Kind)
    40    tag(slack, message, something)
    41    sort()
    42  }  
    43    
    44  collection ChannelMessage {
    45    message: Message
    46    tag(slack, message, something)
    47  }
    48  
    49  collection ThreadMessage {
    50    message: Message
    51    chanel_message: ref(ChannelMessage)
    52  }
    53  
    54  view ChannelMessageView (ChannelMessage) {
    55    text: message.Text
    56    message_date_time: sys.created
    57    author: sys.creator.Name
    58    reactions: select Kind, count from MessageReaction group by Kind
    59    top_reactors: select last 10 user, insertDatetime from MessageReaction      
    60  }
    61  
    62  It is possible to enrich results using references (e.g. ref. to ChannelMessage is known) (some query language is needed)
    63  
    64  Collection ops: 
    65  - Read first/last n
    66  - Neighborhood of given ID
    67  - Entire collection/workspace (indexing/import)
    68  
    69  Key structure: ((id_hi, id_lo), idx)
    70  Value structure:
    71  - record_data
    72  - next_id_hi // valid for idx=20 (bucket size)
    73  - next_id_lo // valid for idx=20 (bucket size)
    74  
    75  qname is not needed :)
    76