144 lines
4.1 KiB
Go
144 lines
4.1 KiB
Go
package repository
|
|
|
|
import (
|
|
"acc-server-manager/local/model"
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type MembershipRepository struct {
|
|
*BaseRepository[model.User, model.MembershipFilter]
|
|
}
|
|
|
|
func NewMembershipRepository(db *gorm.DB) *MembershipRepository {
|
|
return &MembershipRepository{
|
|
BaseRepository: NewBaseRepository[model.User, model.MembershipFilter](db, model.User{}),
|
|
}
|
|
}
|
|
|
|
func (r *MembershipRepository) FindUserByUsername(ctx context.Context, username string) (*model.User, error) {
|
|
var user model.User
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Preload("Role.Permissions").Where("username = ?", username).First(&user).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) FindUserByIDWithPermissions(ctx context.Context, userID string) (*model.User, error) {
|
|
var user model.User
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Preload("Role.Permissions").First(&user, "id = ?", userID).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) CreateUser(ctx context.Context, user *model.User) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Create(user).Error
|
|
}
|
|
|
|
func (r *MembershipRepository) FindRoleByName(ctx context.Context, name string) (*model.Role, error) {
|
|
var role model.Role
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Where("name = ?", name).First(&role).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &role, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) CreateRole(ctx context.Context, role *model.Role) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Create(role).Error
|
|
}
|
|
|
|
func (r *MembershipRepository) FindPermissionByName(ctx context.Context, name string) (*model.Permission, error) {
|
|
var permission model.Permission
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Where("name = ?", name).First(&permission).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &permission, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) CreatePermission(ctx context.Context, permission *model.Permission) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Create(permission).Error
|
|
}
|
|
|
|
func (r *MembershipRepository) AssignPermissionsToRole(ctx context.Context, role *model.Role, permissions []model.Permission) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Model(role).Association("Permissions").Replace(permissions)
|
|
}
|
|
|
|
func (r *MembershipRepository) GetUserPermissions(ctx context.Context, userID uuid.UUID) ([]string, error) {
|
|
var user model.User
|
|
db := r.db.WithContext(ctx)
|
|
|
|
if err := db.Preload("Role.Permissions").First(&user, "id = ?", userID).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
permissions := make([]string, len(user.Role.Permissions))
|
|
for i, p := range user.Role.Permissions {
|
|
permissions[i] = p.Name
|
|
}
|
|
|
|
return permissions, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) ListUsers(ctx context.Context) ([]*model.User, error) {
|
|
var users []*model.User
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Preload("Role").Find(&users).Error
|
|
return users, err
|
|
}
|
|
|
|
func (r *MembershipRepository) DeleteUser(ctx context.Context, userID uuid.UUID) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Delete(&model.User{}, "id = ?", userID).Error
|
|
}
|
|
|
|
func (r *MembershipRepository) FindUserByID(ctx context.Context, userID uuid.UUID) (*model.User, error) {
|
|
var user model.User
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Preload("Role").First(&user, "id = ?", userID).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &user, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) UpdateUser(ctx context.Context, user *model.User) error {
|
|
db := r.db.WithContext(ctx)
|
|
return db.Save(user).Error
|
|
}
|
|
|
|
func (r *MembershipRepository) FindRoleByID(ctx context.Context, roleID uuid.UUID) (*model.Role, error) {
|
|
var role model.Role
|
|
db := r.db.WithContext(ctx)
|
|
err := db.First(&role, "id = ?", roleID).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &role, nil
|
|
}
|
|
|
|
func (r *MembershipRepository) ListUsersWithFilter(ctx context.Context, filter *model.MembershipFilter) (*[]model.User, error) {
|
|
return r.BaseRepository.GetAll(ctx, filter)
|
|
}
|
|
|
|
func (r *MembershipRepository) ListRoles(ctx context.Context) ([]*model.Role, error) {
|
|
var roles []*model.Role
|
|
db := r.db.WithContext(ctx)
|
|
err := db.Find(&roles).Error
|
|
return roles, err
|
|
}
|