✨ Restricted notify ability
This commit is contained in:
		
							
								
								
									
										64
									
								
								pkg/services/channel_members.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								pkg/services/channel_members.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| package services | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"git.solsynth.dev/hydrogen/messaging/pkg/database" | ||||
| 	"git.solsynth.dev/hydrogen/messaging/pkg/models" | ||||
| ) | ||||
|  | ||||
| func ListChannelMember(channelId uint) ([]models.ChannelMember, error) { | ||||
| 	var members []models.ChannelMember | ||||
|  | ||||
| 	if err := database.C. | ||||
| 		Where(&models.ChannelMember{ChannelID: channelId}). | ||||
| 		Preload("Account"). | ||||
| 		Find(&members).Error; err != nil { | ||||
| 		return members, err | ||||
| 	} | ||||
|  | ||||
| 	return members, nil | ||||
| } | ||||
|  | ||||
| func InviteChannelMember(user models.Account, target models.Channel) error { | ||||
| 	if _, err := GetAccountFriend(user.ID, target.AccountID, 1); err != nil { | ||||
| 		return fmt.Errorf("you only can invite your friends to your channel") | ||||
| 	} | ||||
|  | ||||
| 	member := models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	} | ||||
|  | ||||
| 	err := database.C.Save(&member).Error | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func AddChannelMember(user models.Account, target models.Channel) error { | ||||
| 	member := models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	} | ||||
|  | ||||
| 	err := database.C.Save(&member).Error | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func EditChannelMember(membership models.ChannelMember) (models.ChannelMember, error) { | ||||
| 	if err := database.C.Save(&membership).Error; err != nil { | ||||
| 		return membership, err | ||||
| 	} | ||||
| 	return membership, nil | ||||
| } | ||||
|  | ||||
| func RemoveChannelMember(user models.Account, target models.Channel) error { | ||||
| 	var member models.ChannelMember | ||||
|  | ||||
| 	if err := database.C.Where(&models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	}).First(&member).Error; err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return database.C.Delete(&member).Error | ||||
| } | ||||
| @@ -119,56 +119,6 @@ func NewChannel(user models.Account, alias, name, description string) (models.Ch | ||||
| 	return channel, err | ||||
| } | ||||
|  | ||||
| func ListChannelMember(channelId uint) ([]models.ChannelMember, error) { | ||||
| 	var members []models.ChannelMember | ||||
|  | ||||
| 	if err := database.C. | ||||
| 		Where(&models.ChannelMember{ChannelID: channelId}). | ||||
| 		Preload("Account"). | ||||
| 		Find(&members).Error; err != nil { | ||||
| 		return members, err | ||||
| 	} | ||||
|  | ||||
| 	return members, nil | ||||
| } | ||||
|  | ||||
| func InviteChannelMember(user models.Account, target models.Channel) error { | ||||
| 	if _, err := GetAccountFriend(user.ID, target.AccountID, 1); err != nil { | ||||
| 		return fmt.Errorf("you only can invite your friends to your channel") | ||||
| 	} | ||||
|  | ||||
| 	member := models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	} | ||||
|  | ||||
| 	err := database.C.Save(&member).Error | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func AddChannelMember(user models.Account, target models.Channel) error { | ||||
| 	member := models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	} | ||||
|  | ||||
| 	err := database.C.Save(&member).Error | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func RemoveChannelMember(user models.Account, target models.Channel) error { | ||||
| 	var member models.ChannelMember | ||||
|  | ||||
| 	if err := database.C.Where(&models.ChannelMember{ | ||||
| 		ChannelID: target.ID, | ||||
| 		AccountID: user.ID, | ||||
| 	}).First(&member).Error; err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return database.C.Delete(&member).Error | ||||
| } | ||||
|  | ||||
| func EditChannel(channel models.Channel, alias, name, description string) (models.Channel, error) { | ||||
| 	channel.Alias = alias | ||||
| 	channel.Name = name | ||||
|   | ||||
| @@ -85,13 +85,16 @@ func NewMessage(message models.Message) (models.Message, error) { | ||||
| 		for _, member := range members { | ||||
| 			message, _ = GetMessage(message.Channel, message.ID) | ||||
| 			if member.ID != message.Sender.ID { | ||||
| 				err = NotifyAccount(member.Account, | ||||
| 					fmt.Sprintf("New Message #%s", message.Channel.Alias), | ||||
| 					fmt.Sprintf("%s: %s", message.Sender.Account.Name, message.Content), | ||||
| 					true, | ||||
| 				) | ||||
| 				if err != nil { | ||||
| 					log.Warn().Err(err).Msg("An error occurred when trying notify user.") | ||||
| 				// TODO Check the mentioned status | ||||
| 				if member.Notify == models.NotifyLevelAll { | ||||
| 					err = NotifyAccount(member.Account, | ||||
| 						fmt.Sprintf("New Message #%s", message.Channel.Alias), | ||||
| 						fmt.Sprintf("%s: %s", message.Sender.Account.Name, message.Content), | ||||
| 						true, | ||||
| 					) | ||||
| 					if err != nil { | ||||
| 						log.Warn().Err(err).Msg("An error occurred when trying notify user.") | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			PushCommand(member.AccountID, models.UnifiedCommand{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user