Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.6 KiB

  1. package Messages
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/gofrs/uuid"
  6. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  7. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  8. )
  9. // RawCreateConversationData for holding POST payload
  10. type RawCreateConversationData struct {
  11. ID string `json:"id"`
  12. Name string `json:"name"`
  13. TwoUser string `json:"two_user"`
  14. Users []Models.ConversationDetailUser `json:"users"`
  15. UserConversations []Models.UserConversation `json:"user_conversations"`
  16. }
  17. // CreateConversation creates ConversationDetail, ConversationDetailUsers and UserConversations
  18. func CreateConversation(w http.ResponseWriter, r *http.Request) {
  19. var (
  20. rawConversationData RawCreateConversationData
  21. messageThread Models.ConversationDetail
  22. err error
  23. )
  24. err = json.NewDecoder(r.Body).Decode(&rawConversationData)
  25. if err != nil {
  26. http.Error(w, "Error", http.StatusInternalServerError)
  27. return
  28. }
  29. messageThread = Models.ConversationDetail{
  30. Base: Models.Base{
  31. ID: uuid.FromStringOrNil(rawConversationData.ID),
  32. },
  33. Name: rawConversationData.Name,
  34. TwoUser: rawConversationData.TwoUser,
  35. Users: rawConversationData.Users,
  36. }
  37. err = Database.CreateConversationDetail(&messageThread)
  38. if err != nil {
  39. http.Error(w, "Error", http.StatusInternalServerError)
  40. return
  41. }
  42. err = Database.CreateUserConversations(&rawConversationData.UserConversations)
  43. if err != nil {
  44. http.Error(w, "Error", http.StatusInternalServerError)
  45. return
  46. }
  47. w.WriteHeader(http.StatusOK)
  48. }