api

package
v0.0.0-...-f01271b Latest Latest
Warning

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

Go to latest
Published: Aug 2, 2023 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUsernameAlreadyTaken = errors.New("username already taken")
	ErrEmailAlreadyTaken    = errors.New("email already taken")
	ErrAccessForbidden      = errors.New("access forbidden")
	ErrUserNotFound         = errors.New("user not found")
)

Functions

func AuthMiddleware

func AuthMiddleware() gin.HandlerFunc

func GenerateJWT

func GenerateJWT(id string) (string, error)

func GetIDFromHeader

func GetIDFromHeader(c *gin.Context) string

func GetIDFromJWT

func GetIDFromJWT(tokenString string) (string, error)

func GetIDFromToken

func GetIDFromToken(token string) string

func GetJWTFromHeader

func GetJWTFromHeader(c *gin.Context) string

func Nullable

func Nullable[T any](row *T, err error) (*T, error)

func NullableID

func NullableID(row string, err error) (string, error)

func NullableList

func NullableList[T any](rows []*T, err error) ([]*T, error)

func TokenValid

func TokenValid(c *gin.Context) error

Types

type Error

type Error struct {
	Errors map[string]interface{} `json:"errors"`
}

func NewError

func NewError(err error) *Error

func NewValidationError

func NewValidationError(err error) *Error

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(config config.Config, store db.Store, tsHandler search.Searcher, log logger.Logger) *Server

func (*Server) AddComment

func (s *Server) AddComment(c *gin.Context)

AddComment godoc @Summary Add comment @Description Add comment to article @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Param comment body addCommentReq true "Comment" @Success 200 {object} commentResponse @Failure 401 {object} Error @Failure 422 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug}/comments [post]

func (*Server) CreateArticle

func (s *Server) CreateArticle(c *gin.Context)

CreateArticle godoc @Summary Create article @Description Create Article @Tags articles @Accept json @Produce json @Param article body createArticleReq true "Article" @Success 201 {object} articleResponse @Failure 401 {object} Error @Failure 422 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles [post]

func (*Server) DeleteArticle

func (s *Server) DeleteArticle(c *gin.Context)

DeleteArticle godoc @Summary Delete article @Description Delete Article by slug @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Success 204 @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug} [delete]

func (*Server) DeleteComment

func (s *Server) DeleteComment(c *gin.Context)

DeleteComment godoc @Summary Delete comment @Description Delete comment by id @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Param id path string true "Comment id" @Success 200 {object} commentResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug}/comments/{id} [delete]

func (*Server) FavoriteArticle

func (s *Server) FavoriteArticle(c *gin.Context)

FavoriteArticle godoc @Summary Favorite article @Description Favorite article by slug @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Success 200 {object} articleResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug}/favorite [post]

func (*Server) FeedArticles

func (s *Server) FeedArticles(c *gin.Context)

FeedArticles godoc @Summary Feed articles @Description Feed articles @Tags articles @Accept json @Produce json @Param limit query int false "Limit" @Param offset query int false "Offset" @Success 200 {object} articlesResponse @Failure 500 {object} Error @Security Bearer @Router /articles/feed [get]

func (*Server) FollowUser

func (s *Server) FollowUser(c *gin.Context)

FollowUser godoc @Summary Follow user by username @Description Follow user @Tags user @Accept json @Produce json @Param username path string true "Username" @Success 200 {object} profileResponse @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /profiles/{username}/follow [post]

func (*Server) GetArticle

func (s *Server) GetArticle(c *gin.Context)

GetArticle godoc @Summary Get an article @Description Get an article by slug @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Success 200 {object} articleResponse @Failure 404 {object} Error @Failure 500 {object} Error @Router /articles/{slug} [get]

func (*Server) GetComments

func (s *Server) GetComments(c *gin.Context)

GetComments godoc @Summary Get comments @Description Get comments by article slug @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Success 200 {object} commentsResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug}/comments [get]

func (*Server) GetCurrentUser

func (s *Server) GetCurrentUser(c *gin.Context)

GetCurrentUser godoc @Summary Get current user @Description Get current user @Tags user @Accept json @Produce json @Success 200 {object} userResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /user [get]

func (*Server) GetProfile

func (s *Server) GetProfile(c *gin.Context)

GetProfile godoc @Summary Get profile @Description Get profile of any user by username. Authentification optional @Tags user @Accept json @Produce json @Param username path string true "Username" @Success 200 {object} profileResponse @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer || {} @Router /profiles/{username} [get]

func (*Server) GetTags

func (s *Server) GetTags(c *gin.Context)

GetTags godoc @Summary Get tags @Description Get tags @Tags articles @Accept json @Produce json @Success 200 {object} tagsResponse @Failure 500 {object} Error @Router /tags [get]

func (*Server) ListArticles

func (s *Server) ListArticles(c *gin.Context)

ListArticles godoc @Summary List articles @Description List articles @Tags articles @Accept json @Produce json @Param tag query string false "Tag" @Param author query string false "Author" @Param favorited query string false "Favorited" @Param limit query int false "Limit" @Param offset query int false "Offset" @Success 200 {object} map[string]interface{} @Failure 500 {object} Error @Router /articles [get]

func (*Server) LoginUser

func (s *Server) LoginUser(c *gin.Context)

LoginUser godoc @Summary Login a user @Description Login a user @Tags auth @Accept json @Produce json @Param user body userLoginReq true "User" @Success 200 {object} userResponse @Failure 403 {object} Error @Failure 422 {object} Error @Failure 500 {object} Error

@Router /users/login [post]

func (*Server) MountHandlers

func (s *Server) MountHandlers()

func (*Server) MountSwaggerHandlers

func (s *Server) MountSwaggerHandlers()

func (*Server) RegisterUser

func (s *Server) RegisterUser(c *gin.Context)

RegisterUser godoc @Summary Register a new user @Description Register a new user @Tags auth @Accept json @Produce json @Param user body userRegisterReq true "User" @Success 201 {object} userResponse @Failure 422 {object} Error @Failure 500 {object} Error

@Router /users [post]

func (*Server) Router

func (s *Server) Router() *gin.Engine

func (*Server) SearchArticles

func (s *Server) SearchArticles(c *gin.Context)

SearchArticles godoc @Summary Search for articles @Description Search for articles @Tags articles @Accept json @Param q path string true "query" @Param page path int true "page" @Param per_page path int true "per page" @Produce json @Success 200 {object} search.ArticlesWithCount @Failure 422 {object} Error @Failure 500 {object} Error @Router /articles/search [get]

func (*Server) Start

func (s *Server) Start(addr string) error

func (*Server) UnfavoriteArticle

func (s *Server) UnfavoriteArticle(c *gin.Context)

UnfavoriteArticle godoc @Summary Unfavorite article @Description Unfavorite article by slug @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Success 200 {object} articleResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug}/favorite [delete]

func (*Server) UnfollowUser

func (s *Server) UnfollowUser(c *gin.Context)

UnfollowUser godoc @Summary Unfollow user by username @Description Unfollow user @Tags user @Accept json @Produce json @Param username path string true "Username" @Success 200 {object} profileResponse @Failure 404 {object} Error @Failure 500 {object} Error @Security Bearer @Router /profiles/{username}/follow [delete]

func (*Server) UpdateArticle

func (s *Server) UpdateArticle(c *gin.Context)

UpdateArticle godoc @Summary Update article @Description Update Article @Tags articles @Accept json @Produce json @Param slug path string true "Article slug" @Param article body updateArticleReq true "Article" @Success 200 {object} articleResponse @Failure 401 {object} Error @Failure 422 {object} Error @Failure 500 {object} Error @Security Bearer @Router /articles/{slug} [put]

func (*Server) UpdateUser

func (s *Server) UpdateUser(c *gin.Context)

UpdateUser godoc @Summary Update user @Description Update user @Tags user @Accept json @Produce json @Param user body updateUserReq true "User" @Success 200 {object} userResponse @Failure 401 {object} Error @Failure 404 {object} Error @Failure 422 {object} Error @Failure 500 {object} Error @Security Bearer @Router /user [put]

Jump to

Keyboard shortcuts

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