kanban dashboard refactor
This commit is contained in:
+52
-48
@@ -29,22 +29,22 @@ type CreateColumnRequest struct {
|
||||
|
||||
// UpdateColumnRequest represents a request to update an existing column
|
||||
type UpdateColumnRequest struct {
|
||||
ID string `json:"id" valid:"required~Column ID is required"`
|
||||
Name *string `json:"name,omitempty" valid:"stringlength(1|50)~Column name must be between 1 and 50 characters"`
|
||||
Color *string `json:"color,omitempty" valid:"hexcolor~Color must be a valid hex color"`
|
||||
Order *int `json:"order,omitempty"`
|
||||
Limit *int `json:"limit,omitempty" valid:"range(1|100)~WIP limit must be between 1 and 100"`
|
||||
ID string `json:"id" valid:"required~Column ID is required"`
|
||||
Name *string `json:"name,omitempty" valid:"stringlength(1|50)~Column name must be between 1 and 50 characters"`
|
||||
Color *string `json:"color,omitempty" valid:"hexcolor~Color must be a valid hex color"`
|
||||
Order *int `json:"order,omitempty"`
|
||||
Limit *int `json:"limit,omitempty" valid:"range(1|100)~WIP limit must be between 1 and 100"`
|
||||
}
|
||||
|
||||
// CreateCardRequest represents a request to create a new card
|
||||
type CreateCardRequest struct {
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
TenderID string `json:"tender_id" valid:"required~Tender ID is required"`
|
||||
Title string `json:"title" valid:"required~Title is required,stringlength(1|200)~Title must be between 1 and 200 characters"`
|
||||
Order int `json:"order"`
|
||||
Priority CardPriority `json:"priority"`
|
||||
Labels []string `json:"labels,omitempty"`
|
||||
DueDate *int64 `json:"due_date,omitempty"` // Unix timestamp
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
TenderID string `json:"tender_id" valid:"required~Tender ID is required"`
|
||||
Title string `json:"title" valid:"required~Title is required,stringlength(1|200)~Title must be between 1 and 200 characters"`
|
||||
Order int `json:"order"`
|
||||
Priority CardPriority `json:"priority"`
|
||||
Labels []string `json:"labels,omitempty"`
|
||||
DueDate *int64 `json:"due_date,omitempty"` // Unix timestamp
|
||||
}
|
||||
|
||||
// UpdateCardRequest represents a request to update an existing card
|
||||
@@ -58,15 +58,15 @@ type UpdateCardRequest struct {
|
||||
|
||||
// MoveCardRequest represents a request to move a card to a different column
|
||||
type MoveCardRequest struct {
|
||||
CardID string `json:"card_id" valid:"required~Card ID is required"`
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
NewOrder int `json:"new_order"`
|
||||
CardID string `json:"card_id" valid:"required~Card ID is required"`
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
NewOrder int `json:"new_order"`
|
||||
}
|
||||
|
||||
// ReorderCardsRequest represents a request to reorder cards within a column
|
||||
type ReorderCardsRequest struct {
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
CardOrders map[string]int `json:"card_orders" valid:"required~Card orders are required"`
|
||||
ColumnID string `json:"column_id" valid:"required~Column ID is required"`
|
||||
CardOrders map[string]int `json:"card_orders" valid:"required~Card orders are required"`
|
||||
}
|
||||
|
||||
// ReorderColumnsRequest represents a request to reorder columns within a board
|
||||
@@ -77,29 +77,31 @@ type ReorderColumnsRequest struct {
|
||||
|
||||
// BoardResponse represents a board in API responses
|
||||
type BoardResponse struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Columns []ColumnResponse `json:"columns"`
|
||||
IsDefault bool `json:"is_default"`
|
||||
UserID string `json:"user_id"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Columns []ColumnResponse `json:"columns"`
|
||||
IsDefault bool `json:"is_default"`
|
||||
UserID string `json:"user_id"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
}
|
||||
|
||||
// ColumnResponse represents a column in API responses
|
||||
type ColumnResponse struct {
|
||||
ID string `json:"id"`
|
||||
BoardID string `json:"board_id"`
|
||||
Name string `json:"name"`
|
||||
Order int `json:"order"`
|
||||
Color string `json:"color"`
|
||||
Limit *int `json:"limit,omitempty"`
|
||||
Cards []CardResponse `json:"cards"`
|
||||
CardCount int `json:"card_count"`
|
||||
IsOverLimit bool `json:"is_over_limit"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
ID string `json:"id"`
|
||||
BoardID string `json:"board_id"`
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"`
|
||||
StatusCategory string `json:"status_category"`
|
||||
Order int `json:"order"`
|
||||
Color string `json:"color"`
|
||||
Limit *int `json:"limit,omitempty"`
|
||||
Cards []CardResponse `json:"cards"`
|
||||
CardCount int `json:"card_count"`
|
||||
IsOverLimit bool `json:"is_over_limit"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at"`
|
||||
}
|
||||
|
||||
// CardResponse represents a card in API responses
|
||||
@@ -124,7 +126,7 @@ type BoardsListResponse struct {
|
||||
|
||||
// BoardDetailResponse represents detailed board response with full column and card data
|
||||
type BoardDetailResponse struct {
|
||||
Board BoardResponse `json:"board"`
|
||||
Board BoardResponse `json:"board"`
|
||||
Meta *response.Meta `json:"-"`
|
||||
}
|
||||
|
||||
@@ -145,17 +147,19 @@ func (b *Board) ToResponse() *BoardResponse {
|
||||
// ToColumnResponse converts a Column entity to ColumnResponse
|
||||
func (c *Column) ToResponse() *ColumnResponse {
|
||||
return &ColumnResponse{
|
||||
ID: c.ID.Hex(),
|
||||
BoardID: c.BoardID,
|
||||
Name: c.Name,
|
||||
Order: c.Order,
|
||||
Color: c.Color,
|
||||
Limit: c.Limit,
|
||||
Cards: make([]CardResponse, 0), // Will be populated by service
|
||||
CardCount: 0, // Will be populated by service
|
||||
IsOverLimit: false, // Will be calculated by service
|
||||
CreatedAt: c.CreatedAt,
|
||||
UpdatedAt: c.UpdatedAt,
|
||||
ID: c.ID.Hex(),
|
||||
BoardID: c.BoardID,
|
||||
Name: c.Name,
|
||||
Status: c.Status,
|
||||
StatusCategory: c.StatusCategory,
|
||||
Order: c.Order,
|
||||
Color: c.Color,
|
||||
Limit: c.Limit,
|
||||
Cards: make([]CardResponse, 0), // Will be populated by service
|
||||
CardCount: 0, // Will be populated by service
|
||||
IsOverLimit: false, // Will be calculated by service
|
||||
CreatedAt: c.CreatedAt,
|
||||
UpdatedAt: c.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user