api_account.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. self.addRoute("GET", "/api/account/", self.getAccount)
  7. })
  8. }
  9. func (self *HttpServer) getAccount(c *gin.Context, auth *authContext) {
  10. var account = auth.userAccount
  11. model := accountInfoDto{
  12. Login: account.Login,
  13. Email: account.Email,
  14. AccountName: account.AccountName,
  15. }
  16. for _, collaborator := range account.Collaborators {
  17. model.Collaborators = append(model.Collaborators, &collaboratorInfoDto{
  18. AccountId: collaborator.AccountId,
  19. Role: collaborator.Role,
  20. })
  21. }
  22. c.JSON(200, model)
  23. }
  24. func (self *HttpServer) addCollaborator(c *gin.Context, auth *authContext) {
  25. var model addCollaboratorDto
  26. if !c.EnsureBody(&model) {
  27. c.JSON(400, gin.H{"status": "Collaborator not found"})
  28. return
  29. }
  30. collaborator, err := self.store.GetAccountByLogin(model.Email)
  31. if err != nil {
  32. c.JSON(404, gin.H{"status": "Collaborator not found"})
  33. return
  34. }
  35. userAccount := auth.userAccount
  36. if collaborator.Id == userAccount.Id {
  37. c.JSON(400, gin.H{"status": "Cannot add yourself as collaborator"})
  38. return
  39. }
  40. err = userAccount.AddCollaborator(collaborator.Id)
  41. if err != nil {
  42. c.JSON(400, gin.H{"status": err.Error()})
  43. return
  44. }
  45. err = self.store.UpdateAccount(userAccount)
  46. if err != nil {
  47. c.JSON(500, gin.H{"status": err.Error()})
  48. return
  49. }
  50. c.JSON(200, gin.H{"status": "Collaborator added"})
  51. }