This commit is contained in:
2021-11-17 23:44:20 +01:00
parent 7bf8db8050
commit e05bd1c743
4 changed files with 66 additions and 3 deletions

View File

@@ -82,6 +82,15 @@ func (db *Database) CreateAccount(account *Account) error {
} }
func (db *Database) DeleteAccountOfAnUser(userId, accountId string) error {
query := `
DELETE FROM account
WHERE user_id = $1
AND id = $2;`
_, err := db.Session.Exec(query, userId, accountId)
return err
}
func NewDatabase(db *postgresql.DatabasePostgreSQL) *Database { func NewDatabase(db *postgresql.DatabasePostgreSQL) *Database {
return &Database{db} return &Database{db}
} }

View File

@@ -63,7 +63,6 @@ func (c *Context) CreateAccountOfUser(gc *gin.Context) {
utils2.JSONError(gc.Writer, validators.NewDataValidationAPIError(err)) utils2.JSONError(gc.Writer, validators.NewDataValidationAPIError(err))
return return
} }
utils.GetLogger().Info(userId)
_, err = c.userService.GetUserById(userId) _, err = c.userService.GetUserById(userId)
if e, ok := err.(*model.APIError); ok { if e, ok := err.(*model.APIError); ok {
utils.GetLogger().Info(err) utils.GetLogger().Info(err)
@@ -111,7 +110,57 @@ func (c *Context) CreateAccountOfUser(gc *gin.Context) {
return return
} }
func (c *Context) DeleteAccountOfUser(context *gin.Context) { func (c *Context) DeleteAccountOfUser(gc *gin.Context) {
userId := gc.Param("userId")
err := c.Validator.VarCtx(gc, userId, "uuid4")
if err != nil {
utils2.JSONError(gc.Writer, validators.NewDataValidationAPIError(err))
return
}
accountId := gc.Param("accountId")
err = c.Validator.VarCtx(gc, userId, "uuid4")
if err != nil {
utils2.JSONError(gc.Writer, validators.NewDataValidationAPIError(err))
return
}
accountParam, err := c.userService.GetUserById(userId)
if e, ok := err.(*model.APIError); ok {
utils.GetLogger().Info(err)
utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetUser: get user error")
utils.JSONErrorWithMessage(gc.Writer, *e, e.Description)
return
} else if err != nil {
utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get user")
utils.JSONError(gc.Writer, model.ErrInternalServer)
return
}
googleUserId, exists := gc.Get("googleUserId")
if exists == false {
utils.GetLoggerFromCtx(gc).Error("error while getting google user id")
utils.JSONError(gc.Writer, model.ErrInternalServer)
return
}
acc, err := c.userService.GetUserFromGoogleID(googleUserId.(string))
if e, ok := err.(*model.APIError); ok {
utils.GetLogger().Info(err)
utils.GetLoggerFromCtx(gc).WithError(err).WithField("type", e.Type).Error("error GetUserFromGoogleID: get user from google user id")
utils.JSONErrorWithMessage(gc.Writer, *e, e.Description)
return
} else if err != nil {
utils.GetLoggerFromCtx(gc).WithError(err).Error("error while get user from google user id")
utils.JSONError(gc.Writer, model.ErrInternalServer)
return
}
if acc == nil || acc.ID != accountParam.ID {
utils.GetLoggerFromCtx(gc).WithError(err).Error("User in path doesn't match authenticated user")
utils.JSONError(gc.Writer, model.ErrBadRequestFormat)
return
}
c.service.DeleteAccountOfUser(userId, accountId)
} }

View File

@@ -48,6 +48,10 @@ func (s *Service) CreateAccount(account Account) (*Account, error) {
return &account, err return &account, err
} }
func (s *Service) DeleteAccountOfUser(userId, accountId string) error {
return s.db.DeleteAccountOfAnUser(userId, accountId)
}
func NewService(database *Database) *Service { func NewService(database *Database) *Service {
return &Service{db: database} return &Service{db: database}
} }

View File

@@ -27,10 +27,11 @@ func ValidateOAuthToken(c *gin.Context) {
} }
tokenInfoCall := oauth2Service.Tokeninfo() tokenInfoCall := oauth2Service.Tokeninfo()
tokenInfoCall.IdToken(authorizationHeaderSplitted[1]) tokenInfoCall.IdToken(authorizationHeaderSplitted[1])
_, err = tokenInfoCall.Do() token, err := tokenInfoCall.Do()
if err != nil { if err != nil {
utils.GetLogger().WithError(err).Error(err) utils.GetLogger().WithError(err).Error(err)
utils.JSONError(c.Writer, model.ErrBadRequestFormat) utils.JSONError(c.Writer, model.ErrBadRequestFormat)
return return
} }
c.Set("googleUserId", token.UserId)
} }