Skip to content

Commit 5610c45

Browse files
authored
Add registries to Extension API (#107)
This change adds support for a `/registries` collection to Extension API. This changes the root of the two handlers implemented so far and adds a few other handlers to manage registries by name. This is part of #38
1 parent 6fcc386 commit 5610c45

File tree

5 files changed

+613
-42
lines changed

5 files changed

+613
-42
lines changed

docs/thv-registry-api/docs.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/thv-registry-api/swagger.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/thv-registry-api/swagger.yaml

Lines changed: 152 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -671,13 +671,148 @@ paths:
671671
summary: Get deployed servers by registry name
672672
tags:
673673
- deployed-servers
674-
/extension/v0/servers/{id}:
674+
/extension/v0/registries:
675+
get:
676+
description: List all registries
677+
requestBody:
678+
content:
679+
application/json:
680+
schema:
681+
type: object
682+
responses:
683+
"501":
684+
content:
685+
application/json:
686+
schema:
687+
additionalProperties:
688+
type: string
689+
type: object
690+
description: Not implemented
691+
summary: List registries
692+
tags:
693+
- extension
694+
/extension/v0/registries/{registryName}:
695+
delete:
696+
description: Delete a registry
697+
parameters:
698+
- description: Registry Name
699+
in: path
700+
name: registryName
701+
required: true
702+
schema:
703+
type: string
704+
requestBody:
705+
content:
706+
application/json:
707+
schema:
708+
type: object
709+
responses:
710+
"400":
711+
content:
712+
application/json:
713+
schema:
714+
additionalProperties:
715+
type: string
716+
type: object
717+
description: Bad request
718+
"501":
719+
content:
720+
application/json:
721+
schema:
722+
additionalProperties:
723+
type: string
724+
type: object
725+
description: Not implemented
726+
summary: Delete registry
727+
tags:
728+
- extension
729+
get:
730+
description: Get a registry by name
731+
parameters:
732+
- description: Registry Name
733+
in: path
734+
name: registryName
735+
required: true
736+
schema:
737+
type: string
738+
requestBody:
739+
content:
740+
application/json:
741+
schema:
742+
type: object
743+
responses:
744+
"400":
745+
content:
746+
application/json:
747+
schema:
748+
additionalProperties:
749+
type: string
750+
type: object
751+
description: Bad request
752+
"501":
753+
content:
754+
application/json:
755+
schema:
756+
additionalProperties:
757+
type: string
758+
type: object
759+
description: Not implemented
760+
summary: Get registry
761+
tags:
762+
- extension
763+
put:
764+
description: Create or update a registry
765+
parameters:
766+
- description: Registry Name
767+
in: path
768+
name: registryName
769+
required: true
770+
schema:
771+
type: string
772+
requestBody:
773+
content:
774+
application/json:
775+
schema:
776+
type: object
777+
responses:
778+
"400":
779+
content:
780+
application/json:
781+
schema:
782+
additionalProperties:
783+
type: string
784+
type: object
785+
description: Bad request
786+
"501":
787+
content:
788+
application/json:
789+
schema:
790+
additionalProperties:
791+
type: string
792+
type: object
793+
description: Not implemented
794+
summary: Create or update registry
795+
tags:
796+
- extension
797+
/extension/v0/registries/{registryName}/servers/{serverName}/versions/{version}:
675798
delete:
676799
description: Delete a server from the registry
677800
parameters:
678-
- description: Server ID
801+
- description: Registry Name
802+
in: path
803+
name: registryName
804+
required: true
805+
schema:
806+
type: string
807+
- description: URL-encoded server name (e.g., \
808+
in: path
809+
name: serverName
810+
required: true
811+
schema:
812+
type: string
813+
- description: URL-encoded version to retrieve (e.g., \
679814
in: path
680-
name: id
815+
name: version
681816
required: true
682817
schema:
683818
type: string
@@ -709,9 +844,21 @@ paths:
709844
put:
710845
description: Create or update a server in the registry
711846
parameters:
712-
- description: Server ID
847+
- description: Registry Name
713848
in: path
714-
name: id
849+
name: registryName
850+
required: true
851+
schema:
852+
type: string
853+
- description: URL-encoded server name (e.g., \
854+
in: path
855+
name: serverName
856+
required: true
857+
schema:
858+
type: string
859+
- description: URL-encoded version to retrieve (e.g., \
860+
in: path
861+
name: version
715862
required: true
716863
schema:
717864
type: string

internal/api/extension/v0/routes.go

Lines changed: 122 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,50 +29,158 @@ func Router(svc service.RegistryService) http.Handler {
2929

3030
r := chi.NewRouter()
3131

32-
r.Put("/servers/{id}", routes.upsertServer)
33-
r.Delete("/servers/{id}", routes.deleteServer)
32+
r.Get("/registries", routes.listRegistries)
33+
34+
r.Get("/registries/{registryName}", routes.getRegistry)
35+
r.Put("/registries/{registryName}", routes.upsertRegistry)
36+
r.Delete("/registries/{registryName}", routes.deleteRegistry)
37+
38+
r.Put("/registries/{registryName}/servers/{serverName}/versions/{version}", routes.upsertVersion)
39+
r.Delete("/registries/{registryName}/servers/{serverName}/versions/{version}", routes.deleteVersion)
3440

3541
return r
3642
}
3743

38-
// upsertServer handles PUT /extension/v0/servers/{id}
44+
// listRegistries handles GET /extension/v0/registries
45+
//
46+
// @Summary List registries
47+
// @Description List all registries
48+
// @Tags extension
49+
// @Accept json
50+
// @Produce json
51+
// @Failure 501 {object} map[string]string "Not implemented"
52+
// @Router /extension/v0/registries [get]
53+
func (*Routes) listRegistries(w http.ResponseWriter, _ *http.Request) {
54+
common.WriteErrorResponse(w, "Listing registries is not supported", http.StatusNotImplemented)
55+
}
56+
57+
// getRegistry handles GET /extension/v0/registries/{registryName}
58+
//
59+
// @Summary Get registry
60+
// @Description Get a registry by name
61+
// @Tags extension
62+
// @Accept json
63+
// @Produce json
64+
// @Param registryName path string true "Registry Name"
65+
// @Failure 400 {object} map[string]string "Bad request"
66+
// @Failure 501 {object} map[string]string "Not implemented"
67+
// @Router /extension/v0/registries/{registryName} [get]
68+
func (*Routes) getRegistry(w http.ResponseWriter, r *http.Request) {
69+
registryName := chi.URLParam(r, "registryName")
70+
if strings.TrimSpace(registryName) == "" {
71+
common.WriteErrorResponse(w, "Registry name is required", http.StatusBadRequest)
72+
return
73+
}
74+
75+
common.WriteErrorResponse(w, "Getting registry is not supported", http.StatusNotImplemented)
76+
}
77+
78+
// upsertRegistry handles PUT /extension/v0/registries/{registryName}
79+
//
80+
// @Summary Create or update registry
81+
// @Description Create or update a registry
82+
// @Tags extension
83+
// @Accept json
84+
// @Produce json
85+
// @Param registryName path string true "Registry Name"
86+
// @Failure 400 {object} map[string]string "Bad request"
87+
// @Failure 501 {object} map[string]string "Not implemented"
88+
// @Router /extension/v0/registries/{registryName} [put]
89+
func (*Routes) upsertRegistry(w http.ResponseWriter, r *http.Request) {
90+
registryName := chi.URLParam(r, "registryName")
91+
if strings.TrimSpace(registryName) == "" {
92+
common.WriteErrorResponse(w, "Registry name is required", http.StatusBadRequest)
93+
return
94+
}
95+
96+
common.WriteErrorResponse(w, "Creating or updating registry is not supported", http.StatusNotImplemented)
97+
}
98+
99+
// deleteRegistry handles DELETE /extension/v0/registries/{registryName}
100+
//
101+
// @Summary Delete registry
102+
// @Description Delete a registry
103+
// @Tags extension
104+
// @Accept json
105+
// @Produce json
106+
// @Param registryName path string true "Registry Name"
107+
// @Failure 400 {object} map[string]string "Bad request"
108+
// @Failure 501 {object} map[string]string "Not implemented"
109+
// @Router /extension/v0/registries/{registryName} [delete]
110+
func (*Routes) deleteRegistry(w http.ResponseWriter, r *http.Request) {
111+
registryName := chi.URLParam(r, "registryName")
112+
if strings.TrimSpace(registryName) == "" {
113+
common.WriteErrorResponse(w, "Registry name is required", http.StatusBadRequest)
114+
return
115+
}
116+
117+
common.WriteErrorResponse(w, "Deleting registry is not supported", http.StatusNotImplemented)
118+
}
119+
120+
// upsertVersion handles PUT /extension/v0/registries/{registryName}/servers/{serverName}/versions/{version}
39121
//
40122
// @Summary Create or update server
41123
// @Description Create or update a server in the registry
42124
// @Tags extension
43125
// @Accept json
44126
// @Produce json
45-
// @Param id path string true "Server ID"
127+
// @Param registryName path string true "Registry Name"
128+
// @Param serverName path string true "URL-encoded server name (e.g., \"com.example%2Fmy-server\")"
129+
// @Param version path string true "URL-encoded version to retrieve (e.g., \"1.0.0\")"
46130
// @Failure 400 {object} map[string]string "Bad request"
47131
// @Failure 501 {object} map[string]string "Not implemented"
48-
// @Router /extension/v0/servers/{id} [put]
49-
func (*Routes) upsertServer(w http.ResponseWriter, r *http.Request) {
50-
id := chi.URLParam(r, "id")
51-
if strings.TrimSpace(id) == "" {
132+
// @Router /extension/v0/registries/{registryName}/servers/{serverName}/versions/{version} [put]
133+
func (*Routes) upsertVersion(w http.ResponseWriter, r *http.Request) {
134+
registryName := chi.URLParam(r, "registryName")
135+
serverName := chi.URLParam(r, "serverName")
136+
version := chi.URLParam(r, "version")
137+
138+
if strings.TrimSpace(registryName) == "" {
139+
common.WriteErrorResponse(w, "Registry name is required", http.StatusBadRequest)
140+
return
141+
}
142+
if strings.TrimSpace(serverName) == "" {
52143
common.WriteErrorResponse(w, "Server ID is required", http.StatusBadRequest)
53144
return
54145
}
146+
if strings.TrimSpace(version) == "" {
147+
common.WriteErrorResponse(w, "Version is required", http.StatusBadRequest)
148+
return
149+
}
55150

56151
common.WriteErrorResponse(w, "Creating or updating servers is not supported", http.StatusNotImplemented)
57152
}
58153

59-
// deleteServer handles DELETE /extension/v0/servers/{id}
154+
// deleteVersion handles DELETE /extension/v0/registries/{registryName}/servers/{serverName}/versions/{version}
60155
//
61156
// @Summary Delete server
62157
// @Description Delete a server from the registry
63158
// @Tags extension
64159
// @Accept json
65160
// @Produce json
66-
// @Param id path string true "Server ID"
161+
// @Param registryName path string true "Registry Name"
162+
// @Param serverName path string true "URL-encoded server name (e.g., \"com.example%2Fmy-server\")"
163+
// @Param version path string true "URL-encoded version to retrieve (e.g., \"1.0.0\")"
67164
// @Failure 400 {object} map[string]string "Bad request"
68165
// @Failure 501 {object} map[string]string "Not implemented"
69-
// @Router /extension/v0/servers/{id} [delete]
70-
func (*Routes) deleteServer(w http.ResponseWriter, r *http.Request) {
71-
id := chi.URLParam(r, "id")
72-
if strings.TrimSpace(id) == "" {
166+
// @Router /extension/v0/registries/{registryName}/servers/{serverName}/versions/{version} [delete]
167+
func (*Routes) deleteVersion(w http.ResponseWriter, r *http.Request) {
168+
registryName := chi.URLParam(r, "registryName")
169+
serverName := chi.URLParam(r, "serverName")
170+
version := chi.URLParam(r, "version")
171+
172+
if strings.TrimSpace(registryName) == "" {
173+
common.WriteErrorResponse(w, "Registry name is required", http.StatusBadRequest)
174+
return
175+
}
176+
if strings.TrimSpace(serverName) == "" {
73177
common.WriteErrorResponse(w, "Server ID is required", http.StatusBadRequest)
74178
return
75179
}
180+
if strings.TrimSpace(version) == "" {
181+
common.WriteErrorResponse(w, "Version is required", http.StatusBadRequest)
182+
return
183+
}
76184

77185
common.WriteErrorResponse(w, "Deleting servers is not supported", http.StatusNotImplemented)
78186
}

0 commit comments

Comments
 (0)