Skip to content

[Go] Implement Transaction Isolation for bulk lamp move #304

@davideme

Description

@davideme

Task

Implement POST /rooms/{roomId}/lamps/bulk-move with proper transaction isolation.

Endpoint

POST /rooms/{roomId}/lamps/bulk-move

{
  "lampIds": ["uuid1", "uuid2", "uuid3"],
  "targetRoomId": "target-uuid"
}

Functional Requirement

  • Must be atomic - either all lamps move or none do
  • Must handle concurrent requests safely - no race conditions

Implementation Hints

  • Use pgx transaction: pool.BeginTx(ctx, pgx.TxOptions{})
  • Use SELECT ... FOR UPDATE for row locking
  • Commit only on success, rollback on any error

Acceptance Criteria

  • All lamps move to target room on success
  • No lamps move if any validation fails (atomic)
  • Returns 409 if any lamp doesn't belong to source room
  • Concurrent requests don't cause data corruption

Parent Issue

Relates to #289

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions