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.

85 lines
3.6 KiB

  1. package Database
  2. import (
  3. "time"
  4. "github.com/gofrs/uuid"
  5. "gorm.io/gorm"
  6. "gorm.io/gorm/clause"
  7. )
  8. // ConversationDetail stores the name for the conversation
  9. type ConversationDetail struct {
  10. Base
  11. Name string `gorm:"not null" json:"name"` // Stored encrypted
  12. Users []ConversationDetailUser ` json:"users"`
  13. TwoUser string `gorm:"not null" json:"two_user"`
  14. AttachmentID *uuid.UUID ` json:"attachment_id"`
  15. Attachment Attachment ` json:"attachment"`
  16. MessageExpiryDefault MessageExpiry `gorm:"default:no_expiry" json:"-" sql:"type:ENUM('fifteen_min', 'thirty_min', 'one_hour', 'three_hour', 'six_hour', 'twelve_hour', 'one_day', 'three_day', 'no_expiry')"` // Stored encrypted
  17. MessageExpiry string `gorm:"-" json:"message_expiry"` // Stored encrypted
  18. AdminAddMembers string ` json:"admin_add_members"` // Stored encrypted
  19. AdminEditInfo string ` json:"admin_edit_info"` // Stored encrypted
  20. AdminSendMessages string ` json:"admin_send_messages"` // Stored encrypted
  21. CreatedAt time.Time ` json:"created_at"`
  22. UpdatedAt time.Time ` json:"updated_at"`
  23. }
  24. // GetConversationDetailByID gets by id
  25. func GetConversationDetailByID(id string) (ConversationDetail, error) {
  26. var (
  27. conversationDetail ConversationDetail
  28. err error
  29. )
  30. err = DB.Preload(clause.Associations).
  31. Where("id = ?", id).
  32. First(&conversationDetail).
  33. Error
  34. return conversationDetail, err
  35. }
  36. // GetConversationDetailsByIds gets by multiple ids
  37. func GetConversationDetailsByIds(id []string, updatedAt time.Time) ([]ConversationDetail, error) {
  38. var (
  39. query *gorm.DB
  40. conversationDetail []ConversationDetail
  41. err error
  42. )
  43. query = DB.Preload(clause.Associations).
  44. Where("id IN ?", id)
  45. if !updatedAt.IsZero() {
  46. query = query.Where("updated_at > ?", updatedAt)
  47. }
  48. err = query.Find(&conversationDetail).
  49. Error
  50. return conversationDetail, err
  51. }
  52. // CreateConversationDetail creates a ConversationDetail record
  53. func (conversationDetail *ConversationDetail) CreateConversationDetail() error {
  54. return DB.Session(&gorm.Session{FullSaveAssociations: true}).
  55. Create(conversationDetail).
  56. Error
  57. }
  58. // UpdateConversationDetail updates a ConversationDetail record
  59. func (conversationDetail *ConversationDetail) UpdateConversationDetail() error {
  60. return DB.Session(&gorm.Session{FullSaveAssociations: true}).
  61. Where("id = ?", conversationDetail.ID).
  62. Updates(conversationDetail).
  63. Error
  64. }
  65. // DeleteConversationDetail deletes a ConversationDetail record
  66. func (conversationDetail *ConversationDetail) DeleteConversationDetail() error {
  67. return DB.Session(&gorm.Session{FullSaveAssociations: true}).
  68. Delete(conversationDetail).
  69. Error
  70. }