From 177a660ba0eaf2a693186e7bc16dacc5ac058286 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 2 Aug 2023 04:38:24 -0300 Subject: [PATCH 01/10] feat: add teams and members schemas --- schemas/members.go | 9 +++++++++ schemas/teams.go | 6 ++++++ 2 files changed, 15 insertions(+) create mode 100644 schemas/members.go create mode 100644 schemas/teams.go diff --git a/schemas/members.go b/schemas/members.go new file mode 100644 index 0000000..676cb03 --- /dev/null +++ b/schemas/members.go @@ -0,0 +1,9 @@ +package schemas + +type Member struct { + Id string + Login string + Html_url string + Role string + Team_id string +} diff --git a/schemas/teams.go b/schemas/teams.go new file mode 100644 index 0000000..3b9390f --- /dev/null +++ b/schemas/teams.go @@ -0,0 +1,6 @@ +package schemas + +type Team struct { + Id int + Name string +} From 18c746f7bca64e3755feb5b9a01f0f5fe18dd16f Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 2 Aug 2023 05:27:30 -0300 Subject: [PATCH 02/10] feat: add teamMembers handler Co-authored-by: Lara Carvalho --- handler/teamMembers.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 handler/teamMembers.go diff --git a/handler/teamMembers.go b/handler/teamMembers.go new file mode 100644 index 0000000..5efaf56 --- /dev/null +++ b/handler/teamMembers.go @@ -0,0 +1,33 @@ +package handler + +import ( + "net/http" + + "github.com/forjadev/gun-organization/schemas" + "github.com/gin-gonic/gin" +) + +// @Summary Returns the list of team members +// @Description Returns the list of members of specific team +// @Tags Teams +// @Accept json +// @Produce json +// @Success 200 {object} ListTeamMembersResponse +// @Router /team/{teamname}/members [get] +func ListTeamMembersHandler(ctx *gin.Context) { + // DB not initialized yet! + var db + + teamName := ctx.Param("teamname") + + if teamName == "" { + sendError(ctx, 404, "Team name is required") + return + } + + if result := db.Joins("JOIN teams ON teams.team_id = member.team_id").Where("teams.name = ?", teamName).Find(&schema.Member{}); result.Error != nil { + sendError(ctx, 404, "Team not found") + } + + sendSuccess(ctx, "ListTeamMembers", result) +} From 906421904c5f8f5f997f58b0e679f1d634d28f9b Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 2 Aug 2023 05:27:41 -0300 Subject: [PATCH 03/10] feat: add teamNameRequest schema --- schemas/teamNameRequest.go | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 schemas/teamNameRequest.go diff --git a/schemas/teamNameRequest.go b/schemas/teamNameRequest.go new file mode 100644 index 0000000..3921352 --- /dev/null +++ b/schemas/teamNameRequest.go @@ -0,0 +1,5 @@ +package schemas + +type TeamNameRequest struct { + name string +} From e83fc1e17b88262dcef944a32c4e837ab916c49d Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 2 Aug 2023 05:30:15 -0300 Subject: [PATCH 04/10] feat: add get team members route --- router/routes.go | 1 + 1 file changed, 1 insertion(+) diff --git a/router/routes.go b/router/routes.go index 8d6fb04..66c9944 100644 --- a/router/routes.go +++ b/router/routes.go @@ -23,6 +23,7 @@ func initializeRoutes(r *gin.Engine) { { // Define a GET route for the /ping endpoint v1.GET("/ping", handler.PingServerHandler) + v1.GET("/teams/:teamname/members", handler.ListTeamMembersHandler) } // Initialize Swagger documentation From 262c16958f252a54dbd96c818fd3f99935350440 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:42:25 -0300 Subject: [PATCH 05/10] fix: remove outdated schemas Co-authored-by: Lara Carvalho --- schemas/members.go | 9 --------- schemas/teamNameRequest.go | 5 ----- schemas/teams.go | 6 ------ 3 files changed, 20 deletions(-) delete mode 100644 schemas/members.go delete mode 100644 schemas/teamNameRequest.go delete mode 100644 schemas/teams.go diff --git a/schemas/members.go b/schemas/members.go deleted file mode 100644 index 676cb03..0000000 --- a/schemas/members.go +++ /dev/null @@ -1,9 +0,0 @@ -package schemas - -type Member struct { - Id string - Login string - Html_url string - Role string - Team_id string -} diff --git a/schemas/teamNameRequest.go b/schemas/teamNameRequest.go deleted file mode 100644 index 3921352..0000000 --- a/schemas/teamNameRequest.go +++ /dev/null @@ -1,5 +0,0 @@ -package schemas - -type TeamNameRequest struct { - name string -} diff --git a/schemas/teams.go b/schemas/teams.go deleted file mode 100644 index 3b9390f..0000000 --- a/schemas/teams.go +++ /dev/null @@ -1,6 +0,0 @@ -package schemas - -type Team struct { - Id int - Name string -} From a3df2df180b04beeb25c05585dda80a6320ca6b8 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:44:05 -0300 Subject: [PATCH 06/10] feat: initialize db at handler --- handler/handler.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/handler/handler.go b/handler/handler.go index 98ad295..30145b6 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -3,10 +3,18 @@ package handler import ( "net/http" + "github.com/forjadev/gun-organization/config" "github.com/forjadev/gun-organization/schemas" "github.com/gin-gonic/gin" + "gorm.io/gorm" ) +var db *gorm.DB + +func InitiliazeHandler() { + db = config.GetDatabase() +} + // @BasePath /api/v1 // @Summary Ping the server From 27dbcedaf2ab9c387f061894c732a8a0b11e26bb Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:44:40 -0300 Subject: [PATCH 07/10] refactor: getTeamMembers consulting db --- handler/{teamMembers.go => getTeamMembers.go} | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) rename handler/{teamMembers.go => getTeamMembers.go} (69%) diff --git a/handler/teamMembers.go b/handler/getTeamMembers.go similarity index 69% rename from handler/teamMembers.go rename to handler/getTeamMembers.go index 5efaf56..39e167e 100644 --- a/handler/teamMembers.go +++ b/handler/getTeamMembers.go @@ -1,8 +1,6 @@ package handler import ( - "net/http" - "github.com/forjadev/gun-organization/schemas" "github.com/gin-gonic/gin" ) @@ -15,9 +13,6 @@ import ( // @Success 200 {object} ListTeamMembersResponse // @Router /team/{teamname}/members [get] func ListTeamMembersHandler(ctx *gin.Context) { - // DB not initialized yet! - var db - teamName := ctx.Param("teamname") if teamName == "" { @@ -25,9 +20,13 @@ func ListTeamMembersHandler(ctx *gin.Context) { return } - if result := db.Joins("JOIN teams ON teams.team_id = member.team_id").Where("teams.name = ?", teamName).Find(&schema.Member{}); result.Error != nil { + members := []schemas.Member{} + + err := db.Joins("JOIN teams ON teams.team_id = member.team_id").Where("teams.name = ?", teamName).Find(&schemas.Member{}) + + if err != nil { sendError(ctx, 404, "Team not found") } - sendSuccess(ctx, "ListTeamMembers", result) + sendSuccess(ctx, "ListTeamMembers", members) } From 69115a7f519f5d6f396bd39ebd9ed1f191a4375d Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:45:15 -0300 Subject: [PATCH 08/10] feat: add initializeHandler at routes --- router/routes.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/router/routes.go b/router/routes.go index 709e73e..25238a3 100644 --- a/router/routes.go +++ b/router/routes.go @@ -10,6 +10,9 @@ import ( // initializeRoutes sets up the routes for the application func initializeRoutes(r *gin.Engine) { + // Initialize handler + handler.InitiliazeHandler() + // Set the base path for all routes basePath := "/api/v1" From 316c28d5ae295313b2905e44a80e3617f7d95888 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:45:48 -0300 Subject: [PATCH 09/10] refactor: add TeamNameRequest to team schema --- schemas/team.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/schemas/team.go b/schemas/team.go index d946765..20f82bf 100644 --- a/schemas/team.go +++ b/schemas/team.go @@ -11,6 +11,10 @@ type Team struct { Name string } +type TeamNameRequest struct { + name string +} + type TeamResponse struct { ID uint `json:"id"` CreatedAt time.Time `json:"createdAt"` From d83fefb249f58df40583837b0f2e98fdb52cf732 Mon Sep 17 00:00:00 2001 From: Joao Date: Wed, 9 Aug 2023 19:56:28 -0300 Subject: [PATCH 10/10] docs: add docs to /teams/:teamname/members --- docs/swagger.yaml | 93 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 16 deletions(-) diff --git a/docs/swagger.yaml b/docs/swagger.yaml index d2b7a99..13bf4db 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -9,7 +9,7 @@ definitions: handler.PingServerResponse: properties: data: - $ref: '#/definitions/schemas.PingResponse' + $ref: "#/definitions/schemas.PingResponse" message: type: string type: object @@ -65,50 +65,111 @@ definitions: type: string type: object type: object + schema.TeamNamePayload: + properties: + teamname: + type: string + schema.TeamMembersResponse: + properties: + data: + type: array + items: + properties: + id: + type: integer + githubId: + type: integer + url: + type: string + login: + type: string + role: + type: string + team: + type: string + createdAt: + type: string + updatedAt: + type: string + deletedAt: + type: string + message: + type: string + type: object info: contact: {} paths: /ping: get: consumes: - - application/json + - application/json description: Ping the server to check if it is running produces: - - application/json + - application/json responses: "200": description: OK schema: - $ref: '#/definitions/handler.PingServerResponse' + $ref: "#/definitions/handler.PingServerResponse" summary: Ping the server tags: - - Ping + - Ping /webhook: post: consumes: - - application/json + - application/json description: Handle with GitHub Webhook Payload parameters: - - description: Github webhook payload - in: body - name: request - required: true - schema: - $ref: '#/definitions/service.GithubWebhookUserManagePayload' + - description: Github webhook payload + in: body + name: request + required: true + schema: + $ref: "#/definitions/service.GithubWebhookUserManagePayload" produces: - - application/json + - application/json responses: "200": description: OK "400": description: Bad Request schema: - $ref: '#/definitions/handler.ErrorResponse' + $ref: "#/definitions/handler.ErrorResponse" "500": description: Server Error schema: - $ref: '#/definitions/handler.ErrorResponse' + $ref: "#/definitions/handler.ErrorResponse" summary: Github Webhook Membership Receiver tags: - - Webhook + - Webhook + /teams/:teamname/members: + get: + consumes: + - application/json + description: Returns list of members from a team + parameters: + - description: Team name + in: body + name: teamname + required: true + schema: + $ref: "#/definitions/schema.TeamNamePayload" + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: "#/definitions/schema.TeamMembersResponse" + "400": + description: Bad Request + schema: + $ref: "#/definitions/handler.ErrorResponse" + "500": + description: Server Error + schema: + $ref: "#/definitions/handler.ErrorResponse" + summary: Team members list + tags: + - Team swagger: "2.0"