Added readme.md
This commit is contained in:
parent
6f56536781
commit
71409f40dc
36
docs/docs.go
36
docs/docs.go
|
@ -1,36 +0,0 @@
|
||||||
// Package docs Code generated by swaggo/swag. DO NOT EDIT
|
|
||||||
package docs
|
|
||||||
|
|
||||||
import "github.com/swaggo/swag"
|
|
||||||
|
|
||||||
const docTemplate = `{
|
|
||||||
"schemes": {{ marshal .Schemes }},
|
|
||||||
"swagger": "2.0",
|
|
||||||
"info": {
|
|
||||||
"description": "{{escape .Description}}",
|
|
||||||
"title": "{{.Title}}",
|
|
||||||
"contact": {},
|
|
||||||
"version": "{{.Version}}"
|
|
||||||
},
|
|
||||||
"host": "{{.Host}}",
|
|
||||||
"basePath": "{{.BasePath}}",
|
|
||||||
"paths": {}
|
|
||||||
}`
|
|
||||||
|
|
||||||
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
|
||||||
var SwaggerInfo = &swag.Spec{
|
|
||||||
Version: "1.0",
|
|
||||||
Host: "",
|
|
||||||
BasePath: "",
|
|
||||||
Schemes: []string{},
|
|
||||||
Title: "API для тестового задания на Golang",
|
|
||||||
Description: "",
|
|
||||||
InfoInstanceName: "swagger",
|
|
||||||
SwaggerTemplate: docTemplate,
|
|
||||||
LeftDelim: "{{",
|
|
||||||
RightDelim: "}}",
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"swagger": "2.0",
|
|
||||||
"info": {
|
|
||||||
"title": "API для тестового задания на Golang",
|
|
||||||
"contact": {},
|
|
||||||
"version": "1.0"
|
|
||||||
},
|
|
||||||
"paths": {}
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
info:
|
|
||||||
contact: {}
|
|
||||||
title: API для тестового задания на Golang
|
|
||||||
version: "1.0"
|
|
||||||
paths: {}
|
|
||||||
swagger: "2.0"
|
|
30
main.go
30
main.go
|
@ -8,23 +8,13 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
swaggerFiles "github.com/swaggo/files"
|
|
||||||
ginSwagger "github.com/swaggo/gin-swagger"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// @title API для тестового задания на Golang
|
|
||||||
// @version 1.0
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// Создание сервера
|
// Создание сервера
|
||||||
r := gin.Default()
|
r := gin.Default()
|
||||||
|
|
||||||
// Добавляем Swagger UI
|
|
||||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.POST("/product", func(c *gin.Context) {
|
r.POST("/product", func(c *gin.Context) {
|
||||||
var product database.Product
|
var product database.Product
|
||||||
if err := c.ShouldBind(&product); err != nil {
|
if err := c.ShouldBind(&product); err != nil {
|
||||||
|
@ -34,27 +24,22 @@ func main() {
|
||||||
controllers.CreateProduct(c, product)
|
controllers.CreateProduct(c, product)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.DELETE("/product/:id", func(c *gin.Context) {
|
r.DELETE("/product/:id", func(c *gin.Context) {
|
||||||
controllers.DeleteProduct(c)
|
controllers.DeleteProduct(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.GET("/product", func(c *gin.Context) {
|
r.GET("/product", func(c *gin.Context) {
|
||||||
controllers.GetProducts(c)
|
controllers.GetProducts(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.GET("/product/:id", func(c *gin.Context) {
|
r.GET("/product/:id", func(c *gin.Context) {
|
||||||
controllers.GetProductInfo(c)
|
controllers.GetProductInfo(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.GET("/product/:id/buy", func(c *gin.Context) {
|
r.GET("/product/:id/buy", func(c *gin.Context) {
|
||||||
controllers.BuyProduct(c)
|
controllers.BuyProduct(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.POST("/manufacturer", func(c *gin.Context) {
|
r.POST("/manufacturer", func(c *gin.Context) {
|
||||||
var manufacturer database.Manufacturer
|
var manufacturer database.Manufacturer
|
||||||
if err := c.ShouldBind(&manufacturer); err != nil {
|
if err := c.ShouldBind(&manufacturer); err != nil {
|
||||||
|
@ -64,19 +49,14 @@ func main() {
|
||||||
controllers.CreateManufacturer(c, manufacturer)
|
controllers.CreateManufacturer(c, manufacturer)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.DELETE("/manufacturer/:id", func(c *gin.Context) {
|
r.DELETE("/manufacturer/:id", func(c *gin.Context) {
|
||||||
controllers.DeleteManufacturer(c)
|
controllers.DeleteManufacturer(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.GET("/manufacturer", func(c *gin.Context) {
|
r.GET("/manufacturer", func(c *gin.Context) {
|
||||||
controllers.GetManufacturers(c)
|
controllers.GetManufacturers(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.PATCH("/manufacturer/:id", func(c *gin.Context) {
|
r.PATCH("/manufacturer/:id", func(c *gin.Context) {
|
||||||
var manufacturer types.ManufacturerPatchRequest
|
var manufacturer types.ManufacturerPatchRequest
|
||||||
if err := c.ShouldBind(&manufacturer); err != nil {
|
if err := c.ShouldBind(&manufacturer); err != nil {
|
||||||
|
@ -86,8 +66,6 @@ func main() {
|
||||||
controllers.EditManufacture(c, manufacturer)
|
controllers.EditManufacture(c, manufacturer)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.POST("/registration", func(c *gin.Context) {
|
r.POST("/registration", func(c *gin.Context) {
|
||||||
var form types.RegisterRequest
|
var form types.RegisterRequest
|
||||||
if err := c.ShouldBind(&form); err != nil {
|
if err := c.ShouldBind(&form); err != nil {
|
||||||
|
@ -97,8 +75,6 @@ func main() {
|
||||||
controllers.RegisterUser(c, form)
|
controllers.RegisterUser(c, form)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.POST("/login", func(c *gin.Context) {
|
r.POST("/login", func(c *gin.Context) {
|
||||||
var register types.LoginRequest
|
var register types.LoginRequest
|
||||||
if err := c.ShouldBind(®ister); err != nil {
|
if err := c.ShouldBind(®ister); err != nil {
|
||||||
|
@ -108,13 +84,10 @@ func main() {
|
||||||
controllers.LoginUser(c, register)
|
controllers.LoginUser(c, register)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.GET("/user", func(c *gin.Context) {
|
r.GET("/user", func(c *gin.Context) {
|
||||||
controllers.GetUser(c)
|
controllers.GetUser(c)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r.PATCH("/user", func(c *gin.Context) {
|
r.PATCH("/user", func(c *gin.Context) {
|
||||||
var user types.EditUserNameRequest
|
var user types.EditUserNameRequest
|
||||||
if err := c.ShouldBind(&user); err != nil {
|
if err := c.ShouldBind(&user); err != nil {
|
||||||
|
@ -124,7 +97,6 @@ func main() {
|
||||||
controllers.EditUserName(c, user)
|
controllers.EditUserName(c, user)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.POST("/user/addmoney", func(c *gin.Context) {
|
r.POST("/user/addmoney", func(c *gin.Context) {
|
||||||
var moneyRequest types.AddMoneyRequest
|
var moneyRequest types.AddMoneyRequest
|
||||||
if err := c.ShouldBind(&moneyRequest); err != nil {
|
if err := c.ShouldBind(&moneyRequest); err != nil {
|
||||||
|
@ -134,7 +106,6 @@ func main() {
|
||||||
controllers.AddMoneyToUser(c, moneyRequest)
|
controllers.AddMoneyToUser(c, moneyRequest)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
r.GET("/user/products", func(c *gin.Context) {
|
r.GET("/user/products", func(c *gin.Context) {
|
||||||
controllers.GetBuyedProducts(c)
|
controllers.GetBuyedProducts(c)
|
||||||
})
|
})
|
||||||
|
@ -158,4 +129,3 @@ func main() {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Документация API
|
||||||
|
|
||||||
|
## Обзор
|
||||||
|
Этот проект представляет собой RESTful API для управления товарами, производителями и пользователями. В качестве ORM используется GORM.
|
||||||
|
|
||||||
|
## Endpoints
|
||||||
|
|
||||||
|
### Товары
|
||||||
|
|
||||||
|
- **POST /product** - Создание нового товара. Требуется JSON с данными товара.
|
||||||
|
- **DELETE /product/:id** - Удаление товара по идентификатору.
|
||||||
|
- **GET /product** - Получение списка всех товаров.
|
||||||
|
- **GET /product/:id** - Получение информации о конкретном товаре.
|
||||||
|
- **GET /product/:id/buy** - Покупка товара по идентификатору.
|
||||||
|
|
||||||
|
### Производители
|
||||||
|
|
||||||
|
- **POST /manufacturer** - Создание нового производителя. Требуется JSON с данными производителя.
|
||||||
|
- **DELETE /manufacturer/:id** - Удаление производителя по идентификатору.
|
||||||
|
- **GET /manufacturer** - Получение списка всех производителей.
|
||||||
|
- **PATCH /manufacturer/:id** - Редактирование данных производителя. Требуется JSON с изменениями.
|
||||||
|
|
||||||
|
### Пользователи
|
||||||
|
|
||||||
|
- **POST /registration** - Регистрация нового пользователя. Требуется JSON с данными пользователя.
|
||||||
|
- **POST /login** - Вход пользователя. Требуется JSON с данными для входа.
|
||||||
|
- **GET /user** - Получение данных текущего пользователя.
|
||||||
|
- **PATCH /user** - Редактирование имени пользователя. Требуется JSON с новым именем.
|
||||||
|
- **POST /user/addmoney** - Добавление денег на счет пользователя. Требуется JSON с суммой.
|
||||||
|
- **GET /user/products** - Получение списка купленных пользователем товаров.
|
||||||
|
|
||||||
|
## Запуск сервера
|
||||||
|
|
||||||
|
Сервер запускается в докер контейнере
|
||||||
|
|
||||||
|
Сначала нужно собрать image командой:
|
||||||
|
```
|
||||||
|
docker build -t ravonzz/go-testapi .
|
||||||
|
```
|
||||||
|
|
||||||
|
Затем можно запускать контейнер вместе с БД Postgresql командой:
|
||||||
|
```
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
Loading…
Reference in New Issue