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.

63 lines
2.0 KiB

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