package postgres import ( "context" "errors" "zee/internal/resource/role" "gorm.io/gorm" ) type roleRepository struct { db *gorm.DB } // NewRoleRepository tạo mới một instance của RoleRepository func NewRoleRepository(db *gorm.DB) role.Repository { return &roleRepository{db: db} } func (r *roleRepository) Create(ctx context.Context, role *role.Role) error { return r.db.WithContext(ctx).Create(role).Error } func (r *roleRepository) GetByID(ctx context.Context, id int) (*role.Role, error) { var role role.Role err := r.db.WithContext(ctx).First(&role, id).Error if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return &role, err } func (r *roleRepository) GetByName(ctx context.Context, name string) (*role.Role, error) { var role role.Role err := r.db.WithContext(ctx).First(&role, "name = ?", name).Error if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return &role, err } func (r *roleRepository) List(ctx context.Context) ([]*role.Role, error) { var roles []*role.Role err := r.db.WithContext(ctx).Find(&roles).Error return roles, err } func (r *roleRepository) Update(ctx context.Context, role *role.Role) error { return r.db.WithContext(ctx).Save(role).Error } func (r *roleRepository) Delete(ctx context.Context, id int) error { return r.db.WithContext(ctx).Delete(&role.Role{}, id).Error }