✨ Implement the database routine
This commit is contained in:
		
							parent
							
								
									ca63d7be2f
								
							
						
					
					
						commit
						498ddbc31e
					
				@ -2,6 +2,9 @@
 | 
				
			|||||||
FROM golang:1.13-stretch AS build-env
 | 
					FROM golang:1.13-stretch AS build-env
 | 
				
			||||||
COPY . /src
 | 
					COPY . /src
 | 
				
			||||||
WORKDIR /src
 | 
					WORKDIR /src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENV GOPROXY=http://192.168.0.143:3000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENV GO113MODULE=on
 | 
					ENV GO113MODULE=on
 | 
				
			||||||
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go test ./... -cover -coverprofile=c.out #gosetup
 | 
					RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go test ./... -cover -coverprofile=c.out #gosetup
 | 
				
			||||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o goapp
 | 
					RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o goapp
 | 
				
			||||||
 | 
				
			|||||||
@ -55,7 +55,8 @@ func (g groupHelperService) CreateUser(user *models.User) (*models.User, error)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (g groupHelperService) GetUserByID(userID int64) (*models.User, error) {
 | 
					func (g groupHelperService) GetUserByID(userID int64) (*models.User, error) {
 | 
				
			||||||
	return g.groupHelperRepo.GetUserByID(userID)
 | 
						user, err := g.groupHelperRepo.GetUserByID(userID)
 | 
				
			||||||
 | 
						return user, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (g groupHelperService) UserJoinGroup(user *models.User, group *models.Group) (bool, error) {
 | 
					func (g groupHelperService) UserJoinGroup(user *models.User, group *models.Group) (bool, error) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								main.go
									
									
									
									
									
								
							@ -56,17 +56,19 @@ func main() {
 | 
				
			|||||||
	service := logic.NewGroupHelperService(groupHelperRepo)
 | 
						service := logic.NewGroupHelperService(groupHelperRepo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cm := InitialCommandManager(bot, service)
 | 
						cm := InitialCommandManager(bot, service)
 | 
				
			||||||
	rm := InitialRoutineManager(bot, cm)
 | 
						rm := InitialRoutineManager(bot, cm, service)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rm.StartUpdates()
 | 
						rm.StartUpdates()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func InitialRoutineManager(bot *tgbotapi.BotAPI, commandManager *cli.CommandManager) *telegram.RoutineManager {
 | 
					func InitialRoutineManager(bot *tgbotapi.BotAPI, commandManager *cli.CommandManager, service logic.GroupHelperService) *telegram.RoutineManager {
 | 
				
			||||||
	rm := &telegram.RoutineManager{
 | 
						rm := &telegram.RoutineManager{
 | 
				
			||||||
		Bot: bot,
 | 
							Bot:                bot,
 | 
				
			||||||
 | 
							GroupHelperService: service,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rm.RegisterRoutine(routines.NewCommandRoutine(commandManager))
 | 
						rm.RegisterRoutine(routines.NewCommandRoutine(commandManager))
 | 
				
			||||||
 | 
						rm.RegisterRoutine(routines.NewDatabaseRoutine(service))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rm
 | 
						return rm
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -124,15 +124,22 @@ func (g groupHelperRepository) CreateUser(user *models.User) (*models.User, erro
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (g groupHelperRepository) GetUserByID(userID int64) (*models.User, error) {
 | 
					func (g groupHelperRepository) GetUserByID(userID int64) (*models.User, error) {
 | 
				
			||||||
	var user models.User
 | 
						var user models.User
 | 
				
			||||||
	err := g.Conn.Where("user_id = ?", userID).First(&user).Error
 | 
						db := g.Conn.Where("user_id = ?", userID).First(&user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if db.RecordNotFound() {
 | 
				
			||||||
		return nil, errors.New("problem while getting the user by his user id - " + err.Error())
 | 
							return g.CreateUser(&models.User{
 | 
				
			||||||
 | 
								UserID: userID,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if db.Error != nil {
 | 
				
			||||||
 | 
							return nil, errors.New("problem while getting the user by his user id - " + db.Error.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return &user, nil
 | 
						return &user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (g groupHelperRepository) UserJoinGroup(user *models.User, group *models.Group) (bool, error) {
 | 
					func (g groupHelperRepository) UserJoinGroup(user *models.User, group *models.Group) (bool, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := g.Conn.Model(user).Association("Groups").Append(group).Error
 | 
						err := g.Conn.Model(user).Association("Groups").Append(group).Error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@ func (rm RoutineManager) StartUpdates() {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, routine := range rm.Routine {
 | 
							for _, routine := range rm.Routine {
 | 
				
			||||||
			err := routine.Update(&update, group)
 | 
								err := routine.Update(rm.Bot, &update, group)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				log.Printf("ERROR - Routine error")
 | 
									log.Printf("ERROR - Routine error")
 | 
				
			||||||
 | 
				
			|||||||
@ -6,5 +6,5 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Routine interface {
 | 
					type Routine interface {
 | 
				
			||||||
	Update(update *tgbotapi.Update, group *models.Group) error
 | 
						Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update, group *models.Group) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@ func NewCommandRoutine(commandManager *cli.CommandManager) telegram.Routine {
 | 
				
			|||||||
	return &commandRoutine{CommandManager: commandManager}
 | 
						return &commandRoutine{CommandManager: commandManager}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cr commandRoutine) Update(update *tgbotapi.Update, group *models.Group) error {
 | 
					func (cr commandRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update, group *models.Group) error {
 | 
				
			||||||
	_, err := cr.CommandManager.ExecuteUpdate(update, group)
 | 
						_, err := cr.CommandManager.ExecuteUpdate(update, group)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								telegram/routines/database.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								telegram/routines/database.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					package routines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"git.dragon-labs.de/alphyron/group_helper/logic"
 | 
				
			||||||
 | 
						"git.dragon-labs.de/alphyron/group_helper/models"
 | 
				
			||||||
 | 
						"git.dragon-labs.de/alphyron/group_helper/telegram"
 | 
				
			||||||
 | 
						tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type databaseRoutine struct {
 | 
				
			||||||
 | 
						groupHelperService logic.GroupHelperService
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewDatabaseRoutine(groupHelperService logic.GroupHelperService) telegram.Routine {
 | 
				
			||||||
 | 
						return &databaseRoutine{groupHelperService: groupHelperService}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (d databaseRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update, group *models.Group) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if update.Message == nil { // ignore any non-Message Updates
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if update.Message.Chat.IsPrivate() || update.Message.Chat.IsChannel() {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if update.Message.NewChatMembers != nil {
 | 
				
			||||||
 | 
							for _, newUser := range *update.Message.NewChatMembers {
 | 
				
			||||||
 | 
								user, err := d.groupHelperService.GetUserByID(int64(newUser.ID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								go d.groupHelperService.UserJoinGroup(user, group)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							config := tgbotapi.ChatConfig{
 | 
				
			||||||
 | 
								ChatID: update.Message.Chat.ID,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							size, _ := botAPI.GetChatMembersCount(config)
 | 
				
			||||||
 | 
							group.Size = size - 1
 | 
				
			||||||
 | 
							_, err := d.groupHelperService.UpdateGroup(group)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if update.Message.LeftChatMember != nil {
 | 
				
			||||||
 | 
							user, err := d.groupHelperService.GetUserByID(int64(update.Message.LeftChatMember.ID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							go d.groupHelperService.UserLeaveGroup(user, group)
 | 
				
			||||||
 | 
							config := tgbotapi.ChatConfig{
 | 
				
			||||||
 | 
								ChatID: update.Message.Chat.ID,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							size, _ := botAPI.GetChatMembersCount(config)
 | 
				
			||||||
 | 
							group.Size = size - 1
 | 
				
			||||||
 | 
							_, err = d.groupHelperService.UpdateGroup(group)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user, err := d.groupHelperService.GetUserByID(int64(update.Message.From.ID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = d.groupHelperService.UserJoinGroup(user, group)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user