Added readme.md

This commit is contained in:
Владимир Шалимов 2024-06-10 07:36:18 +05:00
parent 6f56536781
commit 71409f40dc
5 changed files with 44 additions and 81 deletions

View File

@ -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)
}

View File

@ -1,9 +0,0 @@
{
"swagger": "2.0",
"info": {
"title": "API для тестового задания на Golang",
"contact": {},
"version": "1.0"
},
"paths": {}
}

View File

@ -1,6 +0,0 @@
info:
contact: {}
title: API для тестового задания на Golang
version: "1.0"
paths: {}
swagger: "2.0"

30
main.go
View File

@ -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(&register); err != nil { if err := c.ShouldBind(&register); 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() {
}() }()
} }

44
readme.md Normal file
View File

@ -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
```