From 3e10a3542f70f23313fc6a43c41aaca518e3d344 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 13 Apr 2023 01:28:48 +0300 Subject: doc: swagger init for login and user routes (#34) --- backend/controllers/loginController.go | 18 +- backend/controllers/userController.go | 39 ++++- docs/docs.go | 293 ++++++++++++++++++++++++++++++++- docs/swagger.json | 292 +++++++++++++++++++++++++++++++- docs/swagger.yaml | 177 +++++++++++++++++++- main.go | 14 +- 6 files changed, 814 insertions(+), 19 deletions(-) diff --git a/backend/controllers/loginController.go b/backend/controllers/loginController.go index 50189e8..6feda8a 100644 --- a/backend/controllers/loginController.go +++ b/backend/controllers/loginController.go @@ -15,6 +15,14 @@ import ( "github.com/solovev/steam_go" ) +// Login +// +// @Summary Get (redirect) login page for Steam auth. +// @Accept json +// @Produce json +// @Success 200 {object} models.Response{data=models.LoginResponse} +// @Failure 400 {object} models.Response +// @Router /login [get] func Login(c *gin.Context) { openID := steam_go.NewOpenId(c.Request) switch openID.Mode() { @@ -31,14 +39,16 @@ func Login(c *gin.Context) { // Create user if new var checkSteamID int64 err = database.DB.QueryRow("SELECT steam_id FROM users WHERE steam_id = $1", steamID).Scan(&checkSteamID) - if err != nil { - c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) - return - } + // if err != nil { + // fmt.Println("y1") + // c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + // return + // } // User does not exist if checkSteamID == 0 { user, err := GetPlayerSummaries(steamID, os.Getenv("API_KEY")) if err != nil { + fmt.Println("y2") c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } diff --git a/backend/controllers/userController.go b/backend/controllers/userController.go index 95b2b52..cb6c15d 100644 --- a/backend/controllers/userController.go +++ b/backend/controllers/userController.go @@ -11,6 +11,15 @@ import ( "github.com/pektezol/leastportals/backend/models" ) +// GET Profile +// +// @Summary Get profile page of session user. +// @Accept json +// @Produce json +// @Success 200 {object} models.Response{data=models.ProfileResponse} +// @Failure 400 {object} models.Response +// @Failure 401 {object} models.Response +// @Router /profile [get] func Profile(c *gin.Context) { // Check if user exists user, exists := c.Get("user") @@ -87,6 +96,16 @@ func Profile(c *gin.Context) { return } +// GET User +// +// @Summary Get profile page of another user. +// @Accept json +// @Produce json +// @Param id path int true "User ID" +// @Success 200 {object} models.Response{data=models.ProfileResponse} +// @Failure 400 {object} models.Response +// @Failure 404 {object} models.Response +// @Router /user/{id} [get] func FetchUser(c *gin.Context) { id := c.Param("id") // Check if id is all numbers and 17 length @@ -178,6 +197,15 @@ func FetchUser(c *gin.Context) { return } +// PUT Profile +// +// @Summary Update profile page of session user. +// @Accept json +// @Produce json +// @Success 200 {object} models.Response{data=models.ProfileResponse} +// @Failure 400 {object} models.Response +// @Failure 401 {object} models.Response +// @Router /profile [post] func UpdateUser(c *gin.Context) { // Check if user exists user, exists := c.Get("user") @@ -208,9 +236,18 @@ func UpdateUser(c *gin.Context) { CountryCode: profile.LocCountryCode, }, }) - return } +// PUT Profile/CountryCode +// +// @Summary Update country code of session user. +// @Accept json +// @Produce json +// @Param country_code query string true "Country Code [XX]" +// @Success 200 {object} models.Response{data=models.ProfileResponse} +// @Failure 400 {object} models.Response +// @Failure 401 {object} models.Response +// @Router /profile [put] func UpdateCountryCode(c *gin.Context) { // Check if user exists user, exists := c.Get("user") diff --git a/docs/docs.go b/docs/docs.go index b05b0ad..caa64bf 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -19,14 +19,301 @@ const docTemplate = `{ }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", - "paths": {} + "paths": { + "/login": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get (redirect) login page for Steam auth.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.LoginResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, + "/profile": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get profile page of session user.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Update country code of session user.", + "parameters": [ + { + "type": "string", + "description": "Country Code [XX]", + "name": "country_code", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Update profile page of session user.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, + "/user/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get profile page of another user.", + "parameters": [ + { + "type": "integer", + "description": "User ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + } + }, + "definitions": { + "models.LoginResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "models.ProfileResponse": { + "type": "object", + "properties": { + "avatar_link": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "profile": { + "type": "boolean" + }, + "scores_mp": { + "type": "array", + "items": { + "$ref": "#/definitions/models.ScoreResponse" + } + }, + "scores_sp": { + "type": "array", + "items": { + "$ref": "#/definitions/models.ScoreResponse" + } + }, + "steam_id": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "models.Response": { + "type": "object", + "properties": { + "data": {}, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + } + }, + "models.ScoreResponse": { + "type": "object", + "properties": { + "map_id": { + "type": "integer" + }, + "records": {} + } + } + } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", - Host: "localhost:4000", - BasePath: "", + Host: "localhost:4000/api", + BasePath: "/v1", Schemes: []string{}, Title: "Least Portals Database API", Description: "Backend API endpoints for Least Portals Database.", diff --git a/docs/swagger.json b/docs/swagger.json index 9c64dd0..3d038cb 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -10,6 +10,294 @@ }, "version": "1.0" }, - "host": "localhost:4000", - "paths": {} + "host": "localhost:4000/api", + "basePath": "/v1", + "paths": { + "/login": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get (redirect) login page for Steam auth.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.LoginResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, + "/profile": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get profile page of session user.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + }, + "put": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Update country code of session user.", + "parameters": [ + { + "type": "string", + "description": "Country Code [XX]", + "name": "country_code", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Update profile page of session user.", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, + "/user/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Get profile page of another user.", + "parameters": [ + { + "type": "integer", + "description": "User ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/models.Response" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/models.ProfileResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/models.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + } + }, + "definitions": { + "models.LoginResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "models.ProfileResponse": { + "type": "object", + "properties": { + "avatar_link": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "profile": { + "type": "boolean" + }, + "scores_mp": { + "type": "array", + "items": { + "$ref": "#/definitions/models.ScoreResponse" + } + }, + "scores_sp": { + "type": "array", + "items": { + "$ref": "#/definitions/models.ScoreResponse" + } + }, + "steam_id": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "models.Response": { + "type": "object", + "properties": { + "data": {}, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + } + }, + "models.ScoreResponse": { + "type": "object", + "properties": { + "map_id": { + "type": "integer" + }, + "records": {} + } + } + } } \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml index e4d9f39..81d4073 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1,4 +1,46 @@ -host: localhost:4000 +basePath: /v1 +definitions: + models.LoginResponse: + properties: + token: + type: string + type: object + models.ProfileResponse: + properties: + avatar_link: + type: string + country_code: + type: string + profile: + type: boolean + scores_mp: + items: + $ref: '#/definitions/models.ScoreResponse' + type: array + scores_sp: + items: + $ref: '#/definitions/models.ScoreResponse' + type: array + steam_id: + type: string + username: + type: string + type: object + models.Response: + properties: + data: {} + message: + type: string + success: + type: boolean + type: object + models.ScoreResponse: + properties: + map_id: + type: integer + records: {} + type: object +host: localhost:4000/api info: contact: {} description: Backend API endpoints for Least Portals Database. @@ -7,5 +49,136 @@ info: url: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html title: Least Portals Database API version: "1.0" -paths: {} +paths: + /login: + get: + consumes: + - application/json + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/models.Response' + - properties: + data: + $ref: '#/definitions/models.LoginResponse' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/models.Response' + summary: Get (redirect) login page for Steam auth. + /profile: + get: + consumes: + - application/json + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/models.Response' + - properties: + data: + $ref: '#/definitions/models.ProfileResponse' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/models.Response' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/models.Response' + summary: Get profile page of session user. + post: + consumes: + - application/json + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/models.Response' + - properties: + data: + $ref: '#/definitions/models.ProfileResponse' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/models.Response' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/models.Response' + summary: Update profile page of session user. + put: + consumes: + - application/json + parameters: + - description: Country Code [XX] + in: query + name: country_code + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/models.Response' + - properties: + data: + $ref: '#/definitions/models.ProfileResponse' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/models.Response' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/models.Response' + summary: Update country code of session user. + /user/{id}: + get: + consumes: + - application/json + parameters: + - description: User ID + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/models.Response' + - properties: + data: + $ref: '#/definitions/models.ProfileResponse' + type: object + "400": + description: Bad Request + schema: + $ref: '#/definitions/models.Response' + "404": + description: Not Found + schema: + $ref: '#/definitions/models.Response' + summary: Get profile page of another user. swagger: "2.0" diff --git a/main.go b/main.go index 77a05d5..d0e55a6 100644 --- a/main.go +++ b/main.go @@ -13,15 +13,15 @@ import ( _ "github.com/pektezol/leastportals/docs" ) -// @title Least Portals Database API -// @version 1.0 -// @description Backend API endpoints for Least Portals Database. +// @title Least Portals Database API +// @version 1.0 +// @description Backend API endpoints for Least Portals Database. -// @license.name GNU General Public License, Version 2 -// @license.url https://www.gnu.org/licenses/old-licenses/gpl-2.0.html +// @license.name GNU General Public License, Version 2 +// @license.url https://www.gnu.org/licenses/old-licenses/gpl-2.0.html -// @host localhost:4000 -// @BasePath +// @host localhost:4000/api +// @BasePath /v1 func main() { if os.Getenv("ENV") == "PROD" { gin.SetMode(gin.ReleaseMode) -- cgit v1.2.3