Documentation
¶
Index ¶
- Constants
- func EncodeEntities(entities, response interface{}, responseField string) error
- func EncodeEntity(entity, response interface{}) error
- func Routes(h *Handler) *chi.Mux
- type APIError
- type ErrorResponse
- type Handler
- func (h Handler) AuthorizationMiddleware(next http.Handler) http.Handler
- func (h Handler) ContentTypeMiddleware(next http.Handler) http.Handler
- func (h Handler) CorsMiddleware(next http.Handler) http.Handler
- func (h Handler) Create(w http.ResponseWriter, r *http.Request)
- func (h *Handler) Recipe(w http.ResponseWriter, r *http.Request)
- func (h Handler) Recipes(w http.ResponseWriter, r *http.Request)
- func (h Handler) SignIn(w http.ResponseWriter, r *http.Request)
- func (h Handler) SignUp(w http.ResponseWriter, r *http.Request)
- func (h Handler) User(w http.ResponseWriter, r *http.Request)
- type IngredientResponse
- type IngredientResponseItem
- type Metadata
- type RecipeCreateRequest
- type RecipeResponseItem
- type RecipeResponseItems
- type RecipesRequest
- type RecipesResponse
- type SignInRequest
- type SignUpRequest
- type Token
- type TokenResponse
- type UserProfileResponse
Constants ¶
const CtxKeyToken contextKey = "token"
Variables ¶
This section is empty.
Functions ¶
func EncodeEntities ¶
EncodeEntities generic function to map a slice of database entities to a response field of a response struct All entity fields that will be mapped need to be public, response target field should be same type with entities slice, response MUST be a pointer to a response struct
func EncodeEntity ¶
func EncodeEntity(entity, response interface{}) error
EncodeEntity generic function to map a database entity to a response object All fields in entity and response that needed to be mapped should be public Response MUST be a pointer to a response struct
Types ¶
type ErrorResponse ¶
type ErrorResponse struct { Message string `json:"error"` StatusCode int `json:"statusCode"` StatusMessage string `json:"statusMessage"` }
ErrorResponse object to map error response
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func NewHandler ¶
func (Handler) AuthorizationMiddleware ¶
Authorization middleware assign to all routes that require users to be signed in
func (Handler) ContentTypeMiddleware ¶
HeadersMiddleware sets pre defined headers
func (Handler) CorsMiddleware ¶
HeadersMiddleware sets pre defined headers
func (Handler) Create ¶
func (h Handler) Create(w http.ResponseWriter, r *http.Request)
Create a new recipe
func (*Handler) Recipe ¶
func (h *Handler) Recipe(w http.ResponseWriter, r *http.Request)
Recipe godoc @Summary Get a recipe @Description Get a recipe by ID @ID get-recipe-by-int @Accept application/x-www-form-urlencoded @Produce json @Param id path int true "Recipe ID" @Success 200 {object} handler.RecipeResponseItem @Failure 400 {object} handler.ErrorResponse @Failure 404 {object} handler.ErrorResponse @Failure 500 {object} handler.ErrorResponse @Security ApiKeyAuth @Router /recipes/{id} [get]
func (Handler) Recipes ¶
func (h Handler) Recipes(w http.ResponseWriter, r *http.Request)
Recipes godoc @Summary Get recipes @Description Get a list of recipes @ID get-recipes @Accept application/x-www-form-urlencoded @Produce json @Success 200 {object} handler.RecipesResponse @Failure 400 {object} handler.ErrorResponse @Failure 404 {object} handler.ErrorResponse @Failure 500 {object} handler.ErrorResponse @Security ApiKeyAuth @Router /recipes [get]
func (Handler) SignIn ¶
func (h Handler) SignIn(w http.ResponseWriter, r *http.Request)
SignIn godoc @Summary user sign in @Description user sign in @ID user-sign-in @Accept json @Produce json @Param credentials body handler.SignInRequest false "credentials payload" @Success 200 {object} handler.TokenResponse @Failure 400 {object} handler.ErrorResponse @Failure 404 {object} handler.ErrorResponse @Failure 500 {object} handler.ErrorResponse @Router /user/signin [post]
func (Handler) SignUp ¶
func (h Handler) SignUp(w http.ResponseWriter, r *http.Request)
SignUp godoc @Summary user sign up @Description user sign up @ID user-sign-up @Accept json @Produce json @Param body body handler.SignUpRequest true "sign up payload" @Success 200 {object} handler.TokenResponse @Failure 400 {object} handler.ErrorResponse @Failure 404 {object} handler.ErrorResponse @Failure 500 {object} handler.ErrorResponse @Router /user/signup [post]
func (Handler) User ¶
func (h Handler) User(w http.ResponseWriter, r *http.Request)
User godoc @Summary user profile @Description Get user profile info @ID user-profile @Accept application/x-www-form-urlencoded @Produce json @Success 200 {object} handler.UserProfileResponse @Failure 400 {object} handler.ErrorResponse @Failure 404 {object} handler.ErrorResponse @Failure 500 {object} handler.ErrorResponse @Security ApiKeyAuth @Router /user [get]
type IngredientResponse ¶
type IngredientResponse []IngredientResponseItem
IngredientResponseItem object to map slice of ingredients
type IngredientResponseItem ¶
IngredientResponseItem object to map single ingredient
type RecipeCreateRequest ¶
type RecipeCreateRequest struct { Title string `json:"title" validate:"required,min=2"` URL string `json:"url" validate:"required,min=10"` Thumbnail string `json:"thumbnail"` Ingredients []string `json:"ingredients" validate:"required,max=30,min=1"` }
CreateRecipeRequest object to map incoming request for Create handler
type RecipeResponseItem ¶
type RecipeResponseItem struct { ID int64 `json:"id"` Title string `json:"title"` Href string `json:"href"` Ingredients IngredientResponse `json:"ingredients"` Thumbnail string `json:"thumbnail"` CreatedAt string `json:"createdAt"` UpdatedAt string `json:"updatedAt"` }
RecipeResponseItem object to map a recipe item
type RecipeResponseItems ¶
type RecipeResponseItems []RecipeResponseItem
RecipeResponseItem object to map recipe items
type RecipesRequest ¶
type RecipesRequest struct { Page uint64 `schema:"page" validate:"omitempty,min=1"` Term string `schema:"term" validate:"omitempty,min=3"` Ingredients []string `schema:"ingredient" validate:"omitempty,max=5"` }
RecipesRequest object to map incoming request for Recipes handler
type RecipesResponse ¶
type RecipesResponse struct { Data *RecipeResponseItems `json:"data"` Metadata Metadata `json:"metadata"` }
RecipeResponse recipe response object
type SignInRequest ¶
type SignInRequest struct { Username string `json:"username" validate:"required,min=1,max=20"` Password string `json:"password" validate:"required,min=1,max=32"` }
SignUpRequest object to map sign up incoming request
type SignUpRequest ¶
type SignUpRequest struct { Email string `json:"email" validate:"required,email"` FullName string `json:"fullName"` Username string `json:"username" validate:"required,min=5,max=20"` Password string `json:"password" validate:"required,min=8,max=32"` RepeatPassword string `json:"repeatPassword" validate:"eqfield=Password"` }
SignUpRequest object to map sign up incoming request
type TokenResponse ¶
type TokenResponse struct {
Token string `json:"token"`
}
TokenResponse map token response
type UserProfileResponse ¶
type UserProfileResponse struct { ID int64 Username string `json:"username"` FullName string `json:"fullName"` Email string `json:"email"` Active bool `json:"active"` CreatedAt string `json:"createdAt"` UpdatedAt string `json:"updatedAt"` }
UserProfileResponse object to map user profile response
func NewUserProfileResponse ¶
func NewUserProfileResponse(u database.User) UserProfileResponse
NewUserProfileResponse creates a new UserProfileResponse object