migrate orion repo into monorepo structure
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
package particle
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ParticleType represents the type of particle
|
||||
type ParticleType string
|
||||
|
||||
const (
|
||||
TypeStream ParticleType = "stream"
|
||||
TypeFolder ParticleType = "folder"
|
||||
TypeMedia ParticleType = "media"
|
||||
TypeFile ParticleType = "file"
|
||||
TypeText ParticleType = "text"
|
||||
TypeQuest ParticleType = "quest"
|
||||
TypePaper ParticleType = "paper"
|
||||
// TypeThink ParticleType = "think"
|
||||
)
|
||||
|
||||
// VisibilityMode represents how access to a particle is determined
|
||||
type VisibilityMode string
|
||||
|
||||
const (
|
||||
VisibilityNetworkAll VisibilityMode = "network_all"
|
||||
VisibilityCustom VisibilityMode = "custom"
|
||||
VisibilityInherited VisibilityMode = "inherited"
|
||||
)
|
||||
|
||||
var ErrInvalidParticleType = errors.New("invalid particle type")
|
||||
var ErrInvalidVisibilityMode = errors.New("invalid visibility mode")
|
||||
|
||||
// ParseParticleType parses a string into a ParticleType
|
||||
func ParseParticleType(s string) (ParticleType, error) {
|
||||
switch s {
|
||||
case string(TypeStream):
|
||||
return TypeStream, nil
|
||||
case string(TypeFolder):
|
||||
return TypeFolder, nil
|
||||
case string(TypeMedia):
|
||||
return TypeMedia, nil
|
||||
case string(TypeFile):
|
||||
return TypeFile, nil
|
||||
case string(TypeText):
|
||||
return TypeText, nil
|
||||
case string(TypeQuest):
|
||||
return TypeQuest, nil
|
||||
case string(TypePaper):
|
||||
return TypePaper, nil
|
||||
default:
|
||||
return "", ErrInvalidParticleType
|
||||
}
|
||||
}
|
||||
|
||||
// ParseVisibilityMode parses a string into a VisibilityMode
|
||||
func ParseVisibilityMode(s string) (VisibilityMode, error) {
|
||||
switch s {
|
||||
case "", string(VisibilityNetworkAll):
|
||||
return VisibilityNetworkAll, nil
|
||||
case string(VisibilityCustom):
|
||||
return VisibilityCustom, nil
|
||||
case string(VisibilityInherited):
|
||||
return VisibilityInherited, nil
|
||||
default:
|
||||
return "", ErrInvalidVisibilityMode
|
||||
}
|
||||
}
|
||||
|
||||
// Stream status values
|
||||
type StreamStatus string
|
||||
|
||||
const (
|
||||
StreamStatusOpen StreamStatus = "open"
|
||||
StreamStatusClosed StreamStatus = "closed"
|
||||
)
|
||||
|
||||
// Particle represents a content particle in the system
|
||||
type Particle struct {
|
||||
ID string
|
||||
Type ParticleType
|
||||
NetworkID string
|
||||
ParentID *string
|
||||
CreatedByEmail string
|
||||
Visibility VisibilityMode
|
||||
Data json.RawMessage
|
||||
UpdatedAt time.Time
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
// CreateInput represents the input for creating a new particle
|
||||
type CreateInput struct {
|
||||
Type ParticleType
|
||||
NetworkID string
|
||||
ParentID *string
|
||||
Data json.RawMessage
|
||||
Members []string // Only used when visibility is custom
|
||||
Visibility VisibilityMode
|
||||
}
|
||||
|
||||
// ListFilter represents filtering options for listing particles
|
||||
type ListFilter struct {
|
||||
Types []ParticleType
|
||||
}
|
||||
|
||||
// Cursor represents a pagination cursor for bidirectional pagination
|
||||
type Cursor struct {
|
||||
Position string // particle ID or timestamp
|
||||
Direction string // "before" or "after"
|
||||
}
|
||||
|
||||
// ParticleList represents a paginated list of particles
|
||||
type ParticleList struct {
|
||||
Particles []*Particle
|
||||
HasMore bool
|
||||
NextCursor *Cursor
|
||||
PrevCursor *Cursor
|
||||
}
|
||||
|
||||
// StreamData represents the data stored for stream particles
|
||||
type StreamData struct {
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"` // "open" or "closed"
|
||||
Description *string `json:"description"`
|
||||
}
|
||||
|
||||
// FolderData represents the data stored for folder particles
|
||||
type FolderData struct {
|
||||
Name string `json:"name"`
|
||||
Color *string `json:"color"`
|
||||
}
|
||||
|
||||
// MediaData represents the data stored for media particles
|
||||
type MediaData struct {
|
||||
ObjectID string `json:"object_id"` // reference to storage object
|
||||
MimeType string `json:"mime_type"`
|
||||
DurationMs int `json:"duration_ms"`
|
||||
// Caption *string `json:"caption"`
|
||||
}
|
||||
|
||||
// FileData represents the data stored for file particles
|
||||
type FileData struct {
|
||||
ObjectID string `json:"object_id"` // reference to storage object
|
||||
Filename string `json:"filename"`
|
||||
MimeType string `json:"mime_type"`
|
||||
Size int64 `json:"size"` // in bytes
|
||||
}
|
||||
|
||||
// TextData represents the data stored for text particles
|
||||
type TextData struct {
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
// QuestData represents the data stored for quest particles
|
||||
type QuestData struct {
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Status *string `json:"status"`
|
||||
AssignedTo *string `json:"assigned_to,omitempty"` // email
|
||||
DueDate *string `json:"due_date,omitempty"` // ISO date string
|
||||
}
|
||||
|
||||
// PaperData represents the data stored for paper particles
|
||||
type PaperData struct {
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"` // markdown
|
||||
}
|
||||
|
||||
// AckInfo represents an acknowledgment record
|
||||
type AckInfo struct {
|
||||
Email string
|
||||
AckedAt time.Time
|
||||
}
|
||||
Reference in New Issue
Block a user