- GetColumns returns all columns for a project, sorted by position - GetColumn returns a single column by ID - Returns ErrColumnNotFound for non-existent columns - Comprehensive test coverage including edge cases
41 lines
1 KiB
Go
41 lines
1 KiB
Go
package kanboard
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sort"
|
|
)
|
|
|
|
// GetColumns returns all columns for a project, sorted by position.
|
|
func (c *Client) GetColumns(ctx context.Context, projectID int) ([]Column, error) {
|
|
params := map[string]int{"project_id": projectID}
|
|
|
|
var result []Column
|
|
if err := c.call(ctx, "getColumns", params, &result); err != nil {
|
|
return nil, fmt.Errorf("getColumns: %w", err)
|
|
}
|
|
|
|
// Sort by position
|
|
sort.Slice(result, func(i, j int) bool {
|
|
return int(result[i].Position) < int(result[j].Position)
|
|
})
|
|
|
|
return result, nil
|
|
}
|
|
|
|
// GetColumn returns a column by its ID.
|
|
// Returns ErrColumnNotFound if the column does not exist.
|
|
func (c *Client) GetColumn(ctx context.Context, columnID int) (*Column, error) {
|
|
params := map[string]int{"column_id": columnID}
|
|
|
|
var result *Column
|
|
if err := c.call(ctx, "getColumn", params, &result); err != nil {
|
|
return nil, fmt.Errorf("getColumn: %w", err)
|
|
}
|
|
|
|
if result == nil {
|
|
return nil, fmt.Errorf("%w: column %d", ErrColumnNotFound, columnID)
|
|
}
|
|
|
|
return result, nil
|
|
}
|