@@ -60,231 +60,26 @@ func readSeedFile(path string) ([]model.ServerDetail, error) {
6060 return nil , fmt .Errorf ("failed to parse JSON: %v (original error: %v)" , jsonErr , err )
6161 }
6262
63- // Convert raw data to model format
64- servers = convertToServerDetails (rawData )
6563 }
6664
6765 log .Printf ("Found %d server entries in seed file" , len (servers ))
6866 return servers , nil
6967}
7068
71- // convertToServerDetails converts raw JSON data to ServerDetail structs
72- func convertToServerDetails (rawData []map [string ]interface {}) []model.ServerDetail {
73- servers := make ([]model.ServerDetail , 0 , len (rawData ))
74-
75- for _ , data := range rawData {
76- server := model.ServerDetail {}
77-
78- // Extract basic fields
79- if id , ok := data ["id" ].(string ); ok {
80- server .ID = id
81- }
82- if name , ok := data ["name" ].(string ); ok {
83- server .Name = name
84- }
85- if desc , ok := data ["description" ].(string ); ok {
86- server .Description = desc
87- }
88- if version , ok := data ["version" ].(string ); ok {
89- if version == "" || version == "latest" {
90- version = "0.0.1"
91- }
92- server .VersionDetail = model.VersionDetail {
93- Version : version ,
94- ReleaseDate : time .Now ().Format (time .RFC3339 ),
95- IsLatest : true ,
96- }
97- }
98-
99- // Extract repository
100- if repo , ok := data ["repository" ].(map [string ]interface {}); ok {
101- server .Repository = model.Repository {
102- URL : getStringValue (repo , "url" ),
103- SubFolder : getStringValue (repo , "subfolder" ),
104- Branch : getStringValue (repo , "branch" ),
105- Commit : getStringValue (repo , "commit" ),
106- }
107- }
108-
109- // Extract registries
110- if registries , ok := data ["registries" ].([]interface {}); ok {
111- for _ , reg := range registries {
112- if regMap , ok := reg .(map [string ]interface {}); ok {
113- registry := model.Registries {
114- Name : getStringValue (regMap , "name" ),
115- PackageName : getStringValue (regMap , "packagename" ),
116- License : getStringValue (regMap , "license" ),
117- }
118-
119- // Handle command arguments if present
120- if cmd , ok := regMap ["command_arguments" ].(map [string ]interface {}); ok {
121- commandArgs := model.Command {}
122-
123- // Extract sub commands
124- if subCmds , ok := cmd ["sub_commands" ].([]interface {}); ok {
125- for _ , sc := range subCmds {
126- if scMap , ok := sc .(map [string ]interface {}); ok {
127- subCmd := model.SubCommand {
128- Name : getStringValue (scMap , "name" ),
129- Description : getStringValue (scMap , "description" ),
130- }
131-
132- // Extract named arguments in sub commands
133- if namedArgs , ok := scMap ["named_arguments" ].([]interface {}); ok {
134- for _ , na := range namedArgs {
135- if naMap , ok := na .(map [string ]interface {}); ok {
136- namedArg := extractNamedArgument (naMap )
137- subCmd .NamedArguments = append (subCmd .NamedArguments , namedArg )
138- }
139- }
140- }
141-
142- commandArgs .SubCommands = append (commandArgs .SubCommands , subCmd )
143- }
144- }
145- }
146-
147- // Extract positional arguments
148- if posArgs , ok := cmd ["positional_arguments" ].([]interface {}); ok {
149- for _ , pa := range posArgs {
150- if paMap , ok := pa .(map [string ]interface {}); ok {
151- posArg := model.PositionalArgument {}
152-
153- if pos , ok := paMap ["position" ].(float64 ); ok {
154- posArg .Position = int (pos )
155- }
156-
157- if arg , ok := paMap ["argument" ].(map [string ]interface {}); ok {
158- posArg .Argument = extractArgument (arg )
159- }
160-
161- commandArgs .PositionalArguments = append (commandArgs .PositionalArguments , posArg )
162- }
163- }
164- }
165-
166- // Extract environment variables
167- if envVars , ok := cmd ["environment_variables" ].([]interface {}); ok {
168- for _ , ev := range envVars {
169- if evMap , ok := ev .(map [string ]interface {}); ok {
170- envVar := model.EnvironmentVariable {
171- Name : getStringValue (evMap , "name" ),
172- Description : getStringValue (evMap , "description" ),
173- }
174-
175- if required , ok := evMap ["required" ].(bool ); ok {
176- envVar .Required = required
177- }
178-
179- commandArgs .EnvironmentVariables = append (commandArgs .EnvironmentVariables , envVar )
180- }
181- }
182- }
183-
184- // Extract named arguments
185- if namedArgs , ok := cmd ["named_arguments" ].([]interface {}); ok {
186- for _ , na := range namedArgs {
187- if naMap , ok := na .(map [string ]interface {}); ok {
188- namedArg := extractNamedArgument (naMap )
189- commandArgs .NamedArguments = append (commandArgs .NamedArguments , namedArg )
190- }
191- }
192- }
193-
194- registry .CommandArguments = commandArgs
195- }
196-
197- server .Registries = append (server .Registries , registry )
198- }
199- }
200- }
201-
202- // Extract remotes
203- if remotes , ok := data ["remotes" ].([]interface {}); ok {
204- for _ , rem := range remotes {
205- if remMap , ok := rem .(map [string ]interface {}); ok {
206- remote := model.Remotes {
207- TransportType : getStringValue (remMap , "transport_type" ),
208- Url : getStringValue (remMap , "url" ),
209- }
210- server .Remotes = append (server .Remotes , remote )
211- }
212- }
213- }
214-
215- servers = append (servers , server )
216- }
217-
218- return servers
219- }
220-
221- // extractArgument extracts an Argument struct from a map
222- func extractArgument (data map [string ]interface {}) model.Argument {
223- arg := model.Argument {
224- Name : getStringValue (data , "name" ),
225- Description : getStringValue (data , "description" ),
226- DefaultValue : getStringValue (data , "default_value" ),
227- }
228-
229- // Extract boolean fields
230- if isRequired , ok := data ["is_required" ].(bool ); ok {
231- arg .IsRequired = isRequired
232- }
233- if isEditable , ok := data ["is_editable" ].(bool ); ok {
234- arg .IsEditable = isEditable
235- }
236- if isRepeatable , ok := data ["is_repeatable" ].(bool ); ok {
237- arg .IsRepeatable = isRepeatable
238- }
239-
240- // Extract string array for choices
241- if choices , ok := data ["choices" ].([]interface {}); ok {
242- for _ , choice := range choices {
243- if strChoice , ok := choice .(string ); ok {
244- arg .Choices = append (arg .Choices , strChoice )
245- }
246- }
247- }
248-
249- return arg
250- }
251-
252- // extractNamedArgument extracts a NamedArguments struct from a map
253- func extractNamedArgument (data map [string ]interface {}) model.NamedArguments {
254- namedArg := model.NamedArguments {
255- ShortFlag : getStringValue (data , "short_flag" ),
256- LongFlag : getStringValue (data , "long_flag" ),
257- }
258-
259- if requiresValue , ok := data ["requires_value" ].(bool ); ok {
260- namedArg .RequiresValue = requiresValue
261- }
262-
263- if arg , ok := data ["argument" ].(map [string ]interface {}); ok {
264- namedArg .Argument = extractArgument (arg )
265- }
266-
267- return namedArg
268- }
269-
270- // getStringValue safely extracts a string value from a map
271- func getStringValue (data map [string ]interface {}, key string ) string {
272- if val , ok := data [key ].(string ); ok {
273- return val
274- }
275- return ""
276- }
277-
27869// importData imports the seed data into MongoDB
27970func importData (ctx context.Context , collection * mongo.Collection , servers []model.ServerDetail ) {
28071 log .Printf ("Importing %d servers into collection %s" , len (servers ), collection .Name ())
28172
28273 for i , server := range servers {
74+ if server .ID == "" || server .Name == "" {
75+ log .Printf ("Skipping server %d: ID or Name is empty" , i + 1 )
76+ continue
77+ }
28378 // Create filter based on server ID
28479 filter := bson.M {"id" : server .ID }
28580
28681 if server .VersionDetail .Version == "" {
287- server .VersionDetail .Version = "0.0.1"
82+ server .VersionDetail .Version = "0.0.1-seed "
28883 server .VersionDetail .ReleaseDate = time .Now ().Format (time .RFC3339 )
28984 server .VersionDetail .IsLatest = true
29085
0 commit comments