api_account.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package api
  2. import "github.com/gin-gonic/gin"
  3. func init() {
  4. addRoutes(func(self *HttpServer) {
  5. self.addRoute("POST", "/api/account/collaborators/add", self.addCollaborator)
  6. })
  7. }
  8. type addCollaboratorDto struct {
  9. Email string `json:"email" binding:"required"`
  10. }
  11. func (self *HttpServer) addCollaborator(c *gin.Context, auth *authContext) {
  12. var model addCollaboratorDto
  13. if !c.EnsureBody(&model) {
  14. c.JSON(400, gin.H{"status": "Collaborator not found"})
  15. return
  16. }
  17. collaborator, err := self.store.GetAccountByLogin(model.Email)
  18. if err != nil {
  19. c.JSON(404, gin.H{"status": "Collaborator not found"})
  20. return
  21. }
  22. userAccount := auth.userAccount
  23. if collaborator.Id == userAccount.Id {
  24. c.JSON(400, gin.H{"status": "Cannot add yourself as collaborator"})
  25. return
  26. }
  27. err = userAccount.AddCollaborator(collaborator.Id)
  28. if err != nil {
  29. c.JSON(400, gin.H{"status": err.Error()})
  30. return
  31. }
  32. err = self.store.UpdateAccount(userAccount)
  33. if err != nil {
  34. c.JSON(500, gin.H{"status": err.Error()})
  35. return
  36. }
  37. c.JSON(200, gin.H{"status": "Collaborator added"})
  38. }