Files
houston-be/model/user/user.go
2023-11-02 13:11:52 +05:30

96 lines
2.4 KiB
Go

package user
import (
"errors"
"gorm.io/gorm"
)
type Repository struct {
gormClient *gorm.DB
}
func NewUserRepository(gormClient *gorm.DB) *Repository {
return &Repository{
gormClient: gormClient,
}
}
func (r *Repository) InsertHoustonUsers(users []UserEntity) error {
result := r.gormClient.Create(&users)
if result.Error != nil || result.RowsAffected != int64(len(users)) {
return result.Error
}
return nil
}
func (r *Repository) UpdateHoustonUser(user UserEntity) error {
result := r.gormClient.Select("*").Updates(&user)
if result.Error != nil || result.RowsAffected != 1 {
return result.Error
}
return nil
}
func (r *Repository) GetAllHoustonUsers() (*[]UserEntity, error) {
var users []UserEntity
result := r.gormClient.Find(&users)
if result.Error != nil {
return nil, result.Error
}
return &users, nil
}
func (r *Repository) IsAHoustonUser(nameOrSlackUserId string) (bool, *UserEntity) {
var existingUser UserEntity
findByName := r.gormClient.Where("name = ?", nameOrSlackUserId).First(&existingUser)
if findByName.Error != nil {
findBySlackUserId := r.gormClient.Where("slack_user_id = ?", nameOrSlackUserId).First(&existingUser)
if findBySlackUserId.Error != nil {
return false, nil
}
}
return true, &existingUser
}
func (r *Repository) FindHoustonUserBySlackUserId(slackUserId string) (*UserEntity, error) {
var user UserEntity
result := r.gormClient.Where("slack_user_id = ?", slackUserId).First(&user)
if result.Error != nil {
// If the user is not found, return both entity and error as nil
if errors.Is(gorm.ErrRecordNotFound, result.Error) {
return nil, nil
}
return nil, result.Error
}
return &user, nil
}
func (r *Repository) InsertHoustonUser(user *UserEntity) error {
result := r.gormClient.Create(&user)
if result.Error != nil || result.RowsAffected != 1 {
return result.Error
}
return nil
}
func (r *Repository) GetHoustonUsersBySlackId(slackUserId []string) (*[]UserEntity, error) {
var users []UserEntity
result := r.gormClient.Where("slack_user_id IN ?", slackUserId).Find(&users)
if result.Error != nil {
return nil, result.Error
}
return &users, nil
}
func (r *Repository) GetAllActiveHoustonUserBots() ([]UserEntity, error) {
var users []UserEntity
result := r.gormClient.Where("is_bot = ? AND active = ?", true, true).Find(&users)
if result.Error != nil {
return nil, result.Error
}
return users, nil
}