Skip to content

Commit 7e18e7c

Browse files
committed
Append to existing conversation when requesting opportunity memebership
from organizations where you already have a conversation
1 parent ae515da commit 7e18e7c

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

internal/conversations/service.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
103103
func (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

Comments
 (0)