1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-11 18:20:33 +09:00

GO-4459: Upgrade to OpenAPI specification v3.1 and swaggo/swag v2

This commit is contained in:
Jannis Metrikat 2025-02-16 12:59:37 +01:00
parent ce783a72e3
commit 0a0ef5317d
No known key found for this signature in database
GPG key ID: B223CAC5AAF85615
13 changed files with 1287 additions and 5397 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -21,6 +21,7 @@ import (
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id}/export/{format} [post]
func GetObjectExportHandler(s *ExportService) gin.HandlerFunc {
return func(c *gin.Context) {

View file

@ -13,7 +13,6 @@ import (
//
// @Summary Get objects in list
// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param list_id path string true "List ID"
@ -23,6 +22,7 @@ import (
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -60,6 +60,7 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -88,34 +89,28 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
}
}
// RemoveObjectsFromListHandler
// RemoveObjectFromListHandler
//
// @Summary Remove objects from list
// @Summary Remove object from list
// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param list_id path string true "List ID"
// @Param objects body []string true "List of object IDs"
// @Param object_id path string true "Object ID"
// @Success 200 {object} string "Objects removed successfully"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [delete]
func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
// @Security bearerauth
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
func RemoveObjectFromListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
listId := c.Param("list_id")
objectId := c.Param("object_id")
objects := []string{}
if err := c.ShouldBindJSON(&objects); err != nil {
apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
c.JSON(http.StatusBadRequest, apiErr)
return
}
err := s.RemoveObjectsFromList(c, spaceId, listId, objects)
err := s.RemoveObjectFromList(c, spaceId, listId, objectId)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedRemoveObjectsFromList, http.StatusInternalServerError),
)

View file

@ -20,7 +20,7 @@ var (
type Service interface {
GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
type ListService struct {
@ -76,11 +76,11 @@ func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, list
return nil
}
// RemoveObjectsFromList removes objects from a list
func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
// RemoveObjectFromList removes objects from a list
func (s *ListService) RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectId string) error {
resp := s.mw.ObjectCollectionRemove(ctx, &pb.RpcObjectCollectionRemoveRequest{
ContextId: spaceId,
ObjectIds: objectIds,
ObjectIds: []string{objectId},
})
if resp.Error.Code != pb.RpcObjectCollectionRemoveResponseError_NULL {

View file

@ -13,7 +13,6 @@ import (
//
// @Summary List objects
// @Tags objects
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@ -21,6 +20,7 @@ import (
// @Success 200 {object} pagination.PaginatedResponse[Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects [get]
func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -49,7 +49,6 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get object
// @Tags objects
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param object_id path string true "Object ID"
@ -57,6 +56,7 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id} [get]
func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -83,7 +83,6 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Delete object
// @Tags objects
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param object_id path string true "Object ID"
@ -93,6 +92,7 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id} [delete]
func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -129,6 +129,7 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects [post]
func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -165,7 +166,6 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary List types
// @Tags types
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@ -173,6 +173,7 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Type] "List of types"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types [get]
func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -199,7 +200,6 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get type
// @Tags types
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@ -207,6 +207,7 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id} [get]
func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -233,7 +234,6 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary List templates
// @Tags types
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@ -242,6 +242,7 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Template] "List of templates"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id}/templates [get]
func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -272,7 +273,6 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get template
// @Tags types
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@ -281,6 +281,7 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get]
func GetTemplateHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {

View file

@ -21,6 +21,7 @@ import (
// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /search [post]
func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -62,6 +63,7 @@ func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/search [post]
func SearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {

View file

@ -13,13 +13,13 @@ import (
//
// @Summary List spaces
// @Tags spaces
// @Accept json
// @Produce json
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
// @Param limit query int false "The number of items to return" default(100) maximum(1000)
// @Success 200 {object} pagination.PaginatedResponse[Space] "List of spaces"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces [get]
func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -46,13 +46,13 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary Get space
// @Tags spaces
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Success 200 {object} SpaceResponse "Space"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Space not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id} [get]
func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -86,6 +86,7 @@ func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces [post]
func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -115,7 +116,6 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary List members
// @Tags spaces
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@ -123,6 +123,7 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Member] "List of members"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/members [get]
func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@ -149,7 +150,6 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary Get member
// @Tags spaces
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param member_id path string true "Member ID"
@ -157,6 +157,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Member not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/members/{member_id} [get]
func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {

View file

@ -70,7 +70,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
// List
v1.GET("/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
v1.DELETE("/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), list.RemoveObjectFromListHandler(s.listService))
// Object
v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService))

View file

@ -49,22 +49,20 @@ func (s *apiService) Name() (name string) {
// Init initializes the API service.
//
// @title Anytype API
// @version 1.0
// @description This API allows interaction with Anytype resources such as spaces, objects and types.
// @termsOfService https://anytype.io/terms_of_use
// @contact.name Anytype Support
// @contact.url https://anytype.io/contact
// @contact.email support@anytype.io
// @license.name Any Source Available License 1.0
// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
// @host localhost:31009
// @BasePath /v1
// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
// @title Anytype API
// @version 1.0
// @description This API allows interaction with Anytype resources such as spaces, objects and types.
// @termsOfService https://anytype.io/terms_of_use
// @contact.name Anytype Support
// @contact.url https://anytype.io/contact
// @contact.email support@anytype.io
// @license.name Any Source Available License 1.0
// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
// @host localhost:31009
// @BasePath /v1
// @securitydefinitions.bearerauth BearerAuth
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
func (s *apiService) Init(a *app.App) (err error) {
s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr
s.accountService = a.MustComponent(account.CName).(account.Service)

12
go.mod
View file

@ -169,10 +169,10 @@ require (
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.19.6 // indirect
github.com/go-openapi/spec v0.20.4 // indirect
github.com/go-openapi/swag v0.19.15 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/spec v0.20.9 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-pkgz/expirable-cache/v3 v3.0.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
@ -220,7 +220,7 @@ require (
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-libp2p v0.38.2 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/miekg/dns v1.1.62 // indirect
@ -265,6 +265,8 @@ require (
github.com/spf13/viper v1.15.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
github.com/sv-tools/openapi v0.2.1 // indirect
github.com/swaggo/swag/v2 v2.0.0-rc4 // indirect
github.com/tetratelabs/wazero v1.8.1 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect

16
go.sum
View file

@ -353,13 +353,22 @@ github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8=
github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-pkgz/expirable-cache/v3 v3.0.0 h1:u3/gcu3sabLYiTCevoRKv+WzjIn5oo7P8XtiXBeRDLw=
github.com/go-pkgz/expirable-cache/v3 v3.0.0/go.mod h1:2OQiDyEGQalYecLWmXprm3maPXeVb5/6/X7yRPYTzec=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
@ -684,6 +693,7 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@ -728,6 +738,8 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matishsiao/goInfo v0.0.0-20240924010139-10388a85396f h1:XDrsC/9hdgiU9ecceSmYsS2E3fBtFiYc34dAMFgegnM=
github.com/matishsiao/goInfo v0.0.0-20240924010139-10388a85396f/go.mod h1:aEt7p9Rvh67BYApmZwNDPpgircTO2kgdmDUoF/1QmwA=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@ -1056,12 +1068,16 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/sv-tools/openapi v0.2.1 h1:ES1tMQMJFGibWndMagvdoo34T1Vllxr1Nlm5wz6b1aA=
github.com/sv-tools/openapi v0.2.1/go.mod h1:k5VuZamTw1HuiS9p2Wl5YIDWzYnHG6/FgPOSFXLAhGg=
github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
github.com/swaggo/swag/v2 v2.0.0-rc4 h1:SZ8cK68gcV6cslwrJMIOqPkJELRwq4gmjvk77MrvHvY=
github.com/swaggo/swag/v2 v2.0.0-rc4/go.mod h1:Ow7Y8gF16BTCDn8YxZbyKn8FkMLRUHekv1kROJZpbvE=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tetratelabs/wazero v1.8.1 h1:NrcgVbWfkWvVc4UtT4LRLDf91PsOzDzefMdwhLfA550=
github.com/tetratelabs/wazero v1.8.1/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs=