Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions common/skill.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package common

type SkillCreationInput struct {
Name string `json:"name"`
}

type SkillUpdateInput struct {
Name string `json:"name"`
}

type SkillGroupCreationInput struct {
Name string `json:"name"`
}

type SkillGroupUpdateInput struct {
Name string `json:"name"`
Skills []int `json:"skills"`
}

func NewSkillCreationInput() *SkillCreationInput {
return &SkillCreationInput{}
}

func NewSkillUpdateInput() *SkillUpdateInput {
return &SkillUpdateInput{}
}

func NewSkillGroupCreationInput() *SkillGroupCreationInput {
return &SkillGroupCreationInput{}
}

func NewSkillGroupUpdateInput() *SkillGroupUpdateInput {
return &SkillGroupUpdateInput{}
}
1 change: 1 addition & 0 deletions common/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ type UserCreationInput struct {
FullName string `json:"fullName"`
Email string `json:"email"`
}

type UserUpdateInput struct {
FullName string `json:"fullName"`
Email string `json:"email"`
Expand Down
232 changes: 232 additions & 0 deletions handlers/skill.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
package handlers

import (
"fmt"
"net/http"

"github.com/buildfromzero/skill-map/common"
"github.com/buildfromzero/skill-map/managers"
"github.com/gin-gonic/gin"
)

type SkillHandler struct {
groupName string
skillManager managers.SkillManager
}

func NewSkillHandlerFrom(skillManager managers.SkillManager) *SkillHandler {
return &SkillHandler{
"api/",
skillManager,
}
}

func (handler *SkillHandler) RegisterEndpoints(r *gin.Engine) {
skillGroup := r.Group(handler.groupName)
// skill apis
skillGroup.GET("skills/", handler.ListSkills)
skillGroup.POST("skills/", handler.CreateSkill)
skillGroup.GET("skills/:skillid/", handler.SkillDetail)
skillGroup.DELETE("skills/:skillid/", handler.DeleteSkill)
skillGroup.PATCH("skills/:skillid/", handler.UpdateSkill)
// skill group apis
skillGroup.GET("skill-groups/", handler.ListSkillGroups)
skillGroup.POST("skill-groups/", handler.CreateSkillGroup)
skillGroup.GET("skill-groups/:groupid/", handler.SkillGroupDetail)
skillGroup.DELETE("skill-groups/:groupid/", handler.DeleteSkillGroup)
skillGroup.PATCH("skill-groups/:groupid/", handler.UpdateSkillGroup)
}

func (handler *SkillHandler) CreateSkill(ctx *gin.Context) {

inputData := common.NewSkillCreationInput()

err := ctx.BindJSON(&inputData)

if err != nil {
common.BadResponse(ctx, "Failed to bind data")
return
}

newSkill, err := handler.skillManager.Create(inputData)

if err != nil {
common.BadResponse(ctx, "failed to create skill")
return
}

ctx.JSON(http.StatusOK, newSkill)
}

func (handler *SkillHandler) ListSkills(ctx *gin.Context) {

allSkills, err := handler.skillManager.List()

if err != nil {
common.BadResponse(ctx, "failed to get all skills")
return
}

ctx.JSON(http.StatusOK, allSkills)
}

func (handler *SkillHandler) SkillDetail(ctx *gin.Context) {

skillId, ok := ctx.Params.Get("skillid")

if !ok {
fmt.Println("invalid skill id")
return
}
skill, err := handler.skillManager.Get(skillId)

if err != nil {
common.BadResponse(ctx, "failed to get skill")
return
}

ctx.JSON(http.StatusOK, skill)
}

func (handler *SkillHandler) DeleteSkill(ctx *gin.Context) {

skillId, ok := ctx.Params.Get("skillid")

if !ok {
common.BadResponse(ctx, "invalid userid")
return
}
err := handler.skillManager.Delete(skillId)

if err != nil {
common.BadResponse(ctx, err.Error())
return
}

common.SuccessResponse(ctx, "deleted Skill")
}

func (handler *SkillHandler) UpdateSkill(ctx *gin.Context) {

skillId, ok := ctx.Params.Get("skillid")

if !ok {
common.BadResponse(ctx, "failed to delete skill")
return
}

inputData := common.NewSkillUpdateInput()

err := ctx.BindJSON(&inputData)

if err != nil {
common.BadResponse(ctx, "failed to bind data")
return
}

skill, err := handler.skillManager.Update(skillId, inputData)

if err != nil {
common.BadResponse(ctx, "failed to update skill")
return
}

ctx.JSON(http.StatusOK, skill)
}

func (handler *SkillHandler) CreateSkillGroup(ctx *gin.Context) {

inputData := common.NewSkillGroupCreationInput()

err := ctx.BindJSON(&inputData)

if err != nil {
common.BadResponse(ctx, "failed to bind data")
return
}

newSkillGroup, err := handler.skillManager.CreateGroup(inputData)

if err != nil {
common.BadResponse(ctx, "failed to create Skill Group")
return
}

ctx.JSON(http.StatusOK, newSkillGroup)
}

func (handler *SkillHandler) ListSkillGroups(ctx *gin.Context) {

skillGroups, err := handler.skillManager.ListGroup()

if err != nil {
common.BadResponse(ctx, "failed to get all Skill Groups")
return
}

ctx.JSON(http.StatusOK, skillGroups)
}

func (handler *SkillHandler) SkillGroupDetail(ctx *gin.Context) {

groupId, ok := ctx.Params.Get("groupid")

if !ok {
fmt.Println("invalid group id")
return
}
skillGroup, err := handler.skillManager.GetGroup(groupId)

if err != nil {
common.BadResponse(ctx, "failed to get Skill Group")
return
}

ctx.JSON(http.StatusOK, skillGroup)
}

func (handler *SkillHandler) DeleteSkillGroup(ctx *gin.Context) {

groupId, ok := ctx.Params.Get("groupid")

if !ok {
common.BadResponse(ctx, "invalid Group id")
return
}
err := handler.skillManager.DeleteGroup(groupId)

if err != nil {
common.BadResponse(ctx, err.Error())
return
}

common.SuccessResponse(ctx, "deleted Skill Group")
}

func (handler *SkillHandler) UpdateSkillGroup(ctx *gin.Context) {

groupId, ok := ctx.Params.Get("groupid")

if !ok {
common.BadResponse(ctx, "failed to get group id")
return
}

inputData := common.NewSkillGroupUpdateInput()

err := ctx.BindJSON(&inputData)

if err != nil {
common.BadResponse(ctx, err.Error())
return
}

skillGroup, err := handler.skillManager.UpdateGroup(groupId, inputData)

if err != nil {
common.BadResponse(ctx, "failed to update Skill Group")
return
}

ctx.JSON(http.StatusOK, skillGroup)
}
40 changes: 20 additions & 20 deletions handlers/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,24 @@ func NewUserHandlerFrom(userManager managers.UserManager) *UserHandler {
}
}

func (handler *UserHandler) RegisterUserApis(r *gin.Engine) {
func (handler *UserHandler) RegisterEndpoints(r *gin.Engine) {
userGroup := r.Group(handler.groupName)

userGroup.GET("", handler.List)
userGroup.POST("", handler.Create)
userGroup.GET(":userid/", handler.Detail)
userGroup.DELETE(":userid/", handler.Delete)
userGroup.PATCH(":userid/", handler.Update)
userGroup.GET("", handler.ListUser)
userGroup.POST("", handler.CreateUser)
userGroup.GET(":userid/", handler.UserDetail)
userGroup.DELETE(":userid/", handler.DeleteUser)
userGroup.PATCH(":userid/", handler.UpdateUser)
}

func (handler *UserHandler) Create(ctx *gin.Context) {
func (handler *UserHandler) CreateUser(ctx *gin.Context) {

userData := common.NewUserCreationInput()

err := ctx.BindJSON(&userData)

if err != nil {
common.BadResponse(ctx, "Failed to bind data")
common.BadResponse(ctx, "failed to bind data")
return
}

Expand All @@ -52,7 +52,7 @@ func (handler *UserHandler) Create(ctx *gin.Context) {
ctx.JSON(http.StatusOK, newUser)
}

func (handler *UserHandler) List(ctx *gin.Context) {
func (handler *UserHandler) ListUser(ctx *gin.Context) {

allUsers, err := handler.userManager.List()

Expand All @@ -64,49 +64,49 @@ func (handler *UserHandler) List(ctx *gin.Context) {
ctx.JSON(http.StatusOK, allUsers)
}

func (handler *UserHandler) Detail(ctx *gin.Context) {
func (handler *UserHandler) UserDetail(ctx *gin.Context) {

userId, ok := ctx.Params.Get("userid")

if !ok {
fmt.Println("invalid userid")
}
user, err := handler.userManager.Get(userId)

if user.ID == 0 {
common.BadResponse(ctx, "no user present")
return
}
user, err := handler.userManager.Get(userId)

if err != nil {
common.BadResponse(ctx, "failed to get user")
common.BadResponse(ctx, err.Error())
return
}

ctx.JSON(http.StatusOK, user)
}

func (handler *UserHandler) Delete(ctx *gin.Context) {
func (handler *UserHandler) DeleteUser(ctx *gin.Context) {

userId, ok := ctx.Params.Get("userid")

if !ok {
common.BadResponse(ctx, "invalid userid")
return
}
err := handler.userManager.Delete(userId)

if err != nil {
common.BadResponse(ctx, "failed to delete user")
common.BadResponse(ctx, err.Error())
return
}

common.SuccessResponse(ctx, "Deleted user")
}

func (handler *UserHandler) Update(ctx *gin.Context) {
func (handler *UserHandler) UpdateUser(ctx *gin.Context) {

userId, ok := ctx.Params.Get("userid")

if !ok {
common.BadResponse(ctx, "failed to delete user")
return
}

userData := common.NewUserUpdateInput()
Expand All @@ -121,7 +121,7 @@ func (handler *UserHandler) Update(ctx *gin.Context) {
user, err := handler.userManager.Update(userId, userData)

if err != nil {
common.BadResponse(ctx, "failed to update user")
common.BadResponse(ctx, err.Error())
return
}

Expand Down
Loading