repositories

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package repositories provides data access layer implementations.

Package repositories provides data access layer implementations.

Package repositories provides data access layer implementations.

Index

Constants

View Source
const DefaultMaxHistoryPerProject = 100

DefaultMaxHistoryPerProject is the default maximum number of operations to keep per project.

Variables

View Source
var ErrChannelOffsetNotFound = errors.New("instance channel offset not found")

ErrChannelOffsetNotFound is returned by UpdateInstanceChannelFadeBehavior when the targeted offset doesn't exist on the instance. Mappers convert it to a SIDECAR_UNRESOLVED warning rather than failing the import.

Functions

func MarshalState added in v0.2.30

func MarshalState(state interface{}) (string, error)

Helper to marshal state to JSON string

func NewInvitationID added in v0.2.31

func NewInvitationID() string

NewInvitationID generates a new invitation ID.

func UnmarshalState added in v0.2.30

func UnmarshalState(jsonStr string, target interface{}) error

Helper to unmarshal state from JSON string

Types

type CueListRepository

type CueListRepository struct {
	// contains filtered or unexported fields
}

CueListRepository handles cue list data access.

func NewCueListRepository

func NewCueListRepository(db *gorm.DB) *CueListRepository

NewCueListRepository creates a new CueListRepository.

func (*CueListRepository) CountCues

func (r *CueListRepository) CountCues(ctx context.Context, cueListID string) (int64, error)

CountCues returns the number of cues in a cue list.

func (*CueListRepository) Create

func (r *CueListRepository) Create(ctx context.Context, cueList *models.CueList) error

Create creates a new cue list.

func (*CueListRepository) Delete

func (r *CueListRepository) Delete(ctx context.Context, id string) error

Delete deletes a cue list by ID.

func (*CueListRepository) FindByID

func (r *CueListRepository) FindByID(ctx context.Context, id string) (*models.CueList, error)

FindByID returns a cue list by ID.

func (*CueListRepository) FindByProjectID

func (r *CueListRepository) FindByProjectID(ctx context.Context, projectID string) ([]models.CueList, error)

FindByProjectID returns all cue lists in a project.

func (*CueListRepository) GetCues

func (r *CueListRepository) GetCues(ctx context.Context, cueListID string) ([]models.Cue, error)

GetCues returns all cues in a cue list.

func (*CueListRepository) Update

func (r *CueListRepository) Update(ctx context.Context, cueList *models.CueList) error

Update updates an existing cue list.

type CueRepository

type CueRepository struct {
	// contains filtered or unexported fields
}

CueRepository handles cue data access.

func NewCueRepository

func NewCueRepository(db *gorm.DB) *CueRepository

NewCueRepository creates a new CueRepository.

func (*CueRepository) CountCuesByLookIDs added in v0.2.30

func (r *CueRepository) CountCuesByLookIDs(ctx context.Context, lookIDs []string) (int64, error)

CountCuesByLookIDs returns the total number of cues using any of the given look IDs.

func (*CueRepository) Create

func (r *CueRepository) Create(ctx context.Context, cue *models.Cue) error

Create creates a new cue.

func (*CueRepository) Delete

func (r *CueRepository) Delete(ctx context.Context, id string) error

Delete deletes a cue by ID.

func (*CueRepository) DeleteByCueListID

func (r *CueRepository) DeleteByCueListID(ctx context.Context, cueListID string) error

DeleteByCueListID deletes all cues in a cue list.

func (*CueRepository) FindByCueListID

func (r *CueRepository) FindByCueListID(ctx context.Context, cueListID string) ([]models.Cue, error)

FindByCueListID returns all cues in a cue list ordered by cue number.

func (*CueRepository) FindByID

func (r *CueRepository) FindByID(ctx context.Context, id string) (*models.Cue, error)

FindByID returns a cue by ID.

func (*CueRepository) FindCueListIDsByLookID added in v0.2.30

func (r *CueRepository) FindCueListIDsByLookID(ctx context.Context, lookID string) ([]string, error)

FindCueListIDsByLookID returns all unique cue list IDs that have cues using the given look.

func (*CueRepository) Update

func (r *CueRepository) Update(ctx context.Context, cue *models.Cue) error

Update updates an existing cue.

type EffectRepository added in v0.2.30

type EffectRepository struct {
	// contains filtered or unexported fields
}

EffectRepository handles effect data access.

func NewEffectRepository added in v0.2.30

func NewEffectRepository(db *gorm.DB) *EffectRepository

NewEffectRepository creates a new EffectRepository.

func (*EffectRepository) AddChannelToEffectFixture added in v0.2.30

func (r *EffectRepository) AddChannelToEffectFixture(ctx context.Context, effectFixtureID string, channelOffset *int, channelType *string) error

AddChannelToEffectFixture adds a channel override to an effect fixture.

func (*EffectRepository) AddChannelToEffectFixtureWithScales added in v0.2.30

func (r *EffectRepository) AddChannelToEffectFixtureWithScales(ctx context.Context, effectFixtureID string, channelOffset *int, channelType *string, amplitudeScale, frequencyScale *float64) error

AddChannelToEffectFixtureWithScales adds a channel override with amplitude and frequency scales.

func (*EffectRepository) AddEffectToCue added in v0.2.30

func (r *EffectRepository) AddEffectToCue(ctx context.Context, cueID, effectID string, intensity, speed float64) error

AddEffectToCue adds an effect to a cue with specified intensity and speed.

func (*EffectRepository) AddFixtureToEffect added in v0.2.30

func (r *EffectRepository) AddFixtureToEffect(ctx context.Context, effectID, fixtureID string, phaseOffset, amplitudeScale *float64) error

AddFixtureToEffect adds a fixture to an effect with optional phase offset and amplitude scale.

func (*EffectRepository) CountEffectsByCueID added in v0.2.30

func (r *EffectRepository) CountEffectsByCueID(ctx context.Context, cueID string) (int64, error)

CountEffectsByCueID returns the number of effects attached to a cue.

func (*EffectRepository) CountFixtures added in v0.2.30

func (r *EffectRepository) CountFixtures(ctx context.Context, effectID string) (int64, error)

CountFixtures returns the number of fixtures in an effect.

func (*EffectRepository) Create added in v0.2.30

func (r *EffectRepository) Create(ctx context.Context, effect *models.Effect) error

Create creates a new effect.

func (*EffectRepository) CreateWithFixtures added in v0.2.30

func (r *EffectRepository) CreateWithFixtures(ctx context.Context, effect *models.Effect, fixtures []models.EffectFixture) error

CreateWithFixtures creates an effect with its fixtures in a transaction.

func (*EffectRepository) Delete added in v0.2.30

func (r *EffectRepository) Delete(ctx context.Context, id string) error

Delete deletes an effect by ID. This cascades to delete associated EffectFixtures and EffectChannels.

func (*EffectRepository) DeleteEffectChannel added in v0.2.30

func (r *EffectRepository) DeleteEffectChannel(ctx context.Context, channelID string) error

DeleteEffectChannel deletes an effect channel by ID.

func (*EffectRepository) DeleteEffectFixtures added in v0.2.30

func (r *EffectRepository) DeleteEffectFixtures(ctx context.Context, effectID string) error

DeleteEffectFixtures deletes all fixtures for an effect.

func (*EffectRepository) FindByID added in v0.2.30

func (r *EffectRepository) FindByID(ctx context.Context, id string) (*models.Effect, error)

FindByID returns an effect by ID.

func (*EffectRepository) FindByProjectID added in v0.2.30

func (r *EffectRepository) FindByProjectID(ctx context.Context, projectID string) ([]*models.Effect, error)

FindByProjectID returns all effects in a project.

func (*EffectRepository) FindCueEffectByID added in v0.2.30

func (r *EffectRepository) FindCueEffectByID(ctx context.Context, id string) (*models.CueEffect, error)

FindCueEffectByID returns a cue effect by its ID.

func (*EffectRepository) FindEffectChannelByID added in v0.2.30

func (r *EffectRepository) FindEffectChannelByID(ctx context.Context, id string) (*models.EffectChannel, error)

FindEffectChannelByID returns an effect channel by its ID.

func (*EffectRepository) FindEffectFixtureByID added in v0.2.30

func (r *EffectRepository) FindEffectFixtureByID(ctx context.Context, id string) (*models.EffectFixture, error)

FindEffectFixtureByID returns an effect fixture by its ID.

func (*EffectRepository) FindEffectsByCueID added in v0.2.30

func (r *EffectRepository) FindEffectsByCueID(ctx context.Context, cueID string) ([]*models.CueEffect, error)

FindEffectsByCueID returns all effects attached to a cue.

func (*EffectRepository) FindWithFixtures added in v0.2.30

func (r *EffectRepository) FindWithFixtures(ctx context.Context, id string) (*models.Effect, error)

FindWithFixtures returns an effect with its fixtures and channels preloaded.

func (*EffectRepository) GetCueEffect added in v0.2.30

func (r *EffectRepository) GetCueEffect(ctx context.Context, cueID, effectID string) (*models.CueEffect, error)

GetCueEffect returns a specific cue-effect relationship.

func (*EffectRepository) GetEffectChannels added in v0.2.30

func (r *EffectRepository) GetEffectChannels(ctx context.Context, effectFixtureID string) ([]models.EffectChannel, error)

GetEffectChannels returns all channels for an effect fixture.

func (*EffectRepository) GetEffectFixture added in v0.2.30

func (r *EffectRepository) GetEffectFixture(ctx context.Context, effectID, fixtureID string) (*models.EffectFixture, error)

GetEffectFixture returns a specific effect-fixture relationship.

func (*EffectRepository) GetEffectFixtures added in v0.2.30

func (r *EffectRepository) GetEffectFixtures(ctx context.Context, effectID string) ([]models.EffectFixture, error)

GetEffectFixtures returns all fixtures for an effect.

func (*EffectRepository) RemoveEffectFromCue added in v0.2.30

func (r *EffectRepository) RemoveEffectFromCue(ctx context.Context, cueID, effectID string) error

RemoveEffectFromCue removes an effect from a cue.

func (*EffectRepository) RemoveFixtureFromEffect added in v0.2.30

func (r *EffectRepository) RemoveFixtureFromEffect(ctx context.Context, effectID, fixtureID string) error

RemoveFixtureFromEffect removes a fixture from an effect. This also deletes associated EffectChannels.

func (*EffectRepository) Update added in v0.2.30

func (r *EffectRepository) Update(ctx context.Context, effect *models.Effect) error

Update updates an existing effect.

func (*EffectRepository) UpdateCueEffect added in v0.2.30

func (r *EffectRepository) UpdateCueEffect(ctx context.Context, cueEffect *models.CueEffect) error

UpdateCueEffect updates an existing cue-effect relationship.

func (*EffectRepository) UpdateEffectChannel added in v0.2.30

func (r *EffectRepository) UpdateEffectChannel(ctx context.Context, channel *models.EffectChannel) error

UpdateEffectChannel updates an existing effect channel.

func (*EffectRepository) UpdateEffectFixture added in v0.2.30

func (r *EffectRepository) UpdateEffectFixture(ctx context.Context, effectFixture *models.EffectFixture) error

UpdateEffectFixture updates an existing effect-fixture relationship.

type FixtureGroupRepository added in v0.3.0

type FixtureGroupRepository struct {
	// contains filtered or unexported fields
}

FixtureGroupRepository handles fixture-group data access.

func NewFixtureGroupRepository added in v0.3.0

func NewFixtureGroupRepository(db *gorm.DB) *FixtureGroupRepository

NewFixtureGroupRepository creates a new FixtureGroupRepository.

func (*FixtureGroupRepository) AddMembers added in v0.3.0

func (r *FixtureGroupRepository) AddMembers(ctx context.Context, groupID string, fixtureIDs []string) error

AddMembers appends the given fixtures to the group, skipping duplicates. New rows get OrderIndex = current max + 1, +2, ...

func (*FixtureGroupRepository) AssignAndPersistMissingEosNumbers added in v0.3.0

func (r *FixtureGroupRepository) AssignAndPersistMissingEosNumbers(ctx context.Context, projectID string, groups []models.FixtureGroup) error

AssignAndPersistMissingEosNumbers fills in EosNumber for any group in the supplied slice that has nil EosNumber, persisting each new value in a single transaction. Mutates the in-memory groups so callers see the assigned numbers without re-reading.

Concurrency: SQLite's deferred transactions don't serialize the initial MAX(eos_number) read against parallel writers, so two concurrent exporters can theoretically both pick the same next number and one will fail the (project_id, eos_number) partial unique index. In practice this is vanishingly unlikely (export is a user-initiated action; nobody fires two exports of the same project concurrently). If it does happen, the constraint violation surfaces as an export error and the user re-runs — the second run succeeds because the first run's numbers are now persisted.

func (*FixtureGroupRepository) AssignNextEosNumber added in v0.3.0

func (r *FixtureGroupRepository) AssignNextEosNumber(ctx context.Context, projectID string) (int, error)

AssignNextEosNumber returns one more than the largest EosNumber in the project, or 1 if no group has an assigned number. It does NOT mutate state — callers persist via Update.

Concurrency: not safe — two parallel callers will compute the same number. For atomic batch assignment use AssignAndPersistMissingEosNumbers instead.

func (*FixtureGroupRepository) Create added in v0.3.0

Create creates a new fixture group (no members).

func (*FixtureGroupRepository) CreateWithMembers added in v0.3.0

func (r *FixtureGroupRepository) CreateWithMembers(ctx context.Context, g *models.FixtureGroup, fixtureIDs []string) error

CreateWithMembers atomically creates a group and its members.

func (*FixtureGroupRepository) Delete added in v0.3.0

func (r *FixtureGroupRepository) Delete(ctx context.Context, id string) error

Delete deletes a group; cascade FK on members removes their rows.

func (*FixtureGroupRepository) FindByEosNumber added in v0.3.0

func (r *FixtureGroupRepository) FindByEosNumber(ctx context.Context, projectID string, eosNumber int) (*models.FixtureGroup, error)

FindByEosNumber resolves a group by (project, eosNumber).

func (*FixtureGroupRepository) FindByID added in v0.3.0

FindByID returns a group by primary key. (nil, nil) on miss.

func (*FixtureGroupRepository) FindByProjectID added in v0.3.0

func (r *FixtureGroupRepository) FindByProjectID(ctx context.Context, projectID string) ([]models.FixtureGroup, error)

FindByProjectID returns all groups in a project, sorted by ProjectOrder (NULL last) then Name.

func (*FixtureGroupRepository) FindByRefID added in v0.3.0

func (r *FixtureGroupRepository) FindByRefID(ctx context.Context, projectID, refID string) (*models.FixtureGroup, error)

FindByRefID resolves a group by (project, refID).

func (*FixtureGroupRepository) GetMembers added in v0.3.0

func (r *FixtureGroupRepository) GetMembers(ctx context.Context, groupID string) ([]models.FixtureGroupMember, error)

GetMembers returns the members of a group sorted by OrderIndex.

func (*FixtureGroupRepository) GetMembersByGroupIDs added in v0.3.0

func (r *FixtureGroupRepository) GetMembersByGroupIDs(ctx context.Context, groupIDs []string) (map[string][]models.FixtureGroupMember, error)

GetMembersByGroupIDs batches GetMembers into a single SELECT … WHERE group_id IN (…). Returns a map keyed by group ID with each value sorted by OrderIndex ASC. Used by the EOS exporter to avoid an O(groups) round-trip pattern. Empty input returns an empty map without a query.

func (*FixtureGroupRepository) RemoveMembers added in v0.3.0

func (r *FixtureGroupRepository) RemoveMembers(ctx context.Context, groupID string, fixtureIDs []string) error

RemoveMembers deletes the listed fixtures from the group; missing IDs are silently ignored. Surviving members keep their OrderIndex.

func (*FixtureGroupRepository) ReorderMembers added in v0.3.0

func (r *FixtureGroupRepository) ReorderMembers(ctx context.Context, groupID string, fixtureIDs []string) error

ReorderMembers updates OrderIndex according to the supplied list. Any fixtureIDs not currently members are silently ignored. Any current members not listed retain their existing OrderIndex.

func (*FixtureGroupRepository) SetMembers added in v0.3.0

func (r *FixtureGroupRepository) SetMembers(ctx context.Context, groupID string, fixtureIDs []string) error

SetMembers transactionally replaces the membership list. OrderIndex is assigned in input-list order (0, 1, 2, ...).

func (*FixtureGroupRepository) Update added in v0.3.0

Update saves a group's mutable fields (name, description, eos_number, project_order). RefID is intentionally not part of the update set — it's frozen post-creation.

type FixtureRepository

type FixtureRepository struct {
	// contains filtered or unexported fields
}

FixtureRepository handles fixture data access.

func NewFixtureRepository

func NewFixtureRepository(db *gorm.DB) *FixtureRepository

NewFixtureRepository creates a new FixtureRepository.

func (*FixtureRepository) CountDefinitions added in v0.2.0

func (r *FixtureRepository) CountDefinitions(ctx context.Context) (int64, error)

CountDefinitions returns the total count of fixture definitions in the database.

func (*FixtureRepository) CountInstancesByDefinitionID

func (r *FixtureRepository) CountInstancesByDefinitionID(ctx context.Context, definitionID string) (int64, error)

CountInstancesByDefinitionID returns the count of fixture instances using a definition.

func (*FixtureRepository) Create

func (r *FixtureRepository) Create(ctx context.Context, fixture *models.FixtureInstance) error

Create creates a new fixture instance.

func (*FixtureRepository) CreateChannelDefinition

func (r *FixtureRepository) CreateChannelDefinition(ctx context.Context, channel *models.ChannelDefinition) error

CreateChannelDefinition creates a new channel definition.

func (*FixtureRepository) CreateChannelDefinitions

func (r *FixtureRepository) CreateChannelDefinitions(ctx context.Context, channels []models.ChannelDefinition) error

CreateChannelDefinitions creates multiple channel definitions.

func (*FixtureRepository) CreateDefinition

func (r *FixtureRepository) CreateDefinition(ctx context.Context, definition *models.FixtureDefinition) error

CreateDefinition creates a new fixture definition.

func (*FixtureRepository) CreateDefinitionWithChannels

func (r *FixtureRepository) CreateDefinitionWithChannels(ctx context.Context, definition *models.FixtureDefinition, channels []models.ChannelDefinition) error

CreateDefinitionWithChannels creates a fixture definition with its channels in a transaction.

func (*FixtureRepository) CreateInstanceChannels

func (r *FixtureRepository) CreateInstanceChannels(ctx context.Context, channels []models.InstanceChannel) error

CreateInstanceChannels creates instance channels for a fixture.

func (*FixtureRepository) CreateMode added in v0.2.1

func (r *FixtureRepository) CreateMode(ctx context.Context, mode *models.FixtureMode) error

CreateMode creates a new fixture mode.

func (*FixtureRepository) CreateModeChannels added in v0.2.1

func (r *FixtureRepository) CreateModeChannels(ctx context.Context, modeChannels []models.ModeChannel) error

CreateModeChannels creates multiple mode channels.

func (*FixtureRepository) CreateWithChannels

func (r *FixtureRepository) CreateWithChannels(ctx context.Context, fixture *models.FixtureInstance, channels []models.InstanceChannel) error

CreateWithChannels creates a fixture instance with its channels in a transaction.

func (*FixtureRepository) Delete

func (r *FixtureRepository) Delete(ctx context.Context, id string) error

Delete deletes a fixture instance by ID, also removing any FixtureGroupMember rows that reference it (cascade-on-fixture-delete). GORM's tag-based cascade on a composite-PK junction is unreliable, so we do this explicitly in a transaction.

func (*FixtureRepository) DeleteChannelDefinitions

func (r *FixtureRepository) DeleteChannelDefinitions(ctx context.Context, definitionID string) error

DeleteChannelDefinitions deletes all channel definitions for a fixture definition.

func (*FixtureRepository) DeleteDefinition

func (r *FixtureRepository) DeleteDefinition(ctx context.Context, id string) error

DeleteDefinition deletes a fixture definition by ID.

func (*FixtureRepository) DeleteDefinitionModes added in v0.2.1

func (r *FixtureRepository) DeleteDefinitionModes(ctx context.Context, definitionID string) error

DeleteDefinitionModes deletes all modes for a fixture definition.

func (*FixtureRepository) DeleteInstanceChannels

func (r *FixtureRepository) DeleteInstanceChannels(ctx context.Context, fixtureID string) error

DeleteInstanceChannels deletes all instance channels for a fixture.

func (*FixtureRepository) FindAllDefinitions

func (r *FixtureRepository) FindAllDefinitions(ctx context.Context) ([]models.FixtureDefinition, error)

FindAllDefinitions returns all fixture definitions.

func (*FixtureRepository) FindByID

FindByID returns a fixture by ID.

func (*FixtureRepository) FindByIDs added in v0.3.0

func (r *FixtureRepository) FindByIDs(ctx context.Context, ids []string) ([]models.FixtureInstance, error)

FindByIDs batches FindByID into a single SELECT … WHERE id IN (…). Returns rows in arbitrary order; callers that need a specific order should index the result by ID. Empty input returns an empty slice without a query.

func (*FixtureRepository) FindByProjectID

func (r *FixtureRepository) FindByProjectID(ctx context.Context, projectID string) ([]models.FixtureInstance, error)

FindByProjectID returns all fixtures in a project.

func (*FixtureRepository) FindDefinitionByID

func (r *FixtureRepository) FindDefinitionByID(ctx context.Context, id string) (*models.FixtureDefinition, error)

FindDefinitionByID returns a fixture definition by ID.

func (*FixtureRepository) FindDefinitionByManufacturerModel

func (r *FixtureRepository) FindDefinitionByManufacturerModel(ctx context.Context, manufacturer, model string) (*models.FixtureDefinition, error)

FindDefinitionByManufacturerModel returns a fixture definition by manufacturer and model.

func (*FixtureRepository) FindDefinitionByRefID added in v0.3.0

func (r *FixtureRepository) FindDefinitionByRefID(ctx context.Context, refID string) (*models.FixtureDefinition, error)

FindDefinitionByRefID resolves a fixture definition by refID. Returns (nil, nil) on miss.

func (*FixtureRepository) FindInstanceByRefID added in v0.3.0

func (r *FixtureRepository) FindInstanceByRefID(ctx context.Context, projectID, refID string) (*models.FixtureInstance, error)

FindInstanceByRefID resolves a fixture instance by (project, refID). Returns (nil, nil) on miss — convention shared with FindByID.

func (*FixtureRepository) FindModeByID

func (r *FixtureRepository) FindModeByID(ctx context.Context, id string) (*models.FixtureMode, error)

FindModeByID returns a fixture mode by ID.

func (*FixtureRepository) GetChannelDefinitionByID

func (r *FixtureRepository) GetChannelDefinitionByID(ctx context.Context, id string) (*models.ChannelDefinition, error)

GetChannelDefinitionByID returns a channel definition by ID.

func (*FixtureRepository) GetDefinitionChannels

func (r *FixtureRepository) GetDefinitionChannels(ctx context.Context, definitionID string) ([]models.ChannelDefinition, error)

GetDefinitionChannels returns all channels for a fixture definition.

func (*FixtureRepository) GetDefinitionModes added in v0.2.1

func (r *FixtureRepository) GetDefinitionModes(ctx context.Context, definitionID string) ([]models.FixtureMode, error)

GetDefinitionModes returns all modes for a fixture definition.

func (*FixtureRepository) GetInstanceChannels

func (r *FixtureRepository) GetInstanceChannels(ctx context.Context, fixtureID string) ([]models.InstanceChannel, error)

GetInstanceChannels returns all channels for a fixture instance.

func (*FixtureRepository) GetInstanceChannelsByFixtureIDs added in v0.3.0

func (r *FixtureRepository) GetInstanceChannelsByFixtureIDs(ctx context.Context, fixtureIDs []string) (map[string][]models.InstanceChannel, error)

GetInstanceChannelsByFixtureIDs batches GetInstanceChannels into a single SELECT … WHERE fixture_id IN (…). Returns a map keyed by fixture ID with each value sorted by Offset ASC. Used by the EOS exporter to avoid an O(fixtures) round-trip pattern when emitting fade_behavior records. Empty input returns an empty map without a query.

func (*FixtureRepository) GetModeChannels

func (r *FixtureRepository) GetModeChannels(ctx context.Context, modeID string) ([]models.ModeChannel, error)

GetModeChannels returns all mode channels for a mode with their channel definitions.

func (*FixtureRepository) Update

func (r *FixtureRepository) Update(ctx context.Context, fixture *models.FixtureInstance) error

Update updates an existing fixture instance.

func (*FixtureRepository) UpdateDefinition

func (r *FixtureRepository) UpdateDefinition(ctx context.Context, definition *models.FixtureDefinition) error

UpdateDefinition updates an existing fixture definition.

func (*FixtureRepository) UpdateInstanceChannelFadeBehavior added in v0.3.0

func (r *FixtureRepository) UpdateInstanceChannelFadeBehavior(ctx context.Context, instanceID string, offset int, behavior string) error

UpdateInstanceChannelFadeBehavior updates the FadeBehavior on a single (instanceID, offset) row. Returns ErrChannelOffsetNotFound if no matching row exists — callers convert this to a structured warning.

type GroupInvitationInput added in v0.2.31

type GroupInvitationInput struct {
	GroupID     string
	Email       string
	InvitedByID string
	Role        string
	TTL         time.Duration // How long until the invitation expires
}

GroupInvitationInput holds the parameters for creating an invitation.

type GroupRepository added in v0.2.31

type GroupRepository struct {
	// contains filtered or unexported fields
}

GroupRepository handles user group and group member data access.

func NewGroupRepository added in v0.2.31

func NewGroupRepository(db *gorm.DB) *GroupRepository

NewGroupRepository creates a new GroupRepository.

func (*GroupRepository) AddDeviceToGroup added in v0.2.31

func (r *GroupRepository) AddDeviceToGroup(ctx context.Context, deviceID, groupID string) (*models.DeviceGroupMember, error)

AddDeviceToGroup adds a device to a group.

func (*GroupRepository) AddMember added in v0.2.31

func (r *GroupRepository) AddMember(ctx context.Context, userID, groupID, role string) (*models.UserGroupMember, error)

AddMember adds a user to a group with the specified role.

func (*GroupRepository) FindDeviceByID added in v0.2.31

func (r *GroupRepository) FindDeviceByID(ctx context.Context, id string) (*models.Device, error)

FindDeviceByID returns a device by ID.

func (*GroupRepository) FindDeviceGroupMember added in v0.2.31

func (r *GroupRepository) FindDeviceGroupMember(ctx context.Context, deviceID, groupID string) (*models.DeviceGroupMember, error)

FindDeviceGroupMember returns a device's membership in a specific group.

func (*GroupRepository) FindGroupByID added in v0.2.31

func (r *GroupRepository) FindGroupByID(ctx context.Context, id string) (*models.UserGroup, error)

FindGroupByID returns a group by ID.

func (*GroupRepository) FindMember added in v0.2.31

func (r *GroupRepository) FindMember(ctx context.Context, userID, groupID string) (*models.UserGroupMember, error)

FindMember returns a specific group membership.

func (*GroupRepository) FindUserByEmail added in v0.2.31

func (r *GroupRepository) FindUserByEmail(ctx context.Context, email string) (*models.User, error)

FindUserByEmail returns a user by email.

func (*GroupRepository) RemoveDeviceFromGroup added in v0.2.31

func (r *GroupRepository) RemoveDeviceFromGroup(ctx context.Context, deviceID, groupID string) (bool, error)

RemoveDeviceFromGroup removes a device from a group.

func (*GroupRepository) RemoveMember added in v0.2.31

func (r *GroupRepository) RemoveMember(ctx context.Context, userID, groupID string) (bool, error)

RemoveMember removes a user from a group.

func (*GroupRepository) UpdateMemberRole added in v0.2.31

func (r *GroupRepository) UpdateMemberRole(ctx context.Context, userID, groupID, role string) error

UpdateMemberRole updates a group member's role.

type InvitationRepository added in v0.2.31

type InvitationRepository struct {
	// contains filtered or unexported fields
}

InvitationRepository handles group invitation data access.

func NewInvitationRepository added in v0.2.31

func NewInvitationRepository(db *gorm.DB) *InvitationRepository

NewInvitationRepository creates a new InvitationRepository.

func (*InvitationRepository) Create added in v0.2.31

func (r *InvitationRepository) Create(ctx context.Context, groupID, email, invitedByID, role string, expiresAt time.Time) (*models.GroupInvitation, error)

Create creates a new group invitation.

func (*InvitationRepository) CreateWithDefaults added in v0.2.31

CreateWithDefaults creates an invitation with sensible defaults.

func (*InvitationRepository) DB added in v0.2.31

func (r *InvitationRepository) DB() *gorm.DB

DB returns the underlying database connection for use in transactions.

func (*InvitationRepository) ExpireOverdueInvitations added in v0.2.31

func (r *InvitationRepository) ExpireOverdueInvitations(ctx context.Context) (int64, error)

ExpireOverdueInvitations marks invitations past their expiry as EXPIRED. Returns the number of expired invitations.

func (*InvitationRepository) FindByGroupID added in v0.2.31

func (r *InvitationRepository) FindByGroupID(ctx context.Context, groupID string) ([]models.GroupInvitation, error)

FindByGroupID returns all invitations for a group.

func (*InvitationRepository) FindByID added in v0.2.31

FindByID returns an invitation by ID.

func (*InvitationRepository) FindByIDForUpdate added in v0.2.31

func (r *InvitationRepository) FindByIDForUpdate(tx *gorm.DB, id string) (*models.GroupInvitation, error)

FindByIDForUpdate returns an invitation by ID for use inside a transaction. Caller is responsible for wrapping in a transaction. Note: SQLite does not support SELECT FOR UPDATE row-level locking. Concurrency safety is provided by SQLite's database-level write lock acquired when the transaction performs a write operation. The caller should perform a conditional update (checking status hasn't changed) to handle any TOCTOU races.

func (*InvitationRepository) FindPendingByEmail added in v0.2.31

func (r *InvitationRepository) FindPendingByEmail(ctx context.Context, email string) ([]models.GroupInvitation, error)

FindPendingByEmail returns all pending invitations for an email address.

func (*InvitationRepository) FindPendingByGroupAndEmail added in v0.2.31

func (r *InvitationRepository) FindPendingByGroupAndEmail(ctx context.Context, groupID, email string) (*models.GroupInvitation, error)

FindPendingByGroupAndEmail returns a pending invitation for a specific group and email.

func (*InvitationRepository) UpdateStatus added in v0.2.31

func (r *InvitationRepository) UpdateStatus(ctx context.Context, id, status string, acceptedAt *time.Time) error

UpdateStatus updates an invitation's status.

type LookBoardRepository added in v0.2.30

type LookBoardRepository struct {
	// contains filtered or unexported fields
}

LookBoardRepository handles scene board data access.

func NewLookBoardRepository added in v0.2.30

func NewLookBoardRepository(db *gorm.DB) *LookBoardRepository

NewLookBoardRepository creates a new LookBoardRepository.

func (*LookBoardRepository) Create added in v0.2.30

func (r *LookBoardRepository) Create(ctx context.Context, board *models.LookBoard) error

Create creates a new look board.

func (*LookBoardRepository) CreateButton added in v0.2.30

func (r *LookBoardRepository) CreateButton(ctx context.Context, button *models.LookBoardButton) error

CreateButton creates a look board button.

func (*LookBoardRepository) CreateButtons added in v0.2.30

func (r *LookBoardRepository) CreateButtons(ctx context.Context, buttons []models.LookBoardButton) error

CreateButtons creates multiple look board buttons.

func (*LookBoardRepository) CreateWithButtons added in v0.2.30

func (r *LookBoardRepository) CreateWithButtons(ctx context.Context, board *models.LookBoard, buttons []models.LookBoardButton) error

CreateWithButtons creates a look board with its buttons in a transaction.

func (*LookBoardRepository) Delete added in v0.2.30

func (r *LookBoardRepository) Delete(ctx context.Context, id string) error

Delete deletes a look board by ID, including all associated buttons. Uses a transaction to ensure atomicity.

func (*LookBoardRepository) DeleteButton added in v0.2.30

func (r *LookBoardRepository) DeleteButton(ctx context.Context, id string) error

DeleteButton deletes a single look board button by ID.

func (*LookBoardRepository) DeleteButtons added in v0.2.30

func (r *LookBoardRepository) DeleteButtons(ctx context.Context, boardID string) error

DeleteButtons deletes all buttons for a look board.

func (*LookBoardRepository) FindButtonByID added in v0.2.30

func (r *LookBoardRepository) FindButtonByID(ctx context.Context, id string) (*models.LookBoardButton, error)

FindButtonByID returns a look board button by ID.

func (*LookBoardRepository) FindByID added in v0.2.30

func (r *LookBoardRepository) FindByID(ctx context.Context, id string) (*models.LookBoard, error)

FindByID returns a look board by ID.

func (*LookBoardRepository) FindByProjectID added in v0.2.30

func (r *LookBoardRepository) FindByProjectID(ctx context.Context, projectID string) ([]models.LookBoard, error)

FindByProjectID returns all look boards in a project.

func (*LookBoardRepository) FindByRefID added in v0.3.0

func (r *LookBoardRepository) FindByRefID(ctx context.Context, projectID, refID string) (*models.LookBoard, error)

FindByRefID resolves a look board by (projectID, refID). (nil, nil) on miss.

func (*LookBoardRepository) GetButtons added in v0.2.30

func (r *LookBoardRepository) GetButtons(ctx context.Context, boardID string) ([]models.LookBoardButton, error)

GetButtons returns all buttons for a look board.

func (*LookBoardRepository) ReplaceButtons added in v0.3.0

func (r *LookBoardRepository) ReplaceButtons(ctx context.Context, board *models.LookBoard, buttons []models.LookBoardButton) error

ReplaceButtons atomically renames the board (if name != current) and replaces its full button list. If the transaction fails after the buttons are deleted, the board is rolled back to its previous state.

func (*LookBoardRepository) Update added in v0.2.30

func (r *LookBoardRepository) Update(ctx context.Context, board *models.LookBoard) error

Update updates an existing look board.

func (*LookBoardRepository) UpdateButton added in v0.2.30

func (r *LookBoardRepository) UpdateButton(ctx context.Context, button *models.LookBoardButton) error

UpdateButton updates an existing look board button.

type LookRepository added in v0.2.30

type LookRepository struct {
	// contains filtered or unexported fields
}

LookRepository handles look data access.

func NewLookRepository added in v0.2.30

func NewLookRepository(db *gorm.DB) *LookRepository

NewLookRepository creates a new LookRepository.

func (*LookRepository) CountFixtures added in v0.2.30

func (r *LookRepository) CountFixtures(ctx context.Context, lookID string) (int64, error)

CountFixtures returns the number of fixtures in a look.

func (*LookRepository) Create added in v0.2.30

func (r *LookRepository) Create(ctx context.Context, look *models.Look) error

Create creates a new look.

func (*LookRepository) CreateFixtureValue added in v0.2.30

func (r *LookRepository) CreateFixtureValue(ctx context.Context, value *models.FixtureValue) error

CreateFixtureValue creates a fixture value.

func (*LookRepository) CreateFixtureValues added in v0.2.30

func (r *LookRepository) CreateFixtureValues(ctx context.Context, values []models.FixtureValue) error

CreateFixtureValues creates multiple fixture values.

func (*LookRepository) CreateWithFixtureValues added in v0.2.30

func (r *LookRepository) CreateWithFixtureValues(ctx context.Context, look *models.Look, fixtureValues []models.FixtureValue) error

CreateWithFixtureValues creates a look with its fixture values in a transaction.

func (*LookRepository) Delete added in v0.2.30

func (r *LookRepository) Delete(ctx context.Context, id string) error

Delete deletes a look by ID.

func (*LookRepository) DeleteFixtureValue added in v0.2.30

func (r *LookRepository) DeleteFixtureValue(ctx context.Context, lookID, fixtureID string) error

DeleteFixtureValue deletes a single fixture value by fixture ID and look ID.

func (*LookRepository) DeleteFixtureValues added in v0.2.30

func (r *LookRepository) DeleteFixtureValues(ctx context.Context, lookID string) error

DeleteFixtureValues deletes all fixture values for a look.

func (*LookRepository) DeleteFixtureValuesByFixtureID added in v0.2.30

func (r *LookRepository) DeleteFixtureValuesByFixtureID(ctx context.Context, fixtureID string) error

DeleteFixtureValuesByFixtureID deletes all fixture values referencing a specific fixture (across all looks). This should be called when a fixture is deleted to clean up orphaned references.

func (*LookRepository) FindByID added in v0.2.30

func (r *LookRepository) FindByID(ctx context.Context, id string) (*models.Look, error)

FindByID returns a look by ID.

func (*LookRepository) FindByIDs added in v0.3.0

func (r *LookRepository) FindByIDs(ctx context.Context, ids []string) ([]models.Look, error)

FindByIDs batches FindByID into a single SELECT … WHERE id IN (…). Returns rows in arbitrary order; callers index by ID. Empty input returns an empty slice without issuing a query.

func (*LookRepository) FindByProjectID added in v0.2.30

func (r *LookRepository) FindByProjectID(ctx context.Context, projectID string) ([]models.Look, error)

FindByProjectID returns all looks in a project.

func (*LookRepository) FindByRefID added in v0.3.0

func (r *LookRepository) FindByRefID(ctx context.Context, projectID, refID string) (*models.Look, error)

FindByRefID resolves a single (projectID, refID). (nil, nil) on miss.

func (*LookRepository) GetFixtureValue added in v0.2.30

func (r *LookRepository) GetFixtureValue(ctx context.Context, lookID, fixtureID string) (*models.FixtureValue, error)

GetFixtureValue returns a specific fixture value by look and fixture ID.

func (*LookRepository) GetFixtureValues added in v0.2.30

func (r *LookRepository) GetFixtureValues(ctx context.Context, lookID string) ([]models.FixtureValue, error)

GetFixtureValues returns all fixture values for a look.

func (*LookRepository) MapByRefID added in v0.3.0

func (r *LookRepository) MapByRefID(ctx context.Context, projectID string, refIDs []string) (map[string]string, error)

MapByRefID resolves a batch of (projectID, refID) pairs in one query. Returns a map keyed by refID; unresolved refIDs are absent from the map.

func (*LookRepository) Update added in v0.2.30

func (r *LookRepository) Update(ctx context.Context, look *models.Look) error

Update updates an existing look.

func (*LookRepository) UpdateAndReplaceFixtureValues added in v0.3.0

func (r *LookRepository) UpdateAndReplaceFixtureValues(ctx context.Context, look *models.Look, values []models.FixtureValue) error

UpdateAndReplaceFixtureValues atomically renames a Look and replaces its FixtureValues in a single transaction. If CreateFixtureValues fails after DeleteFixtureValues, the entire change is rolled back so the Look retains its previous values rather than being left empty.

Only the Name field is updated — RefID is intentionally protected from overwrite (it's frozen post-creation per Task 14c contract).

func (*LookRepository) UpdateFixtureValue added in v0.2.30

func (r *LookRepository) UpdateFixtureValue(ctx context.Context, value *models.FixtureValue) error

UpdateFixtureValue updates a fixture value.

type OperationRepository added in v0.2.30

type OperationRepository struct {
	// contains filtered or unexported fields
}

OperationRepository handles operation data access for undo/redo functionality.

func NewOperationRepository added in v0.2.30

func NewOperationRepository(db *gorm.DB) *OperationRepository

NewOperationRepository creates a new OperationRepository.

func NewOperationRepositoryWithLimit added in v0.2.30

func NewOperationRepositoryWithLimit(db *gorm.DB, maxHistory int) *OperationRepository

NewOperationRepositoryWithLimit creates a new OperationRepository with a custom history limit.

func (*OperationRepository) ClearHistory added in v0.2.30

func (r *OperationRepository) ClearHistory(ctx context.Context, projectID string) error

ClearHistory removes all operations for a project.

func (*OperationRepository) ConfirmRedo added in v0.2.30

func (r *OperationRepository) ConfirmRedo(ctx context.Context, projectID string) error

ConfirmRedo increments the pointer after a successful redo apply. This should only be called after the snapshot has been successfully applied.

func (*OperationRepository) ConfirmUndo added in v0.2.30

func (r *OperationRepository) ConfirmUndo(ctx context.Context, projectID string) error

ConfirmUndo decrements the pointer after a successful undo apply. This should only be called after the snapshot has been successfully applied.

func (*OperationRepository) DeleteByProjectID added in v0.2.30

func (r *OperationRepository) DeleteByProjectID(ctx context.Context, projectID string) error

DeleteByProjectID deletes all operations for a project (called on project deletion).

func (*OperationRepository) GetOperationAtSequence added in v0.2.30

func (r *OperationRepository) GetOperationAtSequence(ctx context.Context, projectID string, seq int) (*models.Operation, error)

GetOperationAtSequence returns the operation at a specific sequence number.

func (*OperationRepository) GetOperationByID added in v0.2.30

func (r *OperationRepository) GetOperationByID(ctx context.Context, operationID string) (*models.Operation, error)

GetOperationByID returns an operation by its ID.

func (*OperationRepository) GetOperationForRedo added in v0.2.30

func (r *OperationRepository) GetOperationForRedo(ctx context.Context, projectID string) (*models.Operation, error)

GetOperationForRedo returns the operation that would be redone, without modifying the pointer. Returns nil if there's nothing to redo. Use this with ConfirmRedo for atomic redo operations.

func (*OperationRepository) GetOperationForUndo added in v0.2.30

func (r *OperationRepository) GetOperationForUndo(ctx context.Context, projectID string) (*models.Operation, error)

GetOperationForUndo returns the operation that would be undone, without modifying the pointer. Returns nil if there's nothing to undo. Use this with ConfirmUndo for atomic undo operations.

func (*OperationRepository) GetOperationsByProject added in v0.2.30

func (r *OperationRepository) GetOperationsByProject(ctx context.Context, projectID string, page, perPage int) ([]models.Operation, int64, error)

GetOperationsByProject returns paginated operations for a project.

func (*OperationRepository) GetPointer added in v0.2.30

func (r *OperationRepository) GetPointer(ctx context.Context, projectID string) (*models.OperationPointer, error)

GetPointer returns the operation pointer for a project.

func (*OperationRepository) GetUndoRedoStatus added in v0.2.30

func (r *OperationRepository) GetUndoRedoStatus(ctx context.Context, projectID string) (*UndoRedoStatus, error)

GetUndoRedoStatus returns the current status for a project.

func (*OperationRepository) RecordOperation added in v0.2.30

func (r *OperationRepository) RecordOperation(ctx context.Context, op *models.Operation) error

RecordOperation adds a new operation to the history. This is done within a transaction to ensure atomicity with pointer updates. If there are operations after the current sequence (redo candidates), they are truncated.

func (*OperationRepository) Redo added in v0.2.30

func (r *OperationRepository) Redo(ctx context.Context, projectID string) (*models.Operation, error)

Redo increments the current sequence and returns the operation to redo. Returns nil if there's nothing to redo. DEPRECATED: Use GetOperationForRedo + ConfirmRedo for atomic operations.

func (*OperationRepository) TruncateAfterSequence added in v0.2.30

func (r *OperationRepository) TruncateAfterSequence(ctx context.Context, projectID string, sequence int) error

TruncateAfterSequence removes all operations after a given sequence. This is used when a new operation follows an undo (forking the timeline).

func (*OperationRepository) Undo added in v0.2.30

func (r *OperationRepository) Undo(ctx context.Context, projectID string) (*models.Operation, error)

Undo decrements the current sequence and returns the operation to undo. Returns nil if there's nothing to undo. DEPRECATED: Use GetOperationForUndo + ConfirmUndo for atomic operations.

func (*OperationRepository) UpdatePointer added in v0.2.30

func (r *OperationRepository) UpdatePointer(ctx context.Context, projectID string, newSequence int) error

UpdatePointer updates the current sequence for a project. This is typically called during undo/redo operations.

type ProjectRepository

type ProjectRepository struct {
	// contains filtered or unexported fields
}

ProjectRepository handles project data access.

func NewProjectRepository

func NewProjectRepository(db *gorm.DB) *ProjectRepository

NewProjectRepository creates a new ProjectRepository.

func (*ProjectRepository) CountCueLists

func (r *ProjectRepository) CountCueLists(ctx context.Context, projectID string) (int64, error)

CountCueLists returns the number of cue lists in a project.

func (*ProjectRepository) CountFixtures

func (r *ProjectRepository) CountFixtures(ctx context.Context, projectID string) (int64, error)

CountFixtures returns the number of fixtures in a project.

func (*ProjectRepository) CountLooks added in v0.2.30

func (r *ProjectRepository) CountLooks(ctx context.Context, projectID string) (int64, error)

CountLooks returns the number of looks in a project.

func (*ProjectRepository) Create

func (r *ProjectRepository) Create(ctx context.Context, project *models.Project) error

Create creates a new project.

func (*ProjectRepository) Delete

func (r *ProjectRepository) Delete(ctx context.Context, id string) error

Delete soft-deletes a project by setting deleted_at timestamp.

func (*ProjectRepository) FindAll

func (r *ProjectRepository) FindAll(ctx context.Context) ([]models.Project, error)

FindAll returns all non-deleted projects.

func (*ProjectRepository) FindAllByGroupIDs added in v0.2.31

func (r *ProjectRepository) FindAllByGroupIDs(ctx context.Context, groupIDs []string) ([]models.Project, error)

FindAllByGroupIDs returns non-deleted projects that belong to any of the given groups. If groupIDs is nil, returns all non-deleted projects (no filtering). If groupIDs is empty, returns no projects (user has no group memberships).

func (*ProjectRepository) FindAllDeleted added in v0.2.30

func (r *ProjectRepository) FindAllDeleted(ctx context.Context) ([]models.Project, error)

FindAllDeleted returns all soft-deleted projects.

func (*ProjectRepository) FindByID

func (r *ProjectRepository) FindByID(ctx context.Context, id string) (*models.Project, error)

FindByID returns a non-deleted project by ID.

func (*ProjectRepository) FindByIDIncludingDeleted added in v0.2.30

func (r *ProjectRepository) FindByIDIncludingDeleted(ctx context.Context, id string) (*models.Project, error)

FindByIDIncludingDeleted returns a project by ID regardless of deleted status.

func (*ProjectRepository) FindByIDWithGroupCheck added in v0.2.31

func (r *ProjectRepository) FindByIDWithGroupCheck(ctx context.Context, id string, groupIDs []string) (*models.Project, error)

FindByIDWithGroupCheck returns a non-deleted project by ID, verifying group access. If groupIDs is nil, no group check is performed (admin or auth-off). Returns nil if the project exists but the user doesn't have group access.

func (*ProjectRepository) PermanentDelete added in v0.2.30

func (r *ProjectRepository) PermanentDelete(ctx context.Context, id string) error

PermanentDelete permanently removes a project and all its data. This should only be called for projects that are already soft-deleted.

func (*ProjectRepository) Restore added in v0.2.30

func (r *ProjectRepository) Restore(ctx context.Context, id string) error

Restore restores a soft-deleted project by clearing deleted_at.

func (*ProjectRepository) Update

func (r *ProjectRepository) Update(ctx context.Context, project *models.Project) error

Update updates an existing project.

type SettingRepository

type SettingRepository struct {
	// contains filtered or unexported fields
}

SettingRepository handles setting data access.

func NewSettingRepository

func NewSettingRepository(db *gorm.DB) *SettingRepository

NewSettingRepository creates a new SettingRepository.

func (*SettingRepository) Delete

func (r *SettingRepository) Delete(ctx context.Context, key string) error

Delete deletes a setting by key.

func (*SettingRepository) FindAll

func (r *SettingRepository) FindAll(ctx context.Context) ([]models.Setting, error)

FindAll returns all settings.

func (*SettingRepository) FindByKey

func (r *SettingRepository) FindByKey(ctx context.Context, key string) (*models.Setting, error)

FindByKey returns a setting by key.

func (*SettingRepository) Upsert

func (r *SettingRepository) Upsert(ctx context.Context, key, value string) (*models.Setting, error)

Upsert creates or updates a setting by key.

type UndoRedoStatus added in v0.2.30

type UndoRedoStatus struct {
	ProjectID       string
	CanUndo         bool
	CanRedo         bool
	CurrentSequence int
	MaxSequence     int
	TotalOperations int64
	UndoDescription string
	RedoDescription string
}

GetUndoRedoStatus returns the current undo/redo status for a project.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL