Documentation
¶
Index ¶
- func AcceptFriendRequest(c *gin.Context)
- func ChangePassword(c *gin.Context)
- func CreateComment(c *gin.Context)
- func CreateProject(c *gin.Context)
- func CreateTrack(c *gin.Context)
- func CreateUser(c *gin.Context)
- func DeleteCommentByID(c *gin.Context)
- func DeleteProject(c *gin.Context)
- func DeleteRating(c *gin.Context)
- func DeleteTrack(c *gin.Context)
- func DeleteUserByID(c *gin.Context)
- func DeleteUserByName(c *gin.Context)
- func EnsureUserOwnsTrack(c *gin.Context)
- func GetAllGenres(c *gin.Context)
- func GetAllTracks(c *gin.Context)
- func GetAllUsers(c *gin.Context)
- func GetCommentByID(c *gin.Context)
- func GetCommentByTrack(c *gin.Context)
- func GetFriends(c *gin.Context)
- func GetGenreByID(c *gin.Context)
- func GetMaxTrackPages(c *gin.Context)
- func GetPendingRequests(c *gin.Context)
- func GetPendingRequestsWith(c *gin.Context)
- func GetProject(c *gin.Context)
- func GetProjectsByOwner(c *gin.Context)
- func GetRatingsByTrack(c *gin.Context)
- func GetTrackByID(c *gin.Context)
- func GetTracksByGenre(c *gin.Context)
- func GetTracksByOwner(c *gin.Context)
- func GetUploadUrl(c *gin.Context)
- func GetUserByID(c *gin.Context)
- func GetUserByName(c *gin.Context)
- func IsFriend(c *gin.Context)
- func Pong(c *gin.Context)
- func RefuseFriendRequest(c *gin.Context)
- func RemoveFriend(c *gin.Context)
- func RequestPasswordReset(c *gin.Context)
- func ResetAvatar(c *gin.Context)
- func SendFriendRequest(c *gin.Context)
- func TestMail(c *gin.Context)
- func UnsetLastActivity(c *gin.Context)
- func UpdateComment(c *gin.Context)
- func UpdateLastActivity(c *gin.Context)
- func UpdateProject(c *gin.Context)
- func UpdateTrack(c *gin.Context)
- func UpdateUser(c *gin.Context)
- func UpsertRating(c *gin.Context)
- func VerifyEmail(c *gin.Context)
- func WithdrawFriendRequest(c *gin.Context)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AcceptFriendRequest ¶
AcceptFriendRequest godoc @Summary Accept a friend request @Description Accepts a pending friend request received by the authenticated user @Tags friends @Accept json @Produce json @Param request body dtos.AcceptFriendRequest true "Friend Request ID Data" @Success 204 {string} string "No Content" @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends/accept [post]
func ChangePassword ¶
ChangePassword godoc @Summary Change Password @Description Changes the user's password using a valid reset token @Tags auth @Accept json @Produce json @Param request body dtos.ChangePasswordRequest true "New Password" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /auth/change-password [put]
func CreateComment ¶
CreateComment godoc @Summary Create a comment @Description Creates a new comment on a track, or replies to an existing comment if reply_to_id is provided. @Tags comments @Accept json @Produce json @Param comment body dtos.CreateCommentRequest true "Comment data" @Success 201 {object} dtos.IDMessageResponse "Returns the new comment ID and a success message" @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /comments [post]
func CreateProject ¶
CreateProject godoc @Summary Create a new project @Description Creates a new project. The owner is automatically set from the provided JWT token. @Tags projects @Accept json @Produce json @Param project body dtos.CreateProjectRequest true "Project details" @Success 201 {object} dtos.IDMessageResponse "Returns the new project ID and a success message" @Failure 401 {object} swaggError401 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /projects [post]
func CreateTrack ¶
CreateTrack godoc @Summary Create or Finalize Track @Description Saves the uploaded track metadata to the database after the S3 upload finishes. @Tags tracks @Accept json @Produce json @Param track body dtos.CreateTrackRequest true "Track details" @Success 201 {object} models.Track @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /tracks [post] @Router /tracks/finalize-upload [post]
func CreateUser ¶
CreateUser godoc @Summary Create a new user @Description Registers a new user in the database @Tags users @Accept json @Produce json @Param user body dtos.SignUpRequest true "User Registration Info" @Success 201 {object} models.User @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Router /auth/sign-up [post]
func DeleteCommentByID ¶
DeleteCommentByID godoc @Summary Delete a comment @Description Deletes a comment (and automatically its replies, depending on DB cascade settings) by its UUID @Tags comments @Produce json @Param id path string true "Comment UUID" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /comments/{id} [delete]
func DeleteProject ¶
DeleteProject godoc @Summary Delete an entire project @Description Deletes the project. The requesting user must own the project. @Tags projects @Produce json @Param id path string true "Project UUID" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /projects/{id} [delete]
func DeleteRating ¶
DeleteRating godoc @Summary Delete a rating @Description Deletes a rating from the database using its UUID and returns the recalculated track statistics. @Tags ratings @Produce json @Param id path string true "Rating UUID" @Success 200 {object} dtos.RatingResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /ratings/{id} [delete]
func DeleteTrack ¶
DeleteTrack godoc @Summary Delete a single track version @Description Deletes a track and automatically re-links and renumbers the remaining versions. @Tags tracks @Produce json @Param id path string true "Track UUID" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /tracks/{id} [delete]
func DeleteUserByID ¶
DeleteUserByID godoc @Summary Delete a user by ID @Description Deletes a user from the database using their UUID @Tags users @Produce json @Param id path string true "User UUID" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /users/id/{id} [delete]
func DeleteUserByName ¶
DeleteUserByName godoc @Summary Delete a user by username @Description Deletes a user from the database using their username @Tags users @Produce json @Param username path string true "Username" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /users/{username} [delete]
func EnsureUserOwnsTrack ¶
func GetAllGenres ¶
GetAllGenres godoc @Summary Get all genres @Description Retrieves a list of all music genres. Use the "tree" query parameter to get a nested structure. @Tags genres @Produce json @Param tree query bool false "Set to true to return a nested tree structure of genres and sub-genres" @Param preload query string false "Relation to preload" Enums(Parent, SubGenres, Tracks) @Success 200 {array} models.Genre @Failure 500 {object} swaggError500 @Router /genres [get]
func GetAllTracks ¶
GetAllTracks godoc @Summary Get all tracks @Description Retrieves a paginated list of all public tracks @Tags tracks @Accept json @Produce json @Param q query string false "Search query string" @Param genre_id query string false "Filter by Genre UUID" // <--- Added this line @Param limit query int false "Limit (default 10)" @Param page query int false "Page number (default 1)" @Param sort_by query string false "Sort by column (default created_at)" Enums(name, created_at, random) @Param order query string false "Order direction (default DESC)" Enums(ASC, DESC) @Param preload query string false "Relation to preload" Enums(Owner, Comments, Ratings, Genre) @Success 200 {array} models.Track @Failure 400 {object} swaggError400 @Failure 500 {object} swaggError500 @Router /tracks [get]
func GetAllUsers ¶
GetAllUsers godoc @Summary Get all users @Description Retrieves a list of all registered users. Supports preloading relational data. @Tags users @Produce json @Param preload query string false "Relation to preload" Enums(PreferredGenres, OwnedTracks, Comments) @Success 200 {array} models.User @Failure 500 {object} swaggError500 @Router /users [get]
func GetCommentByID ¶
GetCommentByID godoc @Summary Get a comment by ID @Description Retrieves a specific comment and its nested replies using its UUID @Tags comments @Produce json @Param id path string true "Comment UUID" @Param preload query string false "Relation to preload" Enums(Author, Track, Replies) @Success 200 {object} models.Comment @Failure 404 {object} swaggError404 @Router /comments/{id} [get]
func GetCommentByTrack ¶
GetCommentByTrack godoc @Summary Get comments for a track @Description Retrieves all root-level comments (and their nested replies) for a specific track UUID @Tags comments @Produce json @Param id path string true "Track UUID" @Param preload query string false "Relation to preload" Enums(Author, Track, Replies) @Success 200 {array} models.Comment @Failure 500 {object} swaggError500 @Router /comments/track/{id} [get]
func GetFriends ¶
GetFriends godoc @Summary Get all friends @Description Retrieves the complete list of friends for the currently authenticated user @Tags friends @Produce json @Success 200 {object} swaggFriendsResponse @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends [get]
func GetGenreByID ¶
GetGenreByID godoc @Summary Get a genre by ID @Description Retrieves a specific genre's details, including its sub-genres, using its UUID @Tags genres @Produce json @Param id path string true "Genre UUID" @Param preload query string false "Relation to preload" Enums(Parent, SubGenres, Tracks) @Success 200 {object} models.Genre @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Router /genres/{id} [get]
func GetMaxTrackPages ¶
GetMaxTrackPages godoc @Summary Get max track pages @Description Calculates the total number of pages based on a given limit, optional search query, and optional genre filter @Tags tracks @Produce json @Param limit query int false "Limit per page (default 10)" @Param q query string false "Search query filter" @Param genre_id query string false "Filter by Genre UUID" @Success 200 {object} dtos.MaxPagesResponse @Failure 400 {object} swaggError400 @Failure 500 {object} swaggError500 @Router /tracks/max-pages [get]
func GetPendingRequests ¶
GetPendingRequests godoc @Summary Get pending friend requests @Description Retrieves all pending friend requests where the authenticated user is the receiver @Tags friends @Produce json @Success 200 {array} models.FriendRequest @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends/pending [get]
func GetPendingRequestsWith ¶
GetPendingRequestsWith godoc @Summary Get pending request with a specific user @Description Retrieves a pending friend request between the authenticated user and the target user @Tags friends @Produce json @Param id path string true "Target User UUID" @Success 200 {object} models.FriendRequest @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends/pending/{id} [get]
func GetProject ¶
GetProject godoc @Summary Get a project by ID @Description Retrieves a specific project's details using its UUID, including its DAW JSON state. @Tags projects @Produce json @Param id path string true "Project UUID" @Param preload query string false "Relation to preload" Enums(Owner) @Success 200 {object} models.Project @Failure 401 {object} swaggError401 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /projects/{id} [get]
func GetProjectsByOwner ¶
GetProjectsByOwner godoc @Summary Get projects by owner @Description Retrieves a list of projects owned by a specific user UUID. Optionally filter by project name using the "q" query. @Tags projects @Produce json @Param userID path string true "User UUID" @Param q query string false "Search query by project name" @Param preload query string false "Relation to preload" Enums(Owner) @Success 200 {array} models.Project @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /projects/user/{userID} [get]
func GetRatingsByTrack ¶
GetRatingsByTrack godoc @Summary Get ratings for a track @Description Retrieves all user ratings associated with a specific track UUID @Tags ratings @Produce json @Param trackID path string true "Track UUID" @Param preload query string false "Relation to preload" Enums(Author, Track) @Success 200 {array} models.Rating @Failure 500 {object} swaggError500 @Router /ratings/track/{trackID} [get]
func GetTrackByID ¶
GetTrackByID godoc @Summary Get a track by ID @Description Retrieves a track's details using its UUID @Tags tracks @Produce json @Param id path string true "Track UUID" @Param preload query string false "Relation to preload" Enums(Owner, Comments, Ratings, Genre) @Success 200 {object} models.Track @Failure 404 {object} swaggError404 @Router /tracks/{id} [get]
func GetTracksByGenre ¶
GetTracksByGenre godoc @Summary Get tracks by genre @Description Retrieves a paginated list of tracks associated with a specific genre UUID @Tags tracks @Produce json @Param genreID path string true "Genre UUID" @Param limit query int false "Limit (default 10)" @Param page query int false "Page number (default 1)" @Param preload query string false "Relation to preload" Enums(Owner, Comments, Ratings, Genre) @Success 200 {array} models.Track @Failure 400 {object} swaggError400 @Failure 500 {object} swaggError500 @Router /tracks/genre/{genreID} [get]
func GetTracksByOwner ¶
GetTracksByOwner godoc @Summary Get tracks by owner @Description Retrieves all tracks owned by a specific user UUID @Tags tracks @Produce json @Param userID path string true "User UUID" @Param preload query string false "Relation to preload" Enums(Owner, Comments, Ratings, Genre) @Success 200 {array} models.Track @Failure 500 {object} swaggError500 @Router /tracks/user/{userID} [get]
func GetUploadUrl ¶
GetUploadUrl godoc @Summary Get S3 Presigned Upload URL @Description Generates a presigned URL to securely upload a file directly to S3 @Tags upload @Accept json @Produce json @Param type path string true "Type of upload" Enums(track, artwork, avatar) @Param request body dtos.UploadFile true "File metadata" @Success 200 {object} map[string]interface{} @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /upload/upload-url/{type} [post]
func GetUserByID ¶
GetUserByID godoc @Summary Get a user by ID @Description Retrieves a user's details using their UUID. Supports preloading relational data. @Tags users @Produce json @Param id path string true "User UUID" @Param preload query string false "Relation to preload" Enums(PreferredGenres, OwnedTracks, Comments) @Success 200 {object} models.User @Failure 404 {object} swaggError404 @Router /users/id/{id} [get]
func GetUserByName ¶
GetUserByName godoc @Summary Get a user by username @Description Retrieves a user's details using their exact username. Supports preloading relational data. @Tags users @Produce json @Param username path string true "Username" @Param preload query string false "Relation to preload" Enums(PreferredGenres, OwnedTracks, Comments) @Success 200 {object} models.User @Failure 404 {object} swaggError404 @Router /users/{username} [get]
func IsFriend ¶
IsFriend godoc @Summary Check friendship status @Description Returns whether the authenticated user is currently friends with the specified user ID @Tags friends @Produce json @Param id path string true "Target User UUID" @Success 200 {object} swaggIsFriendResponse @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Security BearerAuth @Router /friends/{id} [get]
func Pong ¶
Pong godoc @Summary Health Check @Description Returns a pong message to verify the API is running @Tags status @Produce json @Success 200 {object} swaggMessageResponse @Router /status/ping [get]
func RefuseFriendRequest ¶
RefuseFriendRequest godoc @Summary Refuse a friend request @Description Rejects a pending friend request received by the authenticated user @Tags friends @Accept json @Produce json @Param request body dtos.RefuseFriendRequest true "Friend Request ID Data" @Success 200 {string} string "OK" @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends/refuse [post]
func RemoveFriend ¶
RemoveFriend godoc @Summary Remove a friend @Description Removes an existing friend from the authenticated user's friend list @Tags friends @Accept json @Produce json @Param request body dtos.RemoveFriendRequest true "Remove Friend Data" @Success 204 {string} string "No Content" @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends [delete]
func RequestPasswordReset ¶
RequestPasswordReset godoc @Summary Request Password Reset @Description Sends a password reset email if the account exists @Tags auth @Accept json @Produce json @Param request body dtos.ResetPasswordRequest true "Email Address" @Success 200 {object} swaggMessageResponse @Failure 500 {object} swaggError500 @Router /auth/reset-password [post]
func ResetAvatar ¶
ResetAvatar godoc @Summary Reset user avatar @Description Deletes the user's current avatar from S3 and replaces it with a freshly generated deterministic avatar. @Tags users @Produce json @Success 200 {object} dtos.AvatarResetResponse @Failure 401 {object} swaggError401 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /users/avatar [delete]
func SendFriendRequest ¶
SendFriendRequest godoc @Summary Send friend request @Description Dispatches a new friend request to a target user @Tags friends @Accept json @Produce json @Param request body dtos.SendFriendRequest true "Target User Data" @Success 201 {string} string "Created" @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Security BearerAuth @Router /friends [post]
func TestMail ¶
TestMail godoc @Summary Test Email Service @Description Sends a test email to verify SMTP configuration @Tags test @Produce json @Success 200 {object} swaggMessageResponse @Failure 500 {object} map[string]interface{} @Router /test/mail [get]
func UnsetLastActivity ¶
func UpdateComment ¶
UpdateComment godoc @Summary Update a comment @Description Updates the text content of an existing comment @Tags comments @Accept json @Produce json @Param id path string true "Comment UUID" @Param comment body dtos.UpdateCommentRequest true "Updated content" @Success 200 {object} swaggMessageResponse @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /comments/{id} [put]
func UpdateLastActivity ¶
func UpdateProject ¶
UpdateProject godoc @Summary Update a project @Description Updates project details or DAW JSON state. The requesting user must own the project. @Tags projects @Accept json @Produce json @Param id path string true "Project UUID" @Param project body dtos.UpdateProjectRequest true "Updated details or JSON state" @Success 200 {object} swaggMessageResponse @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /projects/{id} [put]
func UpdateTrack ¶
func UpdateUser ¶
UpdateUser godoc @Summary Update user profile @Description Updates the authenticated user's username or avatar. @Tags users @Accept json @Produce json @Param request body dtos.UpdateUserRequest true "Update payload" @Success 200 {object} swaggMessageResponse @Failure 401 {object} swaggError401 @Failure 404 {object} swaggError404 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /users [put]
func UpsertRating ¶
UpsertRating godoc @Summary Create or Update a Rating @Description Upserts (inserts or updates) a rating from a user for a specific track. @Tags ratings @Accept json @Produce json @Param rating body dtos.UpsertRatingRequest true "Rating Data" @Success 200 {object} dtos.RatingResponse @Failure 400 {object} swaggError400 @Failure 401 {object} swaggError401 @Failure 422 {object} swaggError422 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /ratings [post]
func VerifyEmail ¶
VerifyEmail godoc @Summary Verify Email @Description Verifies a user's email using the token sent to their inbox @Tags auth @Produce json @Param token query string true "JWT Verification Token" @Success 302 {string} string "Redirects to Client URL" @Failure 401 {object} swaggError401 @Router /auth/verify-email [get]
func WithdrawFriendRequest ¶
WithdrawFriendRequest godoc @Summary Withdraw sent friend request @Description Cancels a friend request previously sent by the authenticated user @Tags friends @Accept json @Produce json @Param request body dtos.WithdrawFriendRequest true "Receiver Data" @Success 204 {string} string "No Content" @Failure 401 {object} swaggError401 @Failure 403 {object} swaggError403 @Failure 404 {object} swaggError404 @Failure 500 {object} swaggError500 @Security BearerAuth @Router /friends/withdraw [post]
Types ¶
This section is empty.