22# # Implementation of breeder-related API endpoints
33
44import std/ [httpclient, json, strutils, uri]
5+ import yaml
56import client, types
67
7- proc listBreeders * (client: GodonClient ): ApiResponse [seq [Breeder ]] =
8+ proc listBreeders * (client: GodonClient ): ApiResponse [seq [BreederSummary ]] =
89 # # List all configured breeders
910 try :
1011 let url = client.baseUrl () & " /breeders"
1112 let response = client.httpClient.get (url)
12- result = handleResponse [seq [Breeder ]](client, response)
13+ result = handleResponse [seq [BreederSummary ]](client, response)
1314 except CatchableError as e:
14- result = ApiResponse [seq [Breeder ]](success: false , data: @ [], error: e.msg)
15+ result = ApiResponse [seq [BreederSummary ]](success: false , data: @ [], error: e.msg)
1516
16- proc createBreeder * (client: GodonClient , request: BreederCreateRequest ): ApiResponse [Breeder ] =
17+ proc createBreeder * (client: GodonClient , request: BreederCreateRequest ): ApiResponse [BreederSummary ] =
1718 # # Create a new breeder
1819 try :
1920 let url = client.baseUrl () & " /breeders"
20- let jsonData = %* request
21+ # Convert config string to JsonNode
22+ var jsonData = %* {
23+ " name" : request.name,
24+ " config" : parseJson (request.config)
25+ }
26+ echo " Sending JSON: " , $ jsonData
27+ client.httpClient.headers = newHttpHeaders ({" Content-Type" : " application/json" })
2128 let response = client.httpClient.post (url, $ jsonData)
22- result = handleResponse [Breeder ](client, response)
29+ result = handleResponse [BreederSummary ](client, response)
2330 except CatchableError as e:
24- result = ApiResponse [Breeder ](success: false , data: default (Breeder ), error: e.msg)
31+ result = ApiResponse [BreederSummary ](success: false , data: default (BreederSummary ), error: e.msg)
2532
2633proc parseBreederFromYaml * (yamlContent: string ): BreederCreateRequest =
27- # # Parse breeder configuration from YAML content
28- # # Note: This would require a YAML library like yaml.nim
29- # # For now, this is a placeholder for the YAML parsing logic
30- # # Users can pass JSON directly or we can add proper YAML parsing later
34+ # # Parse breeder configuration from YAML content using yaml library
3135 try :
32- let jsonNode = parseJson (yamlContent)
33- result = jsonNode.to (BreederCreateRequest )
36+ result = yaml.loadAs [BreederCreateRequest ](yamlContent)
3437 except CatchableError as e:
35- raise newException (ValueError , " Failed to parse YAML/JSON : " & e.msg)
38+ raise newException (ValueError , " Failed to parse YAML: " & e.msg)
3639
37- proc createBreederFromYaml * (client: GodonClient , yamlContent: string ): ApiResponse [Breeder ] =
40+ proc createBreederFromYaml * (client: GodonClient , yamlContent: string ): ApiResponse [BreederSummary ] =
3841 # # Create a breeder from YAML content
3942 try :
4043 let request = parseBreederFromYaml (yamlContent)
4144 result = client.createBreeder (request)
4245 except CatchableError as e:
43- result = ApiResponse [Breeder ](success: false , data: default (Breeder ), error: e.msg)
46+ result = ApiResponse [BreederSummary ](success: false , data: default (BreederSummary ), error: e.msg)
4447
4548proc getBreeder * (client: GodonClient , uuid: string ): ApiResponse [Breeder ] =
4649 # # Get breeder details by UUID
4750 try :
48- let url = client.baseUrl () & " /breeder?uuid= " & encodeUrl (uuid)
51+ let url = client.baseUrl () & " /breeders/ " & encodeUrl (uuid)
4952 let response = client.httpClient.get (url)
5053 result = handleResponse [Breeder ](client, response)
5154 except CatchableError as e:
@@ -55,7 +58,14 @@ proc updateBreeder*(client: GodonClient, request: BreederUpdateRequest): ApiResp
5558 # # Update an existing breeder
5659 try :
5760 let url = client.baseUrl () & " /breeders"
58- let jsonData = %* request
61+ # Convert config string to JsonNode
62+ var jsonData = %* {
63+ " uuid" : request.uuid,
64+ " name" : request.name,
65+ " description" : request.description,
66+ " config" : parseJson (request.config)
67+ }
68+ client.httpClient.headers = newHttpHeaders ({" Content-Type" : " application/json" })
5969 let response = client.httpClient.put (url, $ jsonData)
6070 result = handleResponse [Breeder ](client, response)
6171 except CatchableError as e:
@@ -64,10 +74,9 @@ proc updateBreeder*(client: GodonClient, request: BreederUpdateRequest): ApiResp
6474proc parseBreederUpdateFromYaml * (yamlContent: string ): BreederUpdateRequest =
6575 # # Parse breeder update configuration from YAML content
6676 try :
67- let jsonNode = parseJson (yamlContent)
68- result = jsonNode.to (BreederUpdateRequest )
77+ result = yaml.loadAs [BreederUpdateRequest ](yamlContent)
6978 except CatchableError as e:
70- raise newException (ValueError , " Failed to parse YAML/JSON : " & e.msg)
79+ raise newException (ValueError , " Failed to parse YAML: " & e.msg)
7180
7281proc updateBreederFromYaml * (client: GodonClient , yamlContent: string ): ApiResponse [Breeder ] =
7382 # # Update a breeder from YAML content
@@ -80,7 +89,7 @@ proc updateBreederFromYaml*(client: GodonClient, yamlContent: string): ApiRespon
8089proc deleteBreeder * (client: GodonClient , uuid: string ): ApiResponse [JsonNode ] =
8190 # # Delete/purge a breeder by UUID
8291 try :
83- let url = client.baseUrl () & " /breeder?uuid= " & encodeUrl (uuid)
92+ let url = client.baseUrl () & " /breeders/ " & encodeUrl (uuid)
8493 let response = client.httpClient.delete (url)
8594 result = handleResponse [JsonNode ](client, response)
8695 except CatchableError as e:
0 commit comments