@@ -49,6 +49,8 @@ type Service interface {
4949 SendHoursRequestAcceptedMessage (ctx context.Context , userID , requestID int64 ) (int64 , error )
5050 // SendHoursRequestDeclinedMessage sends an hours request decline message to a user's organization message.
5151 SendHoursRequestDeclinedMessage (ctx context.Context , userID , requestID int64 ) (int64 , error )
52+ // SendVolunteerRequestAcceptanceMessage sends a VolunteerRequestAcceptance message based on request ID and opportunity ID.
53+ SendVolunteerRequestAcceptanceMessage (ctx context.Context , userID , accepterID , opportunityID int64 ) (int64 , error )
5254}
5355
5456// service represents the internal implementation of the conversations Service.
@@ -469,7 +471,7 @@ func (s *service) parseMessage(ctx context.Context, messageType string, rawMessa
469471 return nil , err
470472 }
471473
472- view , err := s .getMessageVolunteerRequestAcceptance (ctx , body .UserID , body .OpportunityID )
474+ view , err := s .getMessageVolunteerRequestAcceptance (ctx , body .UserID , body .AccepterID , body . OpportunityID )
473475 if err != nil {
474476 return nil , err
475477 }
@@ -593,15 +595,34 @@ func (s *service) getMessageVolunteerRequestProfileView(ctx context.Context, use
593595}
594596
595597// getMessageVolunteerRequestAcceptance gets a MessageTypeVolunteerRequestAcceptanceView by user ID and opportunity ID.
596- func (s * service ) getMessageVolunteerRequestAcceptance (ctx context.Context , userID , opportunityID int64 ) (* MessageTypeVolunteerRequestAcceptanceView , error ) {
598+ func (s * service ) getMessageVolunteerRequestAcceptance (ctx context.Context , userID , accepterID , opportunityID int64 ) (* MessageTypeVolunteerRequestAcceptanceView , error ) {
597599 view := & MessageTypeVolunteerRequestAcceptanceView {}
598600
599601 opportunity , err := s .opportunityRepository .FindByID (ctx , opportunityID )
600602 if err != nil {
601603 return nil , err
602604 }
603605
604- view .UserID = userID
606+ volunteer , err := s .userRepository .FindByID (userID )
607+ if err != nil {
608+ return nil , err
609+ }
610+
611+ accepter , err := s .userRepository .FindByID (accepterID )
612+ if err != nil {
613+ return nil , err
614+ }
615+
616+ view .Volunteer = & MessageUserWithName {
617+ ID : userID ,
618+ FirstName : volunteer .FirstName ,
619+ LastName : volunteer .LastName ,
620+ }
621+ view .Accepter = & MessageUserWithName {
622+ ID : accepterID ,
623+ FirstName : accepter .FirstName ,
624+ LastName : accepter .LastName ,
625+ }
605626 view .OpportunityID = opportunityID
606627 view .OpportunityTitle = opportunity .Title
607628
@@ -688,7 +709,7 @@ func (s *service) SendHoursRequestAcceptedMessage(ctx context.Context, userID, r
688709 message .ConversationID = conversation .ID
689710 message .SenderID = userID
690711 message .Type = models .MessageTypeHoursAccepted
691- perspective := models .MessageSenderPerspectiveVolunteer
712+ perspective := models .MessageSenderPerspectiveOrganization
692713
693714 message .SenderPerspective = & perspective
694715
@@ -729,7 +750,7 @@ func (s *service) SendHoursRequestDeclinedMessage(ctx context.Context, userID, r
729750 message .ConversationID = conversation .ID
730751 message .SenderID = userID
731752 message .Type = models .MessageTypeHoursDeclined
732- perspective := models .MessageSenderPerspectiveVolunteer
753+ perspective := models .MessageSenderPerspectiveOrganization
733754
734755 message .SenderPerspective = & perspective
735756
@@ -751,3 +772,46 @@ func (s *service) SendHoursRequestDeclinedMessage(ctx context.Context, userID, r
751772
752773 return message .ID , nil
753774}
775+
776+ // SendVolunteerRequestAcceptanceMessage sends a VolunteerRequestAcceptance message based on request ID and opportunity ID.
777+ func (s * service ) SendVolunteerRequestAcceptanceMessage (ctx context.Context , userID , accepterID , opportunityID int64 ) (int64 , error ) {
778+ opportunity , err := s .opportunityRepository .FindByID (ctx , opportunityID )
779+ if err != nil {
780+ return 0 , NewErrServerError ()
781+ }
782+
783+ conversation , err := s .conversationRepository .FindUserOrganizationConversation (ctx , userID , opportunity .OrganizationID )
784+ if err != nil {
785+ return 0 , NewErrConversationNotFound ()
786+ }
787+
788+ message := models.Message {}
789+ message .ID = s .snowflakeService .GenerateID ()
790+ message .Timestamp = time .Now ()
791+ message .ConversationID = conversation .ID
792+ message .SenderID = accepterID
793+ message .Type = models .MessageTypeVolunteerRequestAcceptance
794+ perspective := models .MessageSenderPerspectiveOrganization
795+
796+ message .SenderPerspective = & perspective
797+
798+ messageBody := MessageTypeVolunteerRequestAcceptance {
799+ UserID : userID ,
800+ AccepterID : accepterID ,
801+ OpportunityID : opportunityID ,
802+ }
803+
804+ jsonBytes , err := marshalMessageBody (messageBody )
805+ if err != nil {
806+ return 0 , NewErrServerError ()
807+ }
808+
809+ message .Body = * jsonBytes
810+ message .Edited = false
811+ if err := s .sendMessage (ctx , message ); err != nil {
812+ s .logger .Error ().Err (err ).Msg ("Error creating message" )
813+ return 0 , NewErrServerError ()
814+ }
815+
816+ return message .ID , nil
817+ }
0 commit comments