api

package
v0.0.0-...-284d0f4 Latest Latest
Warning

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

Go to latest
Published: Feb 9, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package api exposes the main API engine. All HTTP APIs are handled here - so-called "business logic" should be here, or in a dedicated package (if that logic is complex enough).

To use this package, you should create a new instance with New() passing a valid Config. The resulting Router will have the Router.Handler() function that returns a handler that can be used in a http.Server (or in other middlewares).

Example:

// Create the API router
apirouter, err := api.New(api.Config{
	Logger:   logger,
	Database: appdb,
})
if err != nil {
	logger.WithError(err).Error("error creating the API server instance")
	return fmt.Errorf("error creating the API server instance: %w", err)
}
router := apirouter.Handler()

// ... other stuff here, like middleware chaining, etc.

// Create the API server
apiserver := http.Server{
	Addr:              cfg.Web.APIHost,
	Handler:           router,
	ReadTimeout:       cfg.Web.ReadTimeout,
	ReadHeaderTimeout: cfg.Web.ReadTimeout,
	WriteTimeout:      cfg.Web.WriteTimeout,
}

// Start the service listening for requests in a separate goroutine
apiserver.ListenAndServe()

See the `main.go` file inside the `cmd/webapi` for a full usage example.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Comment

type Comment struct {
	ID      int       `json:"Id"`
	Content string    `json:"content"`
	PhotoId int       `json:"PhotoId"`
	UserId  int       `json:"userId"`
	Date    time.Time `json:"date"`
}

func (*Comment) FromDatabase

func (c *Comment) FromDatabase(comment database.Comment)

func (*Comment) RightComment

func (c *Comment) RightComment() bool

RightComment checks the validity of the comment.

func (*Comment) ToDatabase

func (c *Comment) ToDatabase() database.Comment

ToDatabase returns the comment in a database-compatible representation

type Config

type Config struct {
	// Logger where log entries are sent
	Logger logrus.FieldLogger

	// Database is the instance of database.AppDatabase where data are saved
	Database database.AppDatabase
}

Config is used to provide dependencies and configuration to the New function.

type Photo

type Photo struct {
	ID       int       `json:"id"`
	UserId   int       `json:"userid"`
	Path     string    `json:"path"`
	Likes    string    `json:"likes"`
	Comments string    `json:"comments"`
	Date     time.Time `json:"date"`
}

func (*Photo) FromDatabase

func (p *Photo) FromDatabase(photo database.Photo)

func (*Photo) ToDatabase

func (p *Photo) ToDatabase() database.Photo

ToDatabase returns the photo in a database-compatible representation

type Router

type Router interface {
	// Handler returns an HTTP handler for APIs provided in this package
	Handler() http.Handler

	// Close terminates any resource used in the package
	Close() error
}

Router is the package API interface representing an API handler builder

func New

func New(cfg Config) (Router, error)

New returns a new Router instance

type User

type User struct {
	ID         int    `json:"Id"`
	Name       string `json:"Name"`
	ProfilePic int    `json:"ProfilePic"`
	Followers  string `json:"Followers"`
	Banned     string `json:"Banned"`
	Photos     string `json:"Photos"`
}

User struct represent a user in every data exchange with the external world via REST API. JSON tags have been added to the struct to conform to the OpenAPI specifications regarding JSON key names. Note: there is a similar struct in the database package. See User.FromDatabase (below) to understand why.

func (*User) FromDatabase

func (u *User) FromDatabase(user database.User)

func (*User) IsValid

func (u *User) IsValid() bool

IsValid checks the validity of the content.

func (*User) ToDatabase

func (u *User) ToDatabase() database.User

ToDatabase returns the user in a database-compatible representation

Directories

Path Synopsis
Package reqcontext contains the request context.
Package reqcontext contains the request context.

Jump to

Keyboard shortcuts

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