@@ -102,21 +102,28 @@ func NewService(conversationRepository models.ConversationRepository, conversati
102102// CreateOpportunityMembershipRequestConversation creates an opportunity membership request conversation and adds a message to it. Returns conversation ID on success.
103103func (s * service ) CreateOpportunityMembershipRequestConversation (ctx context.Context , organizationID , opportunityID , opportunityMembershipRequestID , volunteerID int64 , messageStr string ) (int64 , error ) {
104104 // Conversation
105- conversation := models.Conversation {}
106- conversation .ID = s .snowflakeService .GenerateID ()
107- conversation .Active = true
108- conversation .OrganizationID = organizationID
109- conversation .Type = 1 // TODO: make this a constant in the models package
105+ var conversationID int64
106+ if conversation , err := s .conversationRepository .FindUserOrganizationConversation (ctx , volunteerID , organizationID ); err == nil {
107+ conversationID = conversation .ID
108+ } else {
109+ conversation := models.Conversation {}
110+ conversation .ID = s .snowflakeService .GenerateID ()
111+ conversation .Active = true
112+ conversation .OrganizationID = organizationID
113+ conversation .Type = 1 // TODO: make this a constant in the models package
114+
115+ if err := s .conversationRepository .Create (conversation ); err != nil {
116+ return 0 , NewErrServerError ()
117+ }
110118
111- if err := s .conversationRepository .Create (conversation ); err != nil {
112- return 0 , NewErrServerError ()
119+ conversationID = conversation .ID
113120 }
114121
115122 // ConversationMembership
116123 conversationMembership := models.ConversationMembership {}
117124 conversationMembership .ID = s .snowflakeService .GenerateID ()
118125 conversationMembership .Active = true
119- conversationMembership .ConversationID = conversation . ID
126+ conversationMembership .ConversationID = conversationID
120127 conversationMembership .UserID = volunteerID
121128 conversationMembership .Role = 0 // TODO: make this a constant in the models package
122129
@@ -127,7 +134,7 @@ func (s *service) CreateOpportunityMembershipRequestConversation(ctx context.Con
127134 // ConversationOpportunityMembershipRequest
128135 conversationOpportunityMembershipRequest := models.ConversationOpportunityMembershipRequest {}
129136 conversationOpportunityMembershipRequest .ID = s .snowflakeService .GenerateID ()
130- conversationOpportunityMembershipRequest .ConversationID = conversation . ID
137+ conversationOpportunityMembershipRequest .ConversationID = conversationID
131138 conversationOpportunityMembershipRequest .OpportunityMembershipRequestID = opportunityMembershipRequestID
132139
133140 if err := s .conversationOpportunityMembershipRequestRepository .Create (conversationOpportunityMembershipRequest ); err != nil {
@@ -136,7 +143,7 @@ func (s *service) CreateOpportunityMembershipRequestConversation(ctx context.Con
136143
137144 // Message
138145 message := models.Message {}
139- message .ConversationID = conversation . ID
146+ message .ConversationID = conversationID
140147 message .SenderID = volunteerID
141148 message .ID = s .snowflakeService .GenerateID ()
142149 message .Type = models .MessageTypeVolunteerRequestProfile
@@ -161,7 +168,7 @@ func (s *service) CreateOpportunityMembershipRequestConversation(ctx context.Con
161168 return 0 , NewErrServerError ()
162169 }
163170
164- return conversation . ID , nil
171+ return conversationID , nil
165172}
166173
167174// GetUserConversationMemberships gets a user's volunteer conversation memberships.
0 commit comments