controllers

package
v0.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2026 License: GPL-3.0 Imports: 0 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AcceptFriendRequest

func AcceptFriendRequest(c *gin.Context)

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

func ChangePassword(c *gin.Context)

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

func CreateComment(c *gin.Context)

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

func CreateProject(c *gin.Context)

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

func CreateTrack(c *gin.Context)

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

func CreateUser(c *gin.Context)

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

func DeleteCommentByID(c *gin.Context)

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

func DeleteProject(c *gin.Context)

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

func DeleteRating(c *gin.Context)

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

func DeleteTrack(c *gin.Context)

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

func DeleteUserByID(c *gin.Context)

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

func DeleteUserByName(c *gin.Context)

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 EnsureUserOwnsTrack(c *gin.Context)

func GetAllGenres

func GetAllGenres(c *gin.Context)

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

func GetAllTracks(c *gin.Context)

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

func GetAllUsers(c *gin.Context)

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

func GetCommentByID(c *gin.Context)

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

func GetCommentByTrack(c *gin.Context)

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

func GetFriends(c *gin.Context)

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

func GetGenreByID(c *gin.Context)

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

func GetMaxTrackPages(c *gin.Context)

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

func GetPendingRequests(c *gin.Context)

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

func GetPendingRequestsWith(c *gin.Context)

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

func GetProject(c *gin.Context)

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

func GetProjectsByOwner(c *gin.Context)

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

func GetRatingsByTrack(c *gin.Context)

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

func GetTrackByID(c *gin.Context)

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

func GetTracksByGenre(c *gin.Context)

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

func GetTracksByOwner(c *gin.Context)

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

func GetUploadUrl(c *gin.Context)

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

func GetUserByID(c *gin.Context)

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

func GetUserByName(c *gin.Context)

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

func IsFriend(c *gin.Context)

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

func Pong(c *gin.Context)

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

func RefuseFriendRequest(c *gin.Context)

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

func RemoveFriend(c *gin.Context)

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

func RequestPasswordReset(c *gin.Context)

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

func ResetAvatar(c *gin.Context)

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

func SendFriendRequest(c *gin.Context)

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

func TestMail(c *gin.Context)

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 UnsetLastActivity(c *gin.Context)

func UpdateComment

func UpdateComment(c *gin.Context)

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 UpdateLastActivity(c *gin.Context)

func UpdateProject

func UpdateProject(c *gin.Context)

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 UpdateTrack(c *gin.Context)

func UpdateUser

func UpdateUser(c *gin.Context)

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

func UpsertRating(c *gin.Context)

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

func VerifyEmail(c *gin.Context)

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

func WithdrawFriendRequest(c *gin.Context)

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL