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:
@@ -54,8 +57,14 @@ proc getBreeder*(client: GodonClient, uuid: string): ApiResponse[Breeder] =
5457proc updateBreeder * (client: GodonClient , request: BreederUpdateRequest ): ApiResponse [Breeder ] =
5558 # # Update an existing breeder
5659 try :
57- let url = client.baseUrl () & " /breeders"
58- let jsonData = %* request
60+ let url = client.baseUrl () & " /breeders/" & encodeUrl (request.uuid)
61+ # Convert config string to JsonNode
62+ var jsonData = %* {
63+ " name" : request.name,
64+ " description" : request.description,
65+ " config" : parseJson (request.config)
66+ }
67+ client.httpClient.headers = newHttpHeaders ({" Content-Type" : " application/json" })
5968 let response = client.httpClient.put (url, $ jsonData)
6069 result = handleResponse [Breeder ](client, response)
6170 except CatchableError as e:
@@ -64,10 +73,9 @@ proc updateBreeder*(client: GodonClient, request: BreederUpdateRequest): ApiResp
6473proc parseBreederUpdateFromYaml * (yamlContent: string ): BreederUpdateRequest =
6574 # # Parse breeder update configuration from YAML content
6675 try :
67- let jsonNode = parseJson (yamlContent)
68- result = jsonNode.to (BreederUpdateRequest )
76+ result = yaml.loadAs [BreederUpdateRequest ](yamlContent)
6977 except CatchableError as e:
70- raise newException (ValueError , " Failed to parse YAML/JSON : " & e.msg)
78+ raise newException (ValueError , " Failed to parse YAML: " & e.msg)
7179
7280proc updateBreederFromYaml * (client: GodonClient , yamlContent: string ): ApiResponse [Breeder ] =
7381 # # Update a breeder from YAML content
@@ -80,7 +88,7 @@ proc updateBreederFromYaml*(client: GodonClient, yamlContent: string): ApiRespon
8088proc deleteBreeder * (client: GodonClient , uuid: string ): ApiResponse [JsonNode ] =
8189 # # Delete/purge a breeder by UUID
8290 try :
83- let url = client.baseUrl () & " /breeder?uuid= " & encodeUrl (uuid)
91+ let url = client.baseUrl () & " /breeders/ " & encodeUrl (uuid)
8492 let response = client.httpClient.delete (url)
8593 result = handleResponse [JsonNode ](client, response)
8694 except CatchableError as e:
0 commit comments