# Functions
CreateMessage godoc @Summary Create a message @Description Create and save a new message in the database @Accept json @Produce json @Param message body types.CreateMessageRequest true "Message object" @Success 201 {object} models.Message @Failure 400 {object} types.AppError @Router /messages [post] @Tags Messages.
@Summary Create a project @Description Create and save a new project with an uploaded image in the database @Accept mpfd @Produce json @Param title formData string true "Title of the project" @Param description formData string true "Description of the project" @Param image formData file true "Image file to upload" @Success 201 {object} types.AppError @Failure 400 {object} types.AppError @Router /admin/projects [post] @Tags Projects @Security BearerAuth.
DeleteMessage godoc @Summary Delete a message by ID @Description Delete a message by its ID @Produce json @Param id path string true "Message ID" @Success 204 "No Content" @Failure 404 {object} types.AppError @Failure 500 {object} types.AppError @Router /admin/messages/{id} [delete] @Tags Messages @Security BearerAuth.
GetMessageById godoc @Summary Retrieve a message by ID @Description Get a message by its ID @Produce json @Param id path string true "Message ID" @Success 200 {object} models.Message @Failure 404 {object} types.AppError @Router /admin/messages/{id} [get] @Tags Messages @Security BearerAuth.
GetMessages godoc @Summary Retrieve all messages @Description Get a list of all messages @Produce json @Success 200 {array} models.Message @Router /admin/messages [get] @Tags Messages @Security BearerAuth.
GetProjects godoc @Summary Retrieve all projects @Description Get a list of all projects @Produce json @Success 200 {array} models.Project @Router /projects [get] @Tags Projects.
Login godoc @Summary Authenticate admin user @Description Authenticate admin user and generate JWT token @Accept json @Produce json @Param admin body types.LoginInput true "Admin credentials" @Success 200 {object} types.LoginResponse "JWT token" @Failure 404 {object} types.AppError @Router /auth [post] @Tags Admin.
@Summary Update a project @Description Update an existing project in the database @Accept json @Produce json @Param id path string true "Project ID" @Param title formData string false "Updated title of the project" @Param description formData string false "Updated description of the project" @Param image formData file false "Image file to upload" @Success 200 {object} models.Project @Failure 400 {object} types.AppError @Failure 404 "Project not found" @Router /admin/projects/{id} [patch] @Tags Projects @Security BearerAuth.