fix: avoid company writes for employee serials
This commit is contained in:
@@ -79,20 +79,6 @@ func (s *EmployeeSerialsService) generateWithDB(
|
||||
) ([]models.EmployeeSerial, error) {
|
||||
var serials []models.EmployeeSerial
|
||||
|
||||
// 检查公司是否存在,不存在则创建
|
||||
var company models.Company
|
||||
result := db.Where("company_name = ?", companyName).First(&company)
|
||||
if result.Error != nil {
|
||||
company = models.Company{
|
||||
CompanyName: companyName,
|
||||
IsActive: true,
|
||||
}
|
||||
result = db.Create(&company)
|
||||
if result.Error != nil {
|
||||
return nil, fmt.Errorf("创建公司失败: %w", result.Error)
|
||||
}
|
||||
}
|
||||
|
||||
// 生成序列号前缀
|
||||
if serialPrefix == "" {
|
||||
serialPrefix = fmt.Sprintf("EMP%d", time.Now().Year()%100)
|
||||
@@ -136,7 +122,7 @@ func (s *EmployeeSerialsService) generateWithDB(
|
||||
}
|
||||
|
||||
// 保存到数据库
|
||||
result = db.Create(&serials)
|
||||
result := db.Create(&serials)
|
||||
if result.Error != nil {
|
||||
return nil, fmt.Errorf("保存员工序列号失败: %w", result.Error)
|
||||
}
|
||||
@@ -197,17 +183,6 @@ func (s *EmployeeSerialsService) Update(serialNumber string, updateData models.U
|
||||
}
|
||||
|
||||
if updateData.CompanyName != "" {
|
||||
// 检查公司是否存在
|
||||
var company models.Company
|
||||
companyResult := database.DB.Where("company_name = ?", updateData.CompanyName).First(&company)
|
||||
if companyResult.Error != nil {
|
||||
company = models.Company{
|
||||
CompanyName: updateData.CompanyName,
|
||||
IsActive: true,
|
||||
}
|
||||
database.DB.Create(&company)
|
||||
}
|
||||
|
||||
serial.CompanyName = updateData.CompanyName
|
||||
}
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@ func TestEmployeeSerialsService_Generate_Success(t *testing.T) {
|
||||
database.DB.Unscoped().Delete(&user)
|
||||
}
|
||||
|
||||
func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) {
|
||||
func TestEmployeeSerialsService_Generate_DoesNotCreateManagedCompany(t *testing.T) {
|
||||
var user models.User
|
||||
password, _ := bcrypt.GenerateFromPassword([]byte("password123"), bcrypt.DefaultCost)
|
||||
user = models.User{
|
||||
@@ -266,11 +266,9 @@ func TestEmployeeSerialsService_Generate_CreateNewCompany(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, serials, 3)
|
||||
|
||||
var company models.Company
|
||||
result := database.DB.Where("company_name = ?", "NewEmpCompany").First(&company)
|
||||
assert.NoError(t, result.Error)
|
||||
assert.Equal(t, "NewEmpCompany", company.CompanyName)
|
||||
assert.True(t, company.IsActive)
|
||||
var count int64
|
||||
database.DB.Model(&models.Company{}).Where("company_name = ?", "NewEmpCompany").Count(&count)
|
||||
assert.Equal(t, int64(0), count)
|
||||
|
||||
for _, serial := range serials {
|
||||
database.DB.Unscoped().Delete(&serial)
|
||||
@@ -419,6 +417,10 @@ func TestEmployeeSerialsService_Update_Success(t *testing.T) {
|
||||
assert.Equal(t, "新名字", result.EmployeeName)
|
||||
assert.False(t, result.IsActive)
|
||||
|
||||
var count int64
|
||||
database.DB.Model(&models.Company{}).Where("company_name = ?", "UpdatedEmpCompany").Count(&count)
|
||||
assert.Equal(t, int64(0), count)
|
||||
|
||||
for _, serial := range serials {
|
||||
database.DB.Unscoped().Delete(&serial)
|
||||
}
|
||||
|
||||
@@ -33,6 +33,34 @@ func TestUsersService_Create_Success(t *testing.T) {
|
||||
database.DB.Unscoped().Where("employee_name = ?", "新技术员").Delete(&models.EmployeeSerial{})
|
||||
}
|
||||
|
||||
func TestUsersService_Create_DoesNotTouchCompanyTable(t *testing.T) {
|
||||
database.DB.Unscoped().Where("company_name = ?", "内部员工").Delete(&models.Company{})
|
||||
company := models.Company{CompanyName: "内部员工", IsActive: true}
|
||||
assert.NoError(t, database.DB.Create(&company).Error)
|
||||
assert.NoError(t, database.DB.Delete(&company).Error)
|
||||
|
||||
svc := UsersService{}
|
||||
dto, err := svc.Create(models.CreateUserDTO{
|
||||
Password: "password123",
|
||||
Name: "软删公司员工",
|
||||
Phone: "13800000008",
|
||||
EmployeeNo: "users_create_restore_company",
|
||||
Position: "硬件工程师",
|
||||
Role: "hardware_engineer",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, dto)
|
||||
assert.Len(t, dto.EmployeeSerials, 1)
|
||||
|
||||
var count int64
|
||||
database.DB.Model(&models.Company{}).Where("company_name = ?", "内部员工").Count(&count)
|
||||
assert.Equal(t, int64(0), count)
|
||||
|
||||
database.DB.Unscoped().Where("username = ?", "users_create_restore_company").Delete(&models.User{})
|
||||
database.DB.Unscoped().Where("employee_name = ?", "软删公司员工").Delete(&models.EmployeeSerial{})
|
||||
database.DB.Unscoped().Where("company_name = ?", "内部员工").Delete(&models.Company{})
|
||||
}
|
||||
|
||||
func TestUsersService_Create_BlocksEmployeeRole(t *testing.T) {
|
||||
svc := UsersService{}
|
||||
_, err := svc.Create(models.CreateUserDTO{
|
||||
|
||||
Reference in New Issue
Block a user