@vira-ui/cli 0.3.3-alpha → 0.4.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/go/appYaml.js +34 -0
- package/dist/go/backendEnvExample.js +21 -0
- package/dist/go/backendReadme.js +18 -0
- package/dist/go/channelHelpers.js +29 -0
- package/dist/go/configGo.js +262 -0
- package/dist/go/dbGo.js +47 -0
- package/dist/go/dbYaml.js +11 -0
- package/dist/go/dockerCompose.js +38 -0
- package/dist/go/dockerComposeProd.js +54 -0
- package/dist/go/dockerfile.js +19 -0
- package/dist/go/eventHandlerTemplate.js +34 -0
- package/dist/go/eventsAPI.js +414 -0
- package/dist/go/goMod.js +20 -0
- package/dist/go/kafkaGo.js +71 -0
- package/dist/go/kafkaYaml.js +10 -0
- package/dist/go/kanbanHandlers.js +221 -0
- package/dist/go/mainGo.js +527 -0
- package/dist/go/readme.js +14 -0
- package/dist/go/redisGo.js +35 -0
- package/dist/go/redisYaml.js +8 -0
- package/dist/go/registryGo.js +47 -0
- package/dist/go/sqlcYaml.js +17 -0
- package/dist/go/stateStore.js +119 -0
- package/dist/go/typesGo.js +15 -0
- package/dist/go/useViraState.js +160 -0
- package/dist/go/useViraStream.js +167 -0
- package/dist/index.js +608 -190
- package/dist/react/appTsx.js +52 -0
- package/dist/react/envExample.js +7 -0
- package/dist/react/envLocal.js +5 -0
- package/dist/react/indexCss.js +22 -0
- package/dist/react/indexHtml.js +16 -0
- package/dist/react/kanbanAppTsx.js +34 -0
- package/dist/react/kanbanBoard.js +63 -0
- package/dist/react/kanbanCard.js +65 -0
- package/dist/react/kanbanColumn.js +67 -0
- package/dist/react/kanbanModels.js +37 -0
- package/dist/react/kanbanService.js +119 -0
- package/dist/react/mainTsx.js +16 -0
- package/dist/react/tsconfig.js +25 -0
- package/dist/react/viteConfig.js +31 -0
- package/package.json +3 -4
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.kanbanHandlers = void 0;
|
|
4
|
+
// Internal handlers for Kanban board (generated by CLI make event)
|
|
5
|
+
exports.kanbanHandlers = `package main
|
|
6
|
+
|
|
7
|
+
import (
|
|
8
|
+
"context"
|
|
9
|
+
"encoding/json"
|
|
10
|
+
"time"
|
|
11
|
+
|
|
12
|
+
"github.com/google/uuid"
|
|
13
|
+
"github.com/gorilla/websocket"
|
|
14
|
+
"vira-engine-backend/internal/events"
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
// handleKanbanCardCreate handles kanban.card.create events.
|
|
18
|
+
func handleKanbanCardCreate(ctx context.Context, hub events.EventEmitter, conn *websocket.Conn, msg events.WSMessage) {
|
|
19
|
+
var payload struct {
|
|
20
|
+
BoardID string \`json:"boardId"\`
|
|
21
|
+
ColumnID string \`json:"columnId"\`
|
|
22
|
+
Title string \`json:"title"\`
|
|
23
|
+
Description string \`json:"description,omitempty"\`
|
|
24
|
+
At int64 \`json:"at"\`
|
|
25
|
+
}
|
|
26
|
+
if err := json.Unmarshal(msg.Data, &payload); err != nil {
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
channel := events.ChannelKanban(payload.BoardID)
|
|
31
|
+
snap, version, ok := hub.Snapshot(channel)
|
|
32
|
+
if !ok {
|
|
33
|
+
// Initialize board
|
|
34
|
+
initialBoard := map[string]any{
|
|
35
|
+
"id": payload.BoardID,
|
|
36
|
+
"title": "Kanban Board",
|
|
37
|
+
"columns": []any{},
|
|
38
|
+
"cards": map[string]any{},
|
|
39
|
+
"createdAt": time.Now().UnixMilli(),
|
|
40
|
+
"updatedAt": time.Now().UnixMilli(),
|
|
41
|
+
}
|
|
42
|
+
hub.Update(channel, initialBoard)
|
|
43
|
+
snap, _, _ = hub.Snapshot(channel)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var board map[string]any
|
|
47
|
+
if err := json.Unmarshal(snap, &board); err != nil {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Create new card
|
|
52
|
+
cardID := uuid.NewString()
|
|
53
|
+
newCard := map[string]any{
|
|
54
|
+
"id": cardID,
|
|
55
|
+
"title": payload.Title,
|
|
56
|
+
"description": payload.Description,
|
|
57
|
+
"columnId": payload.ColumnID,
|
|
58
|
+
"order": 0,
|
|
59
|
+
"createdAt": payload.At,
|
|
60
|
+
"updatedAt": payload.At,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
cards, _ := board["cards"].(map[string]any)
|
|
64
|
+
if cards == nil {
|
|
65
|
+
cards = make(map[string]any)
|
|
66
|
+
}
|
|
67
|
+
cards[cardID] = newCard
|
|
68
|
+
board["cards"] = cards
|
|
69
|
+
|
|
70
|
+
// Add to column
|
|
71
|
+
columns, _ := board["columns"].([]any)
|
|
72
|
+
for i, colRaw := range columns {
|
|
73
|
+
col, _ := colRaw.(map[string]any)
|
|
74
|
+
if col["id"] == payload.ColumnID {
|
|
75
|
+
cardIds, _ := col["cardIds"].([]any)
|
|
76
|
+
if cardIds == nil {
|
|
77
|
+
cardIds = []any{}
|
|
78
|
+
}
|
|
79
|
+
col["cardIds"] = append(cardIds, cardID)
|
|
80
|
+
columns[i] = col
|
|
81
|
+
break
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
board["columns"] = columns
|
|
85
|
+
board["updatedAt"] = time.Now().UnixMilli()
|
|
86
|
+
|
|
87
|
+
hub.Update(channel, board)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// handleKanbanCardMove handles kanban.card.move events.
|
|
91
|
+
func handleKanbanCardMove(ctx context.Context, hub events.EventEmitter, conn *websocket.Conn, msg events.WSMessage) {
|
|
92
|
+
var payload struct {
|
|
93
|
+
BoardID string \`json:"boardId"\`
|
|
94
|
+
CardID string \`json:"cardId"\`
|
|
95
|
+
FromColumnID string \`json:"fromColumnId"\`
|
|
96
|
+
ToColumnID string \`json:"toColumnId"\`
|
|
97
|
+
NewOrder int \`json:"newOrder"\`
|
|
98
|
+
At int64 \`json:"at"\`
|
|
99
|
+
}
|
|
100
|
+
if err := json.Unmarshal(msg.Data, &payload); err != nil {
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
channel := events.ChannelKanban(payload.BoardID)
|
|
105
|
+
snap, _, ok := hub.Snapshot(channel)
|
|
106
|
+
if !ok {
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
var board map[string]any
|
|
111
|
+
if err := json.Unmarshal(snap, &board); err != nil {
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Update card columnId
|
|
116
|
+
cards, _ := board["cards"].(map[string]any)
|
|
117
|
+
if card, ok := cards[payload.CardID].(map[string]any); ok {
|
|
118
|
+
card["columnId"] = payload.ToColumnID
|
|
119
|
+
card["order"] = payload.NewOrder
|
|
120
|
+
card["updatedAt"] = payload.At
|
|
121
|
+
cards[payload.CardID] = card
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Remove from old column
|
|
125
|
+
columns, _ := board["columns"].([]any)
|
|
126
|
+
for i, colRaw := range columns {
|
|
127
|
+
col, _ := colRaw.(map[string]any)
|
|
128
|
+
if col["id"] == payload.FromColumnID {
|
|
129
|
+
cardIds, _ := col["cardIds"].([]any)
|
|
130
|
+
newCardIds := []any{}
|
|
131
|
+
for _, id := range cardIds {
|
|
132
|
+
if idStr, _ := id.(string); idStr != payload.CardID {
|
|
133
|
+
newCardIds = append(newCardIds, id)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
col["cardIds"] = newCardIds
|
|
137
|
+
columns[i] = col
|
|
138
|
+
}
|
|
139
|
+
// Add to new column
|
|
140
|
+
if col["id"] == payload.ToColumnID {
|
|
141
|
+
cardIds, _ := col["cardIds"].([]any)
|
|
142
|
+
if cardIds == nil {
|
|
143
|
+
cardIds = []any{}
|
|
144
|
+
}
|
|
145
|
+
// Insert at position
|
|
146
|
+
newCardIds := make([]any, len(cardIds)+1)
|
|
147
|
+
copy(newCardIds, cardIds[:payload.NewOrder])
|
|
148
|
+
newCardIds[payload.NewOrder] = payload.CardID
|
|
149
|
+
copy(newCardIds[payload.NewOrder+1:], cardIds[payload.NewOrder:])
|
|
150
|
+
col["cardIds"] = newCardIds
|
|
151
|
+
columns[i] = col
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
board["columns"] = columns
|
|
155
|
+
board["updatedAt"] = time.Now().UnixMilli()
|
|
156
|
+
|
|
157
|
+
hub.Update(channel, board)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// handleKanbanCardDelete handles kanban.card.delete events.
|
|
161
|
+
func handleKanbanCardDelete(ctx context.Context, hub events.EventEmitter, conn *websocket.Conn, msg events.WSMessage) {
|
|
162
|
+
var payload struct {
|
|
163
|
+
BoardID string \`json:"boardId"\`
|
|
164
|
+
CardID string \`json:"cardId"\`
|
|
165
|
+
At int64 \`json:"at"\`
|
|
166
|
+
}
|
|
167
|
+
if err := json.Unmarshal(msg.Data, &payload); err != nil {
|
|
168
|
+
return
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
channel := events.ChannelKanban(payload.BoardID)
|
|
172
|
+
snap, _, ok := hub.Snapshot(channel)
|
|
173
|
+
if !ok {
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
var board map[string]any
|
|
178
|
+
if err := json.Unmarshal(snap, &board); err != nil {
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Remove card
|
|
183
|
+
cards, _ := board["cards"].(map[string]any)
|
|
184
|
+
var cardColumnID string
|
|
185
|
+
if card, ok := cards[payload.CardID].(map[string]any); ok {
|
|
186
|
+
cardColumnID, _ = card["columnId"].(string)
|
|
187
|
+
delete(cards, payload.CardID)
|
|
188
|
+
}
|
|
189
|
+
board["cards"] = cards
|
|
190
|
+
|
|
191
|
+
// Remove from column
|
|
192
|
+
if cardColumnID != "" {
|
|
193
|
+
columns, _ := board["columns"].([]any)
|
|
194
|
+
for i, colRaw := range columns {
|
|
195
|
+
col, _ := colRaw.(map[string]any)
|
|
196
|
+
if col["id"] == cardColumnID {
|
|
197
|
+
cardIds, _ := col["cardIds"].([]any)
|
|
198
|
+
newCardIds := []any{}
|
|
199
|
+
for _, id := range cardIds {
|
|
200
|
+
if idStr, _ := id.(string); idStr != payload.CardID {
|
|
201
|
+
newCardIds = append(newCardIds, id)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
col["cardIds"] = newCardIds
|
|
205
|
+
columns[i] = col
|
|
206
|
+
break
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
board["columns"] = columns
|
|
210
|
+
}
|
|
211
|
+
board["updatedAt"] = time.Now().UnixMilli()
|
|
212
|
+
|
|
213
|
+
hub.Update(channel, board)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
func init() {
|
|
217
|
+
events.Register("kanban.card.create", handleKanbanCardCreate)
|
|
218
|
+
events.Register("kanban.card.move", handleKanbanCardMove)
|
|
219
|
+
events.Register("kanban.card.delete", handleKanbanCardDelete)
|
|
220
|
+
}
|
|
221
|
+
`;
|