From 78989eb9f8faf44432461ee2dadd317a9c435b61 Mon Sep 17 00:00:00 2001 From: Kharec Date: Mon, 10 Nov 2025 21:44:33 +0100 Subject: [PATCH] fix: update route in swagger annotations --- internal/handlers/auth_handler.go | 32 +++++++++++++++---------------- internal/handlers/post_handler.go | 14 +++++++------- internal/handlers/user_handler.go | 8 ++++---- internal/handlers/vote_handler.go | 8 ++++---- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/internal/handlers/auth_handler.go b/internal/handlers/auth_handler.go index 69e1b8e..2722ed5 100644 --- a/internal/handlers/auth_handler.go +++ b/internal/handlers/auth_handler.go @@ -138,7 +138,7 @@ func NewAuthHandler(authService AuthServiceInterface, userRepo repositories.User // @Failure 401 {object} AuthResponse "Invalid credentials" // @Failure 403 {object} AuthResponse "Account is locked" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/login [post] +// @Router /api/auth/login [post] func (h *AuthHandler) Login(w http.ResponseWriter, r *http.Request) { var req struct { Username string `json:"username"` @@ -180,7 +180,7 @@ func (h *AuthHandler) Login(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} AuthResponse "Invalid request data or validation failed" // @Failure 409 {object} AuthResponse "Username or email already exists" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/register [post] +// @Router /api/auth/register [post] func (h *AuthHandler) Register(w http.ResponseWriter, r *http.Request) { var req struct { Username string `json:"username"` @@ -256,7 +256,7 @@ func (h *AuthHandler) Register(w http.ResponseWriter, r *http.Request) { // @Success 200 {object} AuthResponse "Email confirmed successfully" // @Failure 400 {object} AuthResponse "Invalid or missing token" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/confirm [get] +// @Router /api/auth/confirm [get] func (h *AuthHandler) ConfirmEmail(w http.ResponseWriter, r *http.Request) { token := strings.TrimSpace(r.URL.Query().Get("token")) if token == "" { @@ -288,7 +288,7 @@ func (h *AuthHandler) ConfirmEmail(w http.ResponseWriter, r *http.Request) { // @Failure 429 {object} AuthResponse // @Failure 503 {object} AuthResponse // @Failure 500 {object} AuthResponse -// @Router /auth/resend-verification [post] +// @Router /api/auth/resend-verification [post] func (h *AuthHandler) ResendVerificationEmail(w http.ResponseWriter, r *http.Request) { var req struct { Email string `json:"email"` @@ -337,7 +337,7 @@ func (h *AuthHandler) ResendVerificationEmail(w http.ResponseWriter, r *http.Req // @Success 200 {object} AuthResponse "User profile retrieved successfully" // @Failure 401 {object} AuthResponse "Authentication required" // @Failure 404 {object} AuthResponse "User not found" -// @Router /auth/me [get] +// @Router /api/auth/me [get] func (h *AuthHandler) Me(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -362,7 +362,7 @@ func (h *AuthHandler) Me(w http.ResponseWriter, r *http.Request) { // @Param request body ForgotPasswordRequest true "Username or email" // @Success 200 {object} AuthResponse "Password reset email sent if account exists" // @Failure 400 {object} AuthResponse "Invalid request data" -// @Router /auth/forgot-password [post] +// @Router /api/auth/forgot-password [post] func (h *AuthHandler) RequestPasswordReset(w http.ResponseWriter, r *http.Request) { var req struct { UsernameOrEmail string `json:"username_or_email"` @@ -393,7 +393,7 @@ func (h *AuthHandler) RequestPasswordReset(w http.ResponseWriter, r *http.Reques // @Success 200 {object} AuthResponse "Password reset successfully" // @Failure 400 {object} AuthResponse "Invalid or expired token, or validation failed" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/reset-password [post] +// @Router /api/auth/reset-password [post] func (h *AuthHandler) ResetPassword(w http.ResponseWriter, r *http.Request) { var req struct { Token string `json:"token"` @@ -450,7 +450,7 @@ func (h *AuthHandler) ResetPassword(w http.ResponseWriter, r *http.Request) { // @Failure 409 {object} AuthResponse // @Failure 503 {object} AuthResponse // @Failure 500 {object} AuthResponse -// @Router /auth/email [put] +// @Router /api/auth/email [put] func (h *AuthHandler) UpdateEmail(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -504,7 +504,7 @@ func (h *AuthHandler) UpdateEmail(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} AuthResponse // @Failure 409 {object} AuthResponse // @Failure 500 {object} AuthResponse -// @Router /auth/username [put] +// @Router /api/auth/username [put] func (h *AuthHandler) UpdateUsername(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -553,7 +553,7 @@ func (h *AuthHandler) UpdateUsername(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} AuthResponse // @Failure 401 {object} AuthResponse // @Failure 500 {object} AuthResponse -// @Router /auth/password [put] +// @Router /api/auth/password [put] func (h *AuthHandler) UpdatePassword(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -608,7 +608,7 @@ func (h *AuthHandler) UpdatePassword(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} AuthResponse "Authentication required" // @Failure 503 {object} AuthResponse "Email delivery unavailable" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/account [delete] +// @Router /api/auth/account [delete] func (h *AuthHandler) DeleteAccount(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -638,7 +638,7 @@ func (h *AuthHandler) DeleteAccount(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} AuthResponse "Invalid or expired token" // @Failure 503 {object} AuthResponse "Email delivery unavailable" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/account/confirm [post] +// @Router /api/auth/account/confirm [post] func (h *AuthHandler) ConfirmAccountDeletion(w http.ResponseWriter, r *http.Request) { var req struct { Token string `json:"token"` @@ -684,7 +684,7 @@ func (h *AuthHandler) ConfirmAccountDeletion(w http.ResponseWriter, r *http.Requ // @Security BearerAuth // @Success 200 {object} AuthResponse "Logged out successfully" // @Failure 401 {object} AuthResponse "Authentication required" -// @Router /auth/logout [post] +// @Router /api/auth/logout [post] func (h *AuthHandler) Logout(w http.ResponseWriter, r *http.Request) { SendSuccessResponse(w, "Logged out successfully", nil) } @@ -700,7 +700,7 @@ func (h *AuthHandler) Logout(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} AuthResponse "Invalid or expired refresh token" // @Failure 403 {object} AuthResponse "Account is locked" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/refresh [post] +// @Router /api/auth/refresh [post] func (h *AuthHandler) RefreshToken(w http.ResponseWriter, r *http.Request) { var req RefreshTokenRequest @@ -732,7 +732,7 @@ func (h *AuthHandler) RefreshToken(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} AuthResponse "Invalid request body or missing refresh token" // @Failure 401 {object} AuthResponse "Invalid or expired access token" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/revoke [post] +// @Router /api/auth/revoke [post] func (h *AuthHandler) RevokeToken(w http.ResponseWriter, r *http.Request) { var req RevokeTokenRequest @@ -763,7 +763,7 @@ func (h *AuthHandler) RevokeToken(w http.ResponseWriter, r *http.Request) { // @Success 200 {object} AuthResponse "All tokens revoked successfully" // @Failure 401 {object} AuthResponse "Invalid or expired access token" // @Failure 500 {object} AuthResponse "Internal server error" -// @Router /auth/revoke-all [post] +// @Router /api/auth/revoke-all [post] func (h *AuthHandler) RevokeAllTokens(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { diff --git a/internal/handlers/post_handler.go b/internal/handlers/post_handler.go index 5cd3fb3..f6f2740 100644 --- a/internal/handlers/post_handler.go +++ b/internal/handlers/post_handler.go @@ -51,7 +51,7 @@ type UpdatePostRequest struct { // @Success 200 {object} PostResponse "Posts retrieved successfully with vote statistics" // @Failure 400 {object} PostResponse "Invalid pagination parameters" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts [get] +// @Router /api/posts [get] func (h *PostHandler) GetPosts(w http.ResponseWriter, r *http.Request) { limit, offset := parsePagination(r) @@ -87,7 +87,7 @@ func (h *PostHandler) GetPosts(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} PostResponse "Invalid post ID" // @Failure 404 {object} PostResponse "Post not found" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts/{id} [get] +// @Router /api/posts/{id} [get] func (h *PostHandler) GetPost(w http.ResponseWriter, r *http.Request) { postID, ok := ParseUintParam(w, r, "id", "Post") if !ok { @@ -118,7 +118,7 @@ func (h *PostHandler) GetPost(w http.ResponseWriter, r *http.Request) { // @Failure 409 {object} PostResponse "URL already submitted" // @Failure 502 {object} PostResponse "Failed to fetch title from URL" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts [post] +// @Router /api/posts [post] func (h *PostHandler) CreatePost(w http.ResponseWriter, r *http.Request) { var req struct { Title string `json:"title"` @@ -218,7 +218,7 @@ func (h *PostHandler) CreatePost(w http.ResponseWriter, r *http.Request) { // @Success 200 {object} PostResponse "Search results with vote statistics" // @Failure 400 {object} PostResponse "Invalid search parameters" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts/search [get] +// @Router /api/posts/search [get] func (h *PostHandler) SearchPosts(w http.ResponseWriter, r *http.Request) { query := strings.TrimSpace(r.URL.Query().Get("q")) limit, offset := parsePagination(r) @@ -264,7 +264,7 @@ func (h *PostHandler) SearchPosts(w http.ResponseWriter, r *http.Request) { // @Failure 403 {object} PostResponse "Not authorized to update this post" // @Failure 404 {object} PostResponse "Post not found" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts/{id} [put] +// @Router /api/posts/{id} [put] func (h *PostHandler) UpdatePost(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -343,7 +343,7 @@ func (h *PostHandler) UpdatePost(w http.ResponseWriter, r *http.Request) { // @Failure 403 {object} PostResponse "Not authorized to delete this post" // @Failure 404 {object} PostResponse "Post not found" // @Failure 500 {object} PostResponse "Internal server error" -// @Router /posts/{id} [delete] +// @Router /api/posts/{id} [delete] func (h *PostHandler) DeletePost(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -388,7 +388,7 @@ func (h *PostHandler) DeletePost(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} PostResponse "Invalid URL or URL parameter missing" // @Failure 501 {object} PostResponse "Title fetching is not available" // @Failure 502 {object} PostResponse "Failed to fetch title from URL" -// @Router /posts/title [get] +// @Router /api/posts/title [get] func (h *PostHandler) FetchTitleFromURL(w http.ResponseWriter, r *http.Request) { if h.titleFetcher == nil { SendErrorResponse(w, "Title fetching is not available", http.StatusNotImplemented) diff --git a/internal/handlers/user_handler.go b/internal/handlers/user_handler.go index b9fcc6c..1eed0f4 100644 --- a/internal/handlers/user_handler.go +++ b/internal/handlers/user_handler.go @@ -36,7 +36,7 @@ type UserResponse = CommonResponse // @Success 200 {object} UserResponse "Users retrieved successfully" // @Failure 401 {object} UserResponse "Authentication required" // @Failure 500 {object} UserResponse "Internal server error" -// @Router /users [get] +// @Router /api/users [get] func (h *UserHandler) GetUsers(w http.ResponseWriter, r *http.Request) { limit, offset := parsePagination(r) @@ -68,7 +68,7 @@ func (h *UserHandler) GetUsers(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} UserResponse "Authentication required" // @Failure 404 {object} UserResponse "User not found" // @Failure 500 {object} UserResponse "Internal server error" -// @Router /users/{id} [get] +// @Router /api/users/{id} [get] func (h *UserHandler) GetUser(w http.ResponseWriter, r *http.Request) { userID, ok := ParseUintParam(w, r, "id", "User") if !ok { @@ -97,7 +97,7 @@ func (h *UserHandler) GetUser(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} UserResponse "Authentication required" // @Failure 409 {object} UserResponse "Username or email already exists" // @Failure 500 {object} UserResponse "Internal server error" -// @Router /users [post] +// @Router /api/users [post] func (h *UserHandler) CreateUser(w http.ResponseWriter, r *http.Request) { var req struct { Username string `json:"username"` @@ -155,7 +155,7 @@ func (h *UserHandler) CreateUser(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} UserResponse "Invalid user ID or pagination parameters" // @Failure 401 {object} UserResponse "Authentication required" // @Failure 500 {object} UserResponse "Internal server error" -// @Router /users/{id}/posts [get] +// @Router /api/users/{id}/posts [get] func (h *UserHandler) GetUserPosts(w http.ResponseWriter, r *http.Request) { userID, ok := ParseUintParam(w, r, "id", "User") if !ok { diff --git a/internal/handlers/vote_handler.go b/internal/handlers/vote_handler.go index eb570f7..138d6d5 100644 --- a/internal/handlers/vote_handler.go +++ b/internal/handlers/vote_handler.go @@ -70,7 +70,7 @@ type VoteResponse = CommonResponse // @Failure 500 {object} VoteResponse "Internal server error" // @Example 200 {"success": true, "message": "Vote cast successfully", "data": {"post_id": 1, "type": "up", "up_votes": 5, "down_votes": 2, "score": 3, "is_anonymous": false}} // @Example 400 {"success": false, "error": "Invalid vote type. Must be 'up', 'down', or 'none'"} -// @Router /posts/{id}/vote [post] +// @Router /api/posts/{id}/vote [post] func (h *VoteHandler) CastVote(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -140,7 +140,7 @@ func (h *VoteHandler) CastVote(w http.ResponseWriter, r *http.Request) { // @Failure 400 {object} VoteResponse "Invalid post ID" // @Failure 404 {object} VoteResponse "Post not found" // @Failure 500 {object} VoteResponse "Internal server error" -// @Router /posts/{id}/vote [delete] +// @Router /api/posts/{id}/vote [delete] func (h *VoteHandler) RemoveVote(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -198,7 +198,7 @@ func (h *VoteHandler) RemoveVote(w http.ResponseWriter, r *http.Request) { // @Failure 500 {object} VoteResponse "Internal server error" // @Example 200 {"success": true, "message": "Vote retrieved successfully", "data": {"has_vote": true, "vote": {"type": "up", "user_id": 123}, "is_anonymous": false}} // @Example 200 {"success": true, "message": "No vote found", "data": {"has_vote": false, "vote": null, "is_anonymous": false}} -// @Router /posts/{id}/vote [get] +// @Router /api/posts/{id}/vote [get] func (h *VoteHandler) GetUserVote(w http.ResponseWriter, r *http.Request) { userID, ok := RequireAuth(w, r) if !ok { @@ -253,7 +253,7 @@ func (h *VoteHandler) GetUserVote(w http.ResponseWriter, r *http.Request) { // @Failure 401 {object} VoteResponse "Authentication required" // @Failure 500 {object} VoteResponse "Internal server error" // @Example 200 {"success": true, "message": "Votes retrieved successfully", "data": {"votes": [{"type": "up", "user_id": 123}, {"type": "down", "vote_hash": "abc123"}], "count": 2}} -// @Router /posts/{id}/votes [get] +// @Router /api/posts/{id}/votes [get] func (h *VoteHandler) GetPostVotes(w http.ResponseWriter, r *http.Request) { postID, ok := ParseUintParam(w, r, "id", "Post") if !ok {